I have written a simple script that downloads an XML with product info from a wholesale parse it and save new products or updates exiting ones. It has been working for a few months, but now it's getting really strange. It updates existing products correctly, but it doesn't add a new ones (no error at all) or it overwrites an existing product with the new ones data. I've been trying to find any clue, to debug I output almost any valuable info, but it just won't work.
This is my script:
<?php
require_once('app/Mage.php'); //Path to Magento
umask(0);
Mage::app();
require_once('Kategorie.php');
$kat = new Kategorie();
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$product = Mage::getModel('catalog/product');
$xml=simplexml_load_file("http://services.azymut.pl/oferta/servlet/?mode=getdb&id=XX&p=XX") or die("Error: Cannot create object ksiazki");
//$xml=simplexml_load_file("testdb.xml");
$ksiazki = array();
$dostepnosc = array();
$ceny = array();
echo count($xml->books->book)." książek pobrano.<br>";
if (count($xml->books->book) > 0)
{
foreach ($xml->books->book as $book)
{
if ($book->attributes()->dzial == "KC")
{
if ($kat->isIndexHistoric((string)$book->attributes()->indeks))
{
array_push($ksiazki, $book);
//pobieranie obrazow
$url = "http://services.azymut.pl/oferta/servlet/?mode=getImg&indeks=".$book->attributes()->indeks."&id=XX&p=XX";
$path = dirname(__FILE__)."/media/books/".$book->attributes()->indeks.".jpeg";
$urlFile = "/media/books/".$book->attributes()->indeks.".jpeg";
try
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$img = curl_exec($curl);
curl_close($curl);
$data = imagecreatefromstring($img);
if (isset($data))
{
imagejpeg($data,$path);
}
}
catch(Exception $e)
{
echo "MagentoError: ".$e->getMessage();
Mage::log($e->getMessage());
}
echo $book->attributes()->indeks.": ".(file_exists($path) ? "Pobrano obrazek.(/media/books/".$book->attributes()->indeks.".jpeg)<br>" : "Brak obrazka w bazie Azymuta.<br>");
}
}
}
$transakcja = $xml->attributes()->transactionId;
echo "Transakcja ".$xml->attributes()->transactionId."<br>";
$xml2 = simplexml_load_file("http://services.azymut.pl/oferta/servlet/?mode=getAvail&id=XX&p=XX") or die("Error: Cannot create object dostepnosc");
foreach ($xml2->book as $book)
{
$index = (string)$book->attributes()->indeks;
$dostepnosc[$index] = intval($book->attributes()->p);
}
echo "Pobrano ".count($dostepnosc)." dostepnosci.<br>";
$xml2 = simplexml_load_file("http://services.azymut.pl/oferta/servlet/?mode=getPrice&id=XX&p=XX") or die("Error: Cannot create object ceny");
foreach ($xml2->book as $book)
{
$index = (string)$book->attributes()->indeks;
$ceny[$index] = $book->attributes()->cena;
$ceny[$index] = 1.30 * $ceny[$index]; //marza 30%
$ceny[$index] = 1.05 * $ceny[$index]; //vat 5%
$ceny[$index] = round($ceny[$index], 1);
}
echo "Pobrano ".count($ceny)." cen.<br>";
for ($i = 0;$i < count($ksiazki);$i++)
{
$index = (string)$ksiazki[$i]->attributes()->indeks;
//debug test
$p = Mage::getModel('catalog/product')->load($product->getIdBySku($index));
echo "Usuniecie ".$p->getIdBySku($index);
try{
$p->delete();
}
catch(Exception $e)
{
echo "Delete failed";
}
$mediaCount = 0;
$date = date('d/m/Y h:i:s');
$aktualizacja = FALSE;
if (isset($dostepnosc[$index]))
{
$isStock = ($dostepnosc[$index] ? 1 : 0);
}
else
{
$isStock = 0;
$dostepnosc[$index] = 0;
}
if (!isset($ceny[$index]))
{
$ceny[$index] = 0;
}
echo "ID:".$product->getIdBySku($index)."<br>";
if($product->getIdBySku($index) != NULL)
{
$product = Mage::getModel('catalog/product')->load($product->getIdBySku($index));
$mediaCount = count($product->getMediaGalleryImages());
$date = date('d/m/Y h:i:s', strtotime($product->getCreatedAt()));
$aktualizacja = TRUE;
echo "Książka już istnieje, następuje nadpisywanie. Liczba obrazków książki to: ".$mediaCount.".<br>";
}
else
{
$product->setSku($index)->setIsbn($ksiazki[$i]->isbn)->setName($ksiazki[$i]->tytul)->save();
$product = Mage::getModel('catalog/product')->load($product->getIdBySku($index));
echo $product->getSku()."<br>";
echo "ID:".$product->getIdBySku($index)."<br>";
}
$path = dirname(__FILE__)."/media/books/".$ksiazki[$i]->attributes()->indeks.".jpeg";
$path2 = dirname(__FILE__)."/media/books/new/".substr($product->getSku(),0,6)."i".".jpg";
$abstract = (strlen($ksiazki[$i]->opis) > 150 ? substr($ksiazki[$i]->opis,0,150)."..." : $ksiazki[$i]->opis);
$oprawa = 232;
if (strpos($ksiazki[$i]->oprawa,'Miękka') !== false)
{
$oprawa = 233;
}
else
{
$oprawa = 232;
}
$redakcja = (string)$ksiazki[$i]->redakcja;
Mage::setIsDeveloperMode(true);
Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));
echo $index."<br>";
echo "Tytuł: ".$ksiazki[$i]->tytul."<br>";
echo "ISBN: ".$ksiazki[$i]->isbn."<br>";
$product
->setStoreId(4)
->setWebsiteIds(array(1))
->setAttributeSetId(21) //ID of a attribute set named 'default'
->setTypeId('simple') //product type
->setCreatedAt(strtotime($date)) //product creation time
->setUpdatedAt(strtotime('now')) //product update time
->setSku($index) //SKU
->setIsbn($ksiazki[$i]->isbn)
->setRok($ksiazki[$i]->rokwyd)
->setOprawa($oprawa)
->setStrony($ksiazki[$i]->objetosc)
->setRedakcja($redakcja)
->setName($ksiazki[$i]->tytul) //product name
->setWeight($ksiazki[$i]->ciezar)
->setStatus(1) //product status (1 - enabled, 2 - disabled)
->setTaxClassId(11) //tax class (0 - none, 1 - default, 2 - taxable, 4 - shipping)
->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) //catalog and search visibility
->setWydawnictwo($ksiazki[$i]->wydawca) //manufacturer id
->setAutor($ksiazki[$i]->autorzy)
->setCountryOfManufacture('PL') //country of manufacture (2-letter country code)
->setPrice($ceny[$index]) //price in form 11.22
->setCost(0) //price in form 11.22
->setMetaTitle($ksiazki[$i]->tytul)
->setMetaDescription($abstract)
->setDescription($ksiazki[$i]->opis)
->setShortDescription($abstract)
->setPageLayout('two_columns_left')
->setStockData(array(
'use_config_manage_stock' => 0, //'Use config settings' checkbox
'manage_stock'=>1, //manage stock
'is_in_stock' => $isStock, //Stock Availability
'qty' => $dostepnosc[$index] //qty
)
);
/*
- pobierz ind2Cats
- zapisz do tab. asoc. tab[indeks] = catId
- stworz tab. asoc. tab[catId] = id kategorii ze strony
- sprawdz catId dla indeks
- pobierz z tab. kategorie ze strony dla catId
- przekaz do jako array do:
->setCategoryIds(array(3, 10)); //assign product to categories
*/
echo "Debug: Path - ".( (file_exists($path)) ? "TRUE" : "FALSE" )." Path2 - ".( (file_exists($path2)) ? "TRUE" : "FALSE" )." Liczba obrazkow - ".$mediaCount." Aktualizacja - ".( ($aktualizacja) ? "TRUE" : "FALSE" )."<br>";
if ( ( file_exists($path) || file_exists($path2) ) && $mediaCount == 0 && !$aktualizacja )
{
$finalPath = ( file_exists($path) ? $path : NULL );
if (!isset($finalPath))
{
$finalPath = ( file_exists($path2) ? $path : NULL );
}
if (isset($finalPath))
{
try
{
Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));
$product->setMediaGallery (array('images'=>array (), 'values'=>array ()));
$product->addImageToMediaGallery(($finalPath), array('image','small_image','thumbnail'), false, false);
echo "Dodano obrazek.<br>";
}
catch(Exception $e)
{
echo "MagentoError: ".$e->getMessage();
Mage::log($e->getMessage());
}
}
}
else if ($mediaCount != 0 && ( file_exists($path) || file_exists($path2) ) )
{
$mediaApi = Mage::getModel("catalog/product_attribute_media_api");
echo $product->getId()."<br>";
$items = $mediaApi->items($product->getId());
if (count($items) > 0) {
foreach($items as $item) {
$mediaApi->remove($product->getId(), $item['file']);
}
echo $product->getId() . " done \n";
} else {
echo $product->getId() . " has no images \n";
}
$finalPath = ( file_exists($path) ? $path : NULL );
if (!isset($finalPath))
{
$finalPath = ( file_exists($path2) ? $path2 : NULL );
}
if (isset($finalPath))
{
try
{
$product->setMediaGallery (array('images'=>array (), 'values'=>array ()));
$product->addImageToMediaGallery(($finalPath), array('image','small_image','thumbnail'), false, false);
echo "Dodano obrazek.<br>";
}
catch(Exception $e)
{
echo "MagentoError: ".$e->getMessage();
Mage::log($e->getMessage());
}
}
}
else if ($aktualizacja && ( file_exists($path) || file_exists($path2) ) && $mediaCount == 0)
{
$finalPath = ( file_exists($path) ? $path : NULL );
if (!isset($finalPath))
{
$finalPath = ( file_exists($path2) ? $path : NULL );
}
if (isset($finalPath))
{
try
{
$product->setMediaGallery (array('images'=>array (), 'values'=>array ()));
$product->addImageToMediaGallery(($finalPath), array('image','small_image','thumbnail'), false, false);
echo "Dodano obrazek.<br>";
}
catch(Exception $e)
{
echo "MagentoError: ".$e->getMessage();
Mage::log($e->getMessage());
}
}
}
if (!$aktualizacja)
{
$katArray = $kat->checkForKat($index);
echo count($katArray)." kategorii do przypisania.<br>";
$product->setCategoryIds($katArray); //assign product to categories
$product->setNewsFromDate($date); //product set as new from
$dateobject = DateTime::createFromFormat('d/m/Y h:i:s', $date);
$dateobject->modify('+1 month');
$product->setNewsToDate($dateobject->format('d/m/Y h:i:s')); //product set as new to
if (count($katArray) > 0)
{
try
{
$product->save();
echo count($katArray)."Kategorii zapisano.<br>";
echo "Zapisano ".$ksiazki[$i]->attributes()->indeks." .<br>";
}
catch (Mage_Core_Exception $e) {
echo $e->getMessage();
}
catch(Exception $e)
{
echo "MagentoError: ".$e->getMessage();
Mage::log($e->getMessage());
}
}
}
else
{
$product->setCategoryIds($product->getCategoryIds());
try
{
$product->save();
echo "Nie nadpisano kategorii.<br>";
echo "Zapisano ".$ksiazki[$i]->attributes()->indeks." .<br>";
}
catch (Mage_Core_Exception $e) {
echo $e->getMessage();
}
catch(Exception $e)
{
echo "MagentoError: ".$e->getMessage();
Mage::log($e->getMessage());
}
}
echo $product->getSku()."<br>";
echo $product->getName()."<br>Koniec produktu.<br>";
}
}
if ($i == count($ksiazki) - 1 || count($xml->books->book) == 0 || count($ksiazki == 0))
{
//file_get_contents("http://services.azymut.pl/oferta/servlet/?mode=confirm&id=XX&p=XX&transactionId=".$transakcja) or die("Error: Cannot create object confirmation");
echo "Koniec transakcji.<br>";
}
?>
Why Am I deleting the products at the beginning? It was just one of my blind shots, I wanted to start fresh, but the result was: none of the 500 products has been saved.
And here is the example of the output:
<code>
500 książek pobrano.
37100801579KS: Pobrano obrazek.(/media/books/37100801579KS.jpeg)
41595401615KS: Brak obrazka w bazie Azymuta.
41976601579KS: Pobrano obrazek.(/media/books/41976601579KS.jpeg)
42172001579KS: Pobrano obrazek.(/media/books/42172001579KS.jpeg)
43471102044KS: Brak obrazka w bazie Azymuta.
47354301615KS: Pobrano obrazek.(/media/books/47354301615KS.jpeg)
47359102056KS: Pobrano obrazek.(/media/books/47359102056KS.jpeg)
47495801965KS: Pobrano obrazek.(/media/books/47495801965KS.jpeg)
48445501615KS: Brak obrazka w bazie Azymuta.
49282501184KS: Brak obrazka w bazie Azymuta.
49596001579KS: Pobrano obrazek.(/media/books/49596001579KS.jpeg)
49686001350KS: Pobrano obrazek.(/media/books/49686001350KS.jpeg)
49974001615KS: Pobrano obrazek.(/media/books/49974001615KS.jpeg)
50090000207KS: Pobrano obrazek.(/media/books/50090000207KS.jpeg)
50256601579KS: Pobrano obrazek.(/media/books/50256601579KS.jpeg)
52775100231KS: Pobrano obrazek.(/media/books/52775100231KS.jpeg)
53308401041KS: Pobrano obrazek.(/media/books/53308401041KS.jpeg)
53650002269KS: Brak obrazka w bazie Azymuta.
54326401144KS: Pobrano obrazek.(/media/books/54326401144KS.jpeg)
55247402249KS: Brak obrazka w bazie Azymuta.
55250302062KS: Brak obrazka w bazie Azymuta.
57158801622KS: Pobrano obrazek.(/media/books/57158801622KS.jpeg)
57575602706KS: Pobrano obrazek.(/media/books/57575602706KS.jpeg)
58264602706KS: Pobrano obrazek.(/media/books/58264602706KS.jpeg)
60139002894KS: Pobrano obrazek.(/media/books/60139002894KS.jpeg)
60143302894KS: Pobrano obrazek.(/media/books/60143302894KS.jpeg)
60159902894KS: Pobrano obrazek.(/media/books/60159902894KS.jpeg)
60160802894KS: Pobrano obrazek.(/media/books/60160802894KS.jpeg)
60161202894KS: Brak obrazka w bazie Azymuta.
61274601830KS: Brak obrazka w bazie Azymuta.
61829501075KS: Brak obrazka w bazie Azymuta.
61977702706KS: Brak obrazka w bazie Azymuta.
62104401430KS: Pobrano obrazek.(/media/books/62104401430KS.jpeg)
63614801262KS: Brak obrazka w bazie Azymuta.
64253303114KS: Brak obrazka w bazie Azymuta.
64894500149KS: Brak obrazka w bazie Azymuta.
65196601622KS: Brak obrazka w bazie Azymuta.
65392002743KS: Brak obrazka w bazie Azymuta.
66167802894KS: Brak obrazka w bazie Azymuta.
66338102894KS: Brak obrazka w bazie Azymuta.
66690002894KS: Brak obrazka w bazie Azymuta.
66988102894KS: Brak obrazka w bazie Azymuta.
67454302494KS: Brak obrazka w bazie Azymuta.
67848500153KS: Pobrano obrazek.(/media/books/67848500153KS.jpeg)
68804402044KS: Pobrano obrazek.(/media/books/68804402044KS.jpeg)
70217100206KS: Brak obrazka w bazie Azymuta.
70217400206KS: Brak obrazka w bazie Azymuta.
70227603326KS: Pobrano obrazek.(/media/books/70227603326KS.jpeg)
70341400124KS: Pobrano obrazek.(/media/books/70341400124KS.jpeg)
70360802389KS: Pobrano obrazek.(/media/books/70360802389KS.jpeg)
70362502608KS: Pobrano obrazek.(/media/books/70362502608KS.jpeg)
70486401049KS: Pobrano obrazek.(/media/books/70486401049KS.jpeg)
70491003053KS: Pobrano obrazek.(/media/books/70491003053KS.jpeg)
70491203053KS: Brak obrazka w bazie Azymuta.
70526003143KS: Pobrano obrazek.(/media/books/70526003143KS.jpeg)
70526701252KS: Brak obrazka w bazie Azymuta.
70530302894KS: Brak obrazka w bazie Azymuta.
70550401646KS: Brak obrazka w bazie Azymuta.
70551601405KS: Brak obrazka w bazie Azymuta.
70557401144KS: Brak obrazka w bazie Azymuta.
70559601648KS: Pobrano obrazek.(/media/books/70559601648KS.jpeg)
70649402608KS: Brak obrazka w bazie Azymuta.
70658902608KS: Brak obrazka w bazie Azymuta.
70662201184KS: Brak obrazka w bazie Azymuta.
70682202798KS: Brak obrazka w bazie Azymuta.
70685101549KS: Brak obrazka w bazie Azymuta.
70689500208KS: Pobrano obrazek.(/media/books/70689500208KS.jpeg)
70693701252KS: Brak obrazka w bazie Azymuta.
70695103053KS: Brak obrazka w bazie Azymuta.
70719900208KS: Pobrano obrazek.(/media/books/70719900208KS.jpeg)
70720100208KS: Brak obrazka w bazie Azymuta.
70720200208KS: Pobrano obrazek.(/media/books/70720200208KS.jpeg)
70720400208KS: Pobrano obrazek.(/media/books/70720400208KS.jpeg)
70740003022KS: Pobrano obrazek.(/media/books/70740003022KS.jpeg)
70744600203KS: Pobrano obrazek.(/media/books/70744600203KS.jpeg)
70753403053KS: Pobrano obrazek.(/media/books/70753403053KS.jpeg)
70755102370KS: Pobrano obrazek.(/media/books/70755102370KS.jpeg)
70755302370KS: Pobrano obrazek.(/media/books/70755302370KS.jpeg)
70761603133KS: Brak obrazka w bazie Azymuta.
Transakcja 11145-1424312459597
Pobrano 107534 dostepnosci.
Pobrano 134930 cen.
Usuniecie 4243ID:
37100801579KS
ID:29376
37100801579KS
Tytuł: MW
ISBN: 839176124X
Debug: Path - TRUE Path2 - TRUE Liczba obrazkow - 0 Aktualizacja - FALSE
Dodano obrazek.
2 kategorii do przypisania.
2Kategorii zapisano.
Zapisano 37100801579KS .
37100801579KS
MW
Koniec produktu.
Usuniecie 4906ID:
41595401615KS
ID:29376
41595401615KS
Tytuł: Historia polityczna świata XX w t1 1901-1945
ISBN: 8323318522
Debug: Path - FALSE Path2 - TRUE Liczba obrazkow - 0 Aktualizacja - FALSE
MagentoError: Image does not exist.7 kategorii do przypisania.
7Kategorii zapisano.
Zapisano 41595401615KS .
41595401615KS
Historia polityczna świata XX w t1 1901-1945
Koniec produktu.
Usuniecie 4974ID:
41976601579KS
ID:29376
41976601579KS
Tytuł: Salon 2. Alfabet szulerów. Część pierwsza A-L
ISBN: 8360297118
Debug: Path - TRUE Path2 - TRUE Liczba obrazkow - 0 Aktualizacja - FALSE
Dodano obrazek.
3 kategorii do przypisania.
3Kategorii zapisano.
Zapisano 41976601579KS .
41976601579KS
Salon 2. Alfabet szulerów. Część pierwsza A-L
Koniec produktu.
Usuniecie 2240ID:
42172001579KS
ID:29376
42172001579KS
Tytuł: Salon 2 Alfabet szulerów
ISBN: 8360297126
Debug: Path - TRUE Path2 - TRUE Liczba obrazkow - 0 Aktualizacja - FALSE
Dodano obrazek.
3 kategorii do przypisania.
3Kategorii zapisano.
Zapisano 42172001579KS .
42172001579KS
Salon 2 Alfabet szulerów
Koniec produktu.
Usuniecie 5376ID:
43471102044KS
ID:29376
43471102044KS
Tytuł: Tajemnica Las Meninas
ISBN: 9788389368737
Debug: Path - FALSE Path2 - TRUE Liczba obrazkow - 0 Aktualizacja - FALSE
MagentoError: Image does not exist.2 kategorii do przypisania.
2Kategorii zapisano.
Zapisano 43471102044KS .
43471102044KS
Tajemnica Las Meninas
Koniec produktu.
Koniec transakcji.
</code>