Muszę pobrać wszystkie produkty wraz z ich informacjami (opis, zdjęcia, id itp itd). Produktów jest około 20 tyś.
Cały mój kod pobierania tego wygląda tak:
Kod
foreach($kategorie as $kat)
{
$config['CategoryId'] = $kat['Id']; //dodanie do config zmiennej id kategorii
$katalog = $this->client->getProductList($config);
$produkty_temp[$kat['Id']] = $katalog->getProductListResult->Products->rowProductList; //pobranie produktów dla danych kategorii
}
$config = array( //config dla pobrania informacji o produkcie
'SessionKey' => $this->sesja['SessionKey'],
'Language' => 'pl-PL',
'Currency' => 'PLN',
'PoductId' => 0
);
$produkty = array( //tablica przechowująca konkretne produkty, wraz z informacjami
'Nazwa' =>0,
'Kategoria_Id' =>0,
'Obrazki' =>array(),
'Cena_Netto' =>0,
'Opis' =>0,
'Id' =>0,
'Kod_Produktu' =>0,
);
foreach ($produkty_temp as $klucz => $produkt)
{
foreach($produkt as $prod)
{
if(isset($prod->Id))
{
$config['ProductId'] = $prod->Id;
$prod = $this->client->getProductInfo($config);
$prod = $prod->getProductInfoResult->Products;
if(isset($prod->rowProductInfo))
{
$Prod = $prod->rowProductInfo;
if(isset($Prod->Id) && isset($Prod->Name) && isset($Prod->PriceNett))
{
$produkty[$i]['Nazwa'] = $Prod->Name;
$produkty[$i]['Id'] = $Prod->Id;
$produkty[$i]['Cena_Netto'] = $Prod->PriceNett;
if(isset($Prod->Description) && $Prod->Description != "")
$produkty[$i]['Opis'] = $Prod->Description;
if(isset($Prod->ImgURL->string))
{
if(is_array($Prod->ImgURL->string))
{
$obrazki = array();
foreach($Prod->ImgURL->string as $obrazek)
{
$obrazki[] = $obrazek;
}
$produkty[$i]['Obrazki'] = $obrazki;
}
else
{
$produkty[$i]['Obrazki'] = $Prod->ImgURL->string;
}
}
$i++;
}
$this->client->doNoop($this->sesja);
}
}
{
$config['CategoryId'] = $kat['Id']; //dodanie do config zmiennej id kategorii
$katalog = $this->client->getProductList($config);
$produkty_temp[$kat['Id']] = $katalog->getProductListResult->Products->rowProductList; //pobranie produktów dla danych kategorii
}
$config = array( //config dla pobrania informacji o produkcie
'SessionKey' => $this->sesja['SessionKey'],
'Language' => 'pl-PL',
'Currency' => 'PLN',
'PoductId' => 0
);
$produkty = array( //tablica przechowująca konkretne produkty, wraz z informacjami
'Nazwa' =>0,
'Kategoria_Id' =>0,
'Obrazki' =>array(),
'Cena_Netto' =>0,
'Opis' =>0,
'Id' =>0,
'Kod_Produktu' =>0,
);
foreach ($produkty_temp as $klucz => $produkt)
{
foreach($produkt as $prod)
{
if(isset($prod->Id))
{
$config['ProductId'] = $prod->Id;
$prod = $this->client->getProductInfo($config);
$prod = $prod->getProductInfoResult->Products;
if(isset($prod->rowProductInfo))
{
$Prod = $prod->rowProductInfo;
if(isset($Prod->Id) && isset($Prod->Name) && isset($Prod->PriceNett))
{
$produkty[$i]['Nazwa'] = $Prod->Name;
$produkty[$i]['Id'] = $Prod->Id;
$produkty[$i]['Cena_Netto'] = $Prod->PriceNett;
if(isset($Prod->Description) && $Prod->Description != "")
$produkty[$i]['Opis'] = $Prod->Description;
if(isset($Prod->ImgURL->string))
{
if(is_array($Prod->ImgURL->string))
{
$obrazki = array();
foreach($Prod->ImgURL->string as $obrazek)
{
$obrazki[] = $obrazek;
}
$produkty[$i]['Obrazki'] = $obrazki;
}
else
{
$produkty[$i]['Obrazki'] = $Prod->ImgURL->string;
}
}
$i++;
}
$this->client->doNoop($this->sesja);
}
}
zmienna $kategorie to tablica zawierająca listę kategorii. Jest ich dokładnie 347. Później muszę pobrać każdy produkt dając jako argument funkcji getProductInfo tablicę z konfikuracją w której jest właśnie id kategorii. Więc najpierw tworzę $produkt_temp gdzie kluczem jest id kategorii a wartością lista produktów z tej kategorii. Potem dla każdego indeksu tej tablicy tworzę już zmienną $produkt w której przechowuje konkretne produkty wraz z ich informacjami. Te wszystkie warunki niestety są potrzebne bo zdarza się (nie wiem czemu) że jest tam produkt który nie ma id lub nie ma ceny itp itd. A te zmienne są potrzebne. ImgURL czasami jest tablicą a czasami jest zmienną string. Całość dla około 20 tyś produktów potrafi się robić nawet pare godzin. Można to jakoś zoptymalizować?