W tym wpisie przedstawię skrypt PHP który można wykorzystać w celu zaimportowania produktów które mamy na swoim koncie Allegro do sklepu opartego na Prestashop wraz z kategoriami.
Pobieranie Access Token
W pierwszej kolejności musimy stworzyć swoją aplikację na koncie Allegro. Aby pobrać Access Token musimy się zalogować do tej aplikacji.
Na stronie na którą zrobiliśmy przekierowanie wrzucamy taki skrypt:
<?php
define('URL', 'https://github.com');
define('ALLEGRO_CLIENT_API', 'test');
define('ALLEGRO_CLIENT_SECRET', 'test');
if(!empty($_GET['code'])){
$authUrl = "https://allegro.pl/auth/oauth/token?grant_type=authorization_code&code=".$_GET['code']."&redirect_uri=".URL;
$ch = curl_init($authUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Basic ".base64_encode(ALLEGRO_CLIENT_API.':'.ALLEGRO_CLIENT_SECRET),
"Accept: application/vnd.allegro.public.v1+json"
]);
$tokenResult = curl_exec($ch);
curl_close($ch);
$tokenResult = json_decode($tokenResult, true);
print_r($tokenResult);
}else{
echo('<a href="https://allegro.pl/auth/oauth/authorize?response_type=code&client_id='.ALLEGRO_CLIENT_API.'&redirect_uri='.URL.'">powiąż z allegro</a>');
}
Gdzie pod stałą URL dajemy adres absolutny tego skryptu w sieci (musi być taki sam jak adres przekierowania w aplikacji Allegro), ALLEGRO_CLIENT_API to ID aplikacji w Allegro a ALLEGRO_CLIENT_SECRET to klucz aplikacji.
Wchodzimy pod adres gdzie wrzuciliśmy skrypt, klikamy na „powiąż z allegro”, po zalogowaniu się w allegro wrócimy na tą stronę i wyświetli się nam token z Allegro. Zapisujemy go.
Pobieranie kategorii
Przejdźmy do pobierania kategorii. Wykorzystamy ten skrypt:
<?php
define('TOKEN', 'nasz token');
$category_id = 4029;
function getCategories($category_id){
$ch = curl_init("https://api.allegro.pl/sale/categories?parent.id=".$category_id); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer ".TOKEN, "Accept: application/vnd.allegro.public.v1+json" ]); $result = curl_exec($ch); return json_decode($result, true)['categories'];
}
$lines = [];
function addCategories($categories, $parent_id){
global $lines;
foreach($categories as $category){
$lines[] = [$category['id'], $category['name'], $parent_id, 1];
addCategories(getCategories($category['id']), $category['id']);
}
}
addCategories(getCategories($category_id), $category_id);
header('Content-Disposition: attachment; filename="kategorie.csv";');
$f = fopen("kategorie.csv", "w");
foreach ($lines as $line) {
fputcsv($f, $line, ';');
}
Pod token wklejany nasz token a pod category_id dajemy ID kategorii głównej (lub null jeśli chcemy pobrać wszystkie). Kategoria 4029 to Samochody osobowe. Wybierz kategorię którą Ty będziesz chciał zaimportować do sklepu. Skrypt pobierze nam wszystkie kategorie i ich podkategorie a następnie zapisze w formacie CSV. Wygenerowany plik CSV możemy następnie zaimportować w PrestaShop (Zaawansowane > Importuj > Kategorie).
Pobieranie produktów
Po pobraniu i zaimportowaniu w PrestaShop kategorii możemy pobrać produkty. W tym celu wykorzystujemy poniższy skrypt:
define('TOKEN', 'nasz token');
$parametersAllegroArray = [];
function getParametersAllegro(int $categoryId){
global $parametersAllegroArray;
if(!isset($parametersAllegroArray[$categoryId])){
$parametersAllegroArray[$categoryId] = getParametersFromAllegro($categoryId);
}
return $parametersAllegroArray[$categoryId];
}
function getParametersFromAllegro(int $categoryId){
$getOffersUrl = "https://api.allegro.pl/sale/categories/".$categoryId."/parameters";
$ch = curl_init($getOffersUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer ".TOKEN,
"Accept: application/vnd.allegro.public.v1+json"
]);
$parametersResult = curl_exec($ch);
$resultCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($parametersResult === false || $resultCode !== 200) {
return false;
}
$parameters = json_decode($parametersResult);
return $parameters;
}
$f = fopen("produkty.csv", "w");
function getOffers(int $offset = 0, int $limit = 100){
$getOffersUrl = "https://api.allegro.pl/sale/offers?publication.status=ACTIVATING&publication.status=ACTIVE&sellingMode.format=BUY_NOW&limit=".$limit."&offset=".$offset;
$ch = curl_init($getOffersUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer ".TOKEN,
"Accept: application/vnd.allegro.public.v1+json"
]);
$offersResult = curl_exec($ch);
$resultCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($offersResult === false || $resultCode !== 200) {
return false;
}
$offers = json_decode($offersResult);
return $offers;
}
public static function getOffer(int $id){
$getOfferUrl = "https://api.allegro.pl/sale/offers/".$id;
$ch = curl_init($getOfferUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer ".TOKEN,
"Accept: application/vnd.allegro.public.v1+json"
]);
$productResult = curl_exec($ch);
$resultCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($productResult === false || $resultCode !== 200) {
return false;
}
$product = json_decode($productResult);
return $product;
}
$offers = getOffers();
$lines = [];
foreach($offers->offers as $offer){
$product = allegro::getOffer($offer->id);
$description = '';
foreach($product->description->sections as $section){
foreach($section->items as $item){
if($item->type == 'TEXT'){
$description .= $item->content;
}elseif($item->type == 'IMAGE'){
$description .= '<img src="'.$item->url.'">';
}
}
}
$images = '';
foreach($product->images as $image){
$images .= $image->url.',';
}
$images = trim($images,',');
$parametry = '';
$marka = '';
$parametersAllegro = getParametersAllegro($product->category->id);
foreach($product->parameters as $parameter){
if($parameter->id != 11323){ // omijam stan
foreach($parametersAllegro->parameters as $parameterAllegro){
if($parameter->id == $parameterAllegro->id){
if($parameter->id == 127415){ // producent części
foreach($parameterAllegro->dictionary as $dictionary){
if($dictionary->id == $parameter->valuesIds[0]){
$marka = $dictionary->value;
}
}
}else{
if(isset($parameterAllegro->dictionary)){
foreach($parameterAllegro->dictionary as $dictionary){
if($dictionary->id == $parameter->valuesIds[0]){
$parametry .= $parameterAllegro->name.':'.$dictionary->value.'::,';
}
}
}else{
$parametry .= $parameterAllegro->name.':'.$parameter->values[0].'::,';
}
}
}
}
}
}
$parametry = trim($parametry,',');
if(isset($product->sellingMode->netPrice->amount)){
$price = $product->sellingMode->netPrice->amount;
}else{
$price = round($product->sellingMode->price->amount/1.23, 2);
}
$name = trim(trim($product->name,'#'));
$name = str_replace("=","-",$name);
$name = str_replace("<","-",$name);
$name = str_replace(">","-",$name);
$name = str_replace(";","-",$name);
$lines[] = [
'', //$product->id,
$offer->publication->status=='ACTIVE' ? 1 : 0,
$name,
$product->category->id.',2',
$price,
1,
'',
1,
0,
0,
'',
'',
'',
'',
'', // Dostawca
$marka,
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
$offer->stock->available,
'',
'',
'',
'',
0,
'',
'',
'',
$description,
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
1,
$images,
'',
1,
$parametry, // parametry
'',
'new'
];
}
foreach ($lines as $line) {
fputcsv($f, $line, ';');
}
Tu podobnie pod token dajemy nasz token. Skrypt pobierze nie tylko produkty ale też parametry do nich i wygeneruje plik CSV który następnie możemy zaimportować w Prestashop. Skrypt importuje do 100 produktów (jedną stronę paginacji), jeśli mamy więcej produktów należy stworzyć odpowiednią pętlę.
Podsumowanie
Mam nadzieje że ten zarys skryptu pozwoli Wam zaimportować produkty ze swojego konta Allegro do PrestaShop. Oczywiście żeby wykorzystać ten skrypt niezbędna jest wiedza programistyczna. Cały kod znajdziecie na GitHub: https://github.com/kamilwyremski/allegro-do-prestashop