Piszę klasę do automatycznego eksportu/importu ofert z serwisu otomoto.pl.
Praktycznie wszystko działa, ale w wypadku wywołania za pomocą API metody "getDealerInsertions" wyskakuje błąd 500 (Internal Server Error), pomimo tego, że dane są wprowadzone według opisu użycia tej metody na: http://otomoto.pl/webapi/server.php
Gdy wprowadzę nieprawidłowe dane, np. nie wprowadzę klucza API, to poprawnie kod działa i zwraca informację o błędnie wprowadzonych danych. Gdy dane są poprawne, dostaję błąd 500. Za pomocą tej metody pobieram listę ofert, wraz z ich opisem i wyposażeniem (około ~600 ofert).
Kod:
public function getActiveOffer() { 'type' => 'ACTIVE', 'session-id' => (string)$this->OtomotoSessionId, 'webapi-key' => (string)$this->OtomotoApiKey ); return $client->__soapCall('getDealerInsertions', $parameters); }
połączenie jest otwierane podczas wywołania klasy w funkcji __construct() (nie zamieszczam klasy, cała ma ponad 1000 linii kodu)
Co może być przyczyną?
Wszelkie identyczne funkcje, używające tylko inną metodę poprawnie mi działają.
Odkryłem, że jeśli ograniczę liczbę wyników do ~800 to Internal Server Error nie wyskakuje, jeśli ustawieliczbę wyników powyżej, to otrzymuję błąd.
Napisałem na nowo funkcję:
public function getActiveOffer($limit=100) { 'type' => 'ALL_SHORTENED', // ACTIVE, INACTIVE, ALL, ALL_SHORTENED 'session-id' => (string)$this->OtomotoSessionId, 'webapi-key' => (string)$this->OtomotoApiKey, 'offset' => 0, 'limit' => $limit ); $response = $client->__soapCall('getDealerInsertions', $parameters); if ($response['status'] == 'OK') { foreach ($response['insertions-list'] as $offer) { if ((string)$offer->status == 'ACT') { $i++; $return[$i]['AUTOS_ID'] = (string)$offer->{'remote-id'}; $return[$i]['OTOMOTO_ID'] = (string)$offer->{'id'}; $return[$i]['LAST_MODYFICATION'] = (string)$offer->{'modification-datetime'}; $return[$i]['VIEWS_NUM'] = (string)$offer->{'views-num'}; } } } else { return false; } return $return; }
Mam tylko pytanie, co powoduje błąd 500 jeśli limit ustawie powyżej 800 np. dam 900 albo więcej, czy jest to związane z jakimś timeout'em? jak to zmienić?