-
Notifications
You must be signed in to change notification settings - Fork 0
/
assets-import.php
97 lines (81 loc) · 3.75 KB
/
assets-import.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
require __DIR__.'/vendor/autoload.php';
use Akeneo\Pim\ApiClient\AkeneoPimClientBuilder;
use Akeneo\Pim\ApiClient\Exception\NotFoundHttpException;
use Akeneo\Pim\ApiClient\Exception\UploadAssetReferenceFileErrorException;
use League\Csv\Reader;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\SingleCommandApplication;
use Symfony\Component\Dotenv\Dotenv;
(new SingleCommandApplication())
->setName('Importing images')
->setVersion('1.0.0')
->addArgument('family', InputArgument::REQUIRED)
->addOption('locale', 'l', InputOption::VALUE_OPTIONAL, 'locale code', 'en_US')
->setCode(function (InputInterface $input, OutputInterface $output): int {
// output arguments and options
$output->writeln('Syncing Images');
$assetFamilyCode = $input->getArgument('family');
$locale = $input->getOption('locale');
$dotenv = new Dotenv();
$dotenv->load(__DIR__.'/.env');
$clientBuilder = new AkeneoPimClientBuilder($_ENV['AKENEO_NEW_URL']);
$akeneoClient = $clientBuilder->buildAuthenticatedByPassword(
$_ENV['AKENEO_NEW_CLIENTID'],
$_ENV['AKENEO_NEW_SECRET'],
$_ENV['AKENEO_NEW_USERNAME'],
$_ENV['AKENEO_NEW_PASSWORD']
);
$csv = Reader::createFromPath('sample.csv', 'r');
$csv->setHeaderOffset(0);
$progressBar = new ProgressBar($output, $csv->count());
$progressBar->setFormat(ProgressBar::FORMAT_VERY_VERBOSE);
$progressBar->start();
foreach ( $csv->getRecords() as $record) {
$assetCode = $record['code'];
$assetUrl = $record['url'];
$assetTitle = $record['title'];
$pathInfo = pathinfo(parse_url($assetUrl, PHP_URL_PATH));
$imagePath = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $pathInfo['basename'];
try {
$asset = $akeneoClient->getAssetManagerApi()->get($assetFamilyCode, $assetCode);
// asset exist already, do nothing
} catch (NotFoundHttpException $e ) {
// lets create it
$akeneoClient->getAssetManagerApi()->upsert($assetFamilyCode, $assetCode, [
'code' => $assetCode,
'values' => [
'label' => [[
'locale' => $locale, 'channel' => null, 'data' => $assetTitle
]],
// update with your attributes below
'thumbnail_url' => [[
'locale' => null, 'channel' => null, 'data' => $assetUrl
]]
]
]);
try {
$mediaFileCode = $akeneoClient->getAssetMediaFileApi()->create($imagePath);
$akeneoClient->getAssetManagerApi()->upsert($assetFamilyCode, $assetCode, [
'code' => $assetCode,
'values' => [
// update with your image field name
'thumbnail_image' => [[
'locale' => null, 'channel' => null, 'data' => $mediaFileCode
]]
]
]);
} catch(UploadAssetReferenceFileErrorException $exception) {
print_r($exception->getErrors());
}
}
$progressBar->advance();
}
return Command::SUCCESS;
})
->run();