witam,
udało mi się przerobić po wielu bojach starą metodę pobierania informacji o aukcjach na nową (w końcu zrozumiałem czemu ktoś w internecie napisał że to Allegro API to koszmar programisty), nie otrzymuję już błędów przy pobieraniu informacji, mam jednak problem z paginacją (stronicowaniem), załączam cały kod, być może przyda się komuś do przejścia na nową metodę:
$offset = ($_GET['id']) ; $limit = 12; $soap = new SoapClient('https://webapi.allegro.pl/service.php?wsdl', http://www.php.net/array('trace' => true)); $items = $soap->doGetItemsList( http://www.php.net/array( 'webapiKey' => 'XXXXXXXX', 'countryId' => 1, 'filterOptions' => http://www.php.net/array( http://www.php.net/array( 'filterId' => 'userId', 'filterValueId' => http://www.php.net/array('XXXXXXX') ) ) ) ); $items = get_object_vars($items); $ile_stron = $items['itemsCount'] / $limit; $pag = http://www.php.net/floor($ile_stron); if ($offset >= "1") { $back = ($_GET['id'] - 1); } else { $back = $pag; } if ($offset != $ile_stron) { $next = ($_GET['id'] + 1); } else { $next = "0"; } http://www.php.net/echo "<span style=\"font-size: 16px\"><strong>Strona:</strong></span><br /><div style=\"line-height: 16px;padding-top: 5px\"><a href=\"aukcje?id=".$back."\"><img src=\"images/arrow-left.png\" style=\"padding-right:3px\" /></a> <span style=\"font-size: 16px\"><a href=\"aukcje?id=0\"> 0 </a>"; for($i = 1; $i < $ile_stron; $i++) { http://www.php.net/echo '<a href="aukcje?id='.$i.'"> '.$i.' </a>'; } http://www.php.net/echo " <a href=\"aukcje?id=".$next."\"><img src=\"images/arrow-right.png\" style=\"padding-left:3px\" /></a></span></div><br /><br />"; for($i=0;$i<$limit ;$i++) { http://www.php.net/echo '<div style="margin-right: 10px;margin-bottom: 10px;display: inline-block;">'; http://www.php.net/echo '<a target="_blank" href="http://allegro.pl/show_item.php?item='.$items[$i]['itemsList']['itemId'].'"><img src="'.$items[$i]['itemsList']['photosInfo']['photoUrl'].'"/></a>'; http://www.php.net/echo '<div style="width: 130px;margin-top: 5px;margin-bottom: 8px;line-height: 16px"><span style="line-height:14px;font-size: 11px;font-weight: bold">'.$items[$i]['itemsList']['itemTitle'].'</span><br />'; if ($items[$i]['itemsList']['priceInfo']['priceType'] == "buyNow") { http://www.php.net/echo '<span style="line-height:20px;color: red;font-size: 16px;font-weight: bold">'.$items[$i]['itemsList']['priceInfo']['priceValue'].' zł</span></div>'; } else { http://www.php.net/echo '<span style="line-height:20px;color: red;font-size: 16px;font-weight: bold">'.$items[$i]['itemsList']['priceInfo']['priceValue'].' zł</span></div>'; } http://www.php.net/echo '</div>'; }
Co zwróci
?
http://www.php.net/var_dump($items);
mniej więcej tak to wygląda:
//$items = get_object_vars($items)
for($i=0; $i < $limit; $i++) { http://www.php.net/echo '<div style="margin-right: 10px;margin-bottom: 10px;display: inline-block;">'; http://www.php.net/echo '<a target="_blank" href="http://allegro.pl/show_item.php?item='.$items[$i]->itemsList->itemId.'"><img src="'.$items[$i]->itemsList->photosInfo->photoUrl.'"/></a>'; }
Przyjrzyj się strukturze zwrotnej z serwisu i dopasuj do tego pętlę var_dump Ci jasno pokazuje ją, a PHP także daje wskazówkę, że coś nie tak jest z indeksem. Może po prostu iterujesz nie po tym co trzeba? Jeśli nadal nie kumasz to rozpiszę Ci to nieco według tego co pokazuje var_dump jaki dałeś:
ok, właśnie dochodziłem do tego że trzeba każdy element tej pętli "wylistować" aby otrzymać element docelowy, pomogło rozpisanie sobie struktury całej pętli elementów obiektu do nowej linii, każdą pętlę elementu do nowej itd.,
czyli:
for($i=0; $i < $limit; $i++) { http://www.php.net/echo '<div style="margin-right: 10px;margin-bottom: 10px;display: inline-block;">'; http://www.php.net/echo '<a target="_blank" href="http://allegro.pl/show_item.php?item='.$items->itemsList->item[0]->itemId.'"><img src="'.$items->itemsList->item[0]->photosInfo->item[1]->photoUrl.'"/></a>'; }
To może napisz jak tę pętlę chcesz przeprowadzić? Bo sprawa jest prosta jeśli tylko chwilkę pomyślisz. To wariacja na temat jednej pętli, numeru strony i limitu na stronę. Inna sprawa że użycie floor do wyliczania ilości stron wprowadzi Cię w mały kłopot, skoro mając 14 elementów floor(14/12) = 1?
EDIT: Jeśli limit przedmiotów to 100, to chyba warto też zwrócić uwagę czy dostajemy 100 czy tyle ile wskazuje "itemsCount", bo inaczej z paginacją też będą cyrki bo 501 podzielisz na 12, da Ci to około 40 stron, ale tylko 9 będzie cokolwiek zawierać
zapętlać się zapętla do tych 12 elementów, ale dostaję 12 tych samych, jak miałem zmienne zamiast obiektów w poprzedniej metodzie pobierania aukcji to najnormalniej zwiększałem numer wyświetlanej aukcji poprzez
for($i=0; $i < $limit; $i++)
Chodzi mi o to po czym iterujesz... gdzie jest to $i, które potem łapiesz. Jak wygląda Twoje wnętrze pętli for. Bo to tam siedzi diabeł
starą dobrą metodą prób i błędów sprawdzałem i na początku:
for($i=0; $i < $limit; $i++) { http://www.php.net/echo '<a target="_blank" href="http://allegro.pl/show_item.php?item='.$items[$i]->itemsList->item[0]->itemId.'"><img src="'.$items[$i]->itemsList->item[0]->photosInfo->item[1]->photoUrl.'"/></a>'; }
for($i=0; $i < $limit; $i++) { http://www.php.net/echo '<a target="_blank" href="http://allegro.pl/show_item.php?item='.$items->itemsList->item[0]->itemId[$i].'"><img src="'.$items[$i]->itemsList->item[0]->photosInfo->item[1]->photoUrl[$i].'"/></a>'; }
foreach ($items->itemsList->item as $item) { { http://www.php.net/echo '<a target="_blank" href="http://allegro.pl/show_item.php?item='.$item->itemId.'"><img src="'.$item->photosInfo->item[1]->photoUrl.'"/></a>'; }
W takim wypadku chyba nadal nie widzisz gdzie jest Twoja tablica z obiektami. Chyba zrobię to co poprzednio i Ci to rozpiszę
zrobiłem tak jak się należało od początku, czyli pobranie 12 aukcji (a nie 100), dla każdej strony inną porcję zaczynając tak jak pisałem wcześniej od
$resultOffset = ($offset - 1) * 12;
I o to mi chodziło co rzucił @aniolekx Chciałem byś zauważył, że u Ciebie iteracja idzie po $items->itemsList->item, bo to jest wlaściwa tablica obiektów klasy stdClass Ty wcześniej iterowałeś albo za płytko (po $items), więc rzucało Ci undefined index, albo za głęboko ($items->itemsList->item[0]->itemId), co kończyło się próbą iteracji po liczbie typu int A nie sugerowałem Ci foreach, bo foreach potrafi iterować po publicznych atrybutach obiektu. To by Cię mogło zupełnie w błąd wprowadzić. Dlatego taki nacisk położyłem na zrozumienie przez Ciebie struktury odpowiedzi zwracanej przez serwer. Tak byś sam załapał co jest nie tak.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)