Eksport kategorii i produktów z Allegro do Prestashop

Logo Prestashop

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

Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Więcej informacji

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close