Closed tomekk2304 closed 6 years ago
Czekam z niecierpliwością aż powyższy kod zostanie dodany do skryptu bo bardzo mi zależny na podaniu ID kategori. Zalezy mi równiez na wynikach wyszukiwania po podaniu tylko samej kategori ID i przedziału cenowego, z pominięciem 'string=szukany+przedmiot'
@rydzyk184 kod możesz sobie dodać do pliku sam. Np. po
if(isset($_GET['description']) && $_GET['description'] == 1) { $filterOptions[] = array('filterId' => 'description', 'filterValueId' => array(true)); }
A listowanie kategorii, bez podania słów kluczowych osiągniesz wykomentowując (czyli dodając // na początku) poniższe linie
} else { die("Parametr \"string\" musi zawierac przynajmniej 2 znaki!");
@rydzyk184 bo mają być wykomentowane obie linie:
//} else {
// die("Parametr \"string\" musi zawierac przynajmniej 2 znaki!");
@tomekk2304 poprawiłem i jest dobrze ale gdy używam szukania w danej kategori z zakresem cenowym a wynikach w kanale RSS pokazuje ze znalazło najnowsze oferty. Promowane: 7/43
a faktycznie pokazuje ok 10-15 ofert
problem nie wystepuje gdy uzywam listingowania uzywajac string=nazwa
bez kategori, wtedy gdy znajdzie nawet 60 ofert to wszystkie 60 jest faktycznie w wynikach
@ tomekk2304 Oj, dopiero zauważyłem to "Issue". W każdym razie wczoraj dodałem opcje filtrowania po id kategorii oraz id użytkownika. Usunąłem też wymaganie podania parametru string i poprawiłem opis kanału, który korzystał z tego parametru. Jak na razie niestety wszystko nadal trzeba ustawiać ręcznie, za pomocą parametrów, ale pracuje już nad graficznym generowaniem linku do kanału.
@rydzyk184 Sprawdź czy z aktualną wersją skryptu działa ok. Jeśli nie, to daj jakiś przykład zapytania w którym występuje błąd, to postaram się sprawdzić w czym rzecz.
@rydzyk184 Okazało się, że otomoto trochę inaczej wyświetla oferty, np. nie zawsze podając sprzedającego, przez co mógł pojawić się błąd, przez który Thunderbird mógł nie przyjmować kanału. Tak samo było z ceną, która po prostu miała inny typ niż aukcje na allegro. W każdym razie poprawione. Pobierz nową wersję skryptu i sprawdź, czy już wszystko ok.
@rydzyk184 co do błędów w validatorze, to czepia się właściwie tylko o tytuł jednej z aukcji, gdzie ktoś dodał znaki "<<" oraz ">>"
@rydzyk184 Dokładnie, konkretnie z tytułem oferty https://allegro.pl/i29430597.html, bo jak trafi na nią, to pozostałe oferty nie są już wczytywane. Za chwile pewnie zniknie ona z listy, więc wtedy będziesz mógł dodać kanał do Thunderbirda, ale to oczywiście nie jest rozwiązanie na dłuższą metę, jeśli jakiś znak rozwala feed. Pomyślę, jak to rozwiązać.
@rydzyk184 Chodziło o dwa znaki: < oraz &, które trzeba było pozamieniać przed wyświetleniem. Wrzuciłem poprawkę i sprawdź, czy teraz zadziała.
@iskuzik czytniki wczytują kanał wiec jest dobrze. zapytam teraz dla własnej wygody; które linie wykomentowac/usunąc żebym nie otrzymywał informacji o dacie zakończenia oferty ? liczbe dni do konca chce zostawic.
jeszcze sytuacja która obserwuje od wczoraj podczas użytkowania skryptu; w czytniku mam ustawione odświeżanie kanałów co 1 min, czasem kanał jest blokowany losowo na 2 min, 5, 10 czasem nawet 25min. Nie sadze abym przekraczał limity WebAPI
tzn nie dostaje komentarza blokada czy informacji o nieprawidłowej formie kanału. Moj czytnik pokazuje mi kiedy kanał faktycznie jest świeży i ze nie pobiera tych samych informacji z przed 15 min. zazwyczaj blokuje sie w przedziale 3-15min całkowicie losowo. nie mowie tu opóźnieniach miedzy serwerami allegro.pl a webapiallegro
@rydzyk184 zakomentuj linie od 217 do 221 (włącznie), czyli:
if (isSet($object->endingTime)) { echo " ("; echo str_replace("T", ", ", $object->endingTime); echo ")"; }
Co do tej blokady, to też mi się to zdarzyło, ale sam nie wiem do końca dlaczego. Jest mała szansa, że problem był przez te znaki. Jeśli jednak dalej będzie występował, to na Twoim miejscu bym trochę zmniejszył częstotliwość odświeżania i sprawdził, czy wtedy będzie ok.
link usuniety ze wzgledów bezpieczenstwa
w tym linku jakis wynik (pewnie znak) rozwala kanał rss i czytnik go nie łyka...
@rydzyk184 problem był z zamknięciem CDATA, który był dodany w złym miejscu. Przez co jeśli oferta nie miała zdjęcia, to nie był on zamykany i pojawiał się problem. Błąd oczywiście poprawiłem, można pobrać nowszą wersję.
problem rozwiązany, testuje jeszcze sytuacje z blokadą odświeżań ale potrzebuje jeszcze trochę czasu aby wyciągnąć wnioski.
@iskuzik Czy istnieje możliwość dodania filtrów które są dostępne dla konkretnych kategorii ? np: kolor, rozmiar, czy inne parametry... (pytam bo użyłeś filtra description=1
którego nie widze w dokumentacji webApi a mimo to filtr działa)
Przydatne było by też dać możliwość wyszukiwania po nazwie któregokolwiek ze szukanych słów string=nazwa1 lub nazwa 2 lub nazwa 3
- dawniej allegro/rss.php realizowało to dodajac linie &search_type=3
@rydzyk184 użyj string=(nazwa1 nazwa2 nazwa3)
i zadziała. Reszta filtrów jest specyficzna dla konkretnych kategorii - i tu bez jakiegoś gui, raczej będzie ciężko, ale niech się developer wypowie ;)
super, a cos w zamian za wykluczane słowa ? dawniej &exclude=słowa w tytule oferty pomijane z wyników wyszukiwania
@rydzyk184 Szukanie któregokolwiek ze słów i konkretnej frazy właściwie już zrobiłem, ale dodam razem właśnie z wyłączeniem podanych słów. Póki co, możesz wyłączyć dane słowo poprzez dodanie go po minusie, np.
mac+mini+-ssd
co wyszuka w tytułach wszystkie oferty, bez "ssd". Tutaj opisane są wszystkie opcje w wyszukiwarce.
Co do filtrów z konkretnych kategorii to oczywiście jest możliwe, ale starałem się to zrobić możliwie jak najogólniej, żeby pasowało do większości ofert. Jest tak jak pisze @tomekk2304 , że trzeba by do tego zrobić jakieś bardziej zaawansowane graficzne wybieranie filtrów, żeby to miało ręce i nogi.
rozumiem, zależy mi właściwie na jednym filtrze. W kategorii nr 252961, filtr: układ bieżny - gąsienice jesli by sie dało dodam sobie fragment kodu do skryptu.
Co do opóźnień w aktualizacjach, testowałem troche w ofertach odziezowych gdzie co minute pojawia sie nowa oferta i na rss pojawiają się z opóźnieniem rzędu 5-15min. można temu zaradzić - przed każdym ponownym czytaniem kanału przez czytnik można modyfikować kolejność filtrów w linku lub zakres cenowy o kilka złotych (ten sposób pomaga ale nie zawsze !) najlepszym wyjsciem pewnie było by przed każda aktualizacja podmieniac w skrypcie klucz webapi. innego pomysłu nie mam
@rydzyk184 możesz dodać, np. przed: /* Offer Options */
coś takiego:
if (isset($_GET['uklad_biezny'])) {
$offerType = $_GET['uklad_biezny'];
if ($offerType == "gasienice") {
$filterOptions[] = array('filterId' => 'Układ bieżny',
'filterValueId' => array('Gąsienice'));
} else if ($offerType == "kola") {
$filterOptions[] = array('filterId' => 'Układ bieżny',
'filterValueId' => array('Koła'));
}
}
A po tym w adresie dodać parametr:
uklad_biezny=gasienice
ale wartość kola
też przyjmuje
@rydzyk184 dodałem też opcje, o których wcześniej wspominałem. Możliwość wyszukiwania któregokolwiek z podanych słów, konkretnie podanej frazy oraz wyłączania ofert, które zawierają podane przez nas słowa.
@iskuzik dodałem powyższy kod przed /* Offer Options */
ale filtr nie działa - zachowuje sie jakby go nie było. Myślałem ze to wina polskich znaków w filtrze ale podmieniałem i nie działa. Byc może ten filtr w webApi sie inaczej nazywa niz na stronie allegro.
Oj, rzeczywiście, pomyliłem się i źle to zrobiłem. Niby sprawdzałem czy działa, ale tylko po miniaturkach na szybko i jak widać - nieskutecznie. ;) Poniżej poprawny kod:
if (isset($_GET['uklad_biezny'])) {
$uklad = $_GET['uklad_biezny'];
if ($uklad == "gasienice") {
$filterOptions[] = array('filterId' => '128831',
'filterValueId' => array(1));
} else if ($uklad == "kola") {
$filterOptions[] = array('filterId' => '128831',
'filterValueId' => array(2));
}
}
@iskuzik oczywiście teraz działa jak należy. Zapytam o ostatnią już rzecz, czy jest szansa wyświetlać opisy oferty w kanale rss ? https://allegro.pl/webapi/documentation.php/show/id,342 parametr wejscia getDesc
i chyba w zwracanych itDescription
, co prawda tutaj już nie jest to doGetItemsList ale moze parametry da sie dołozyc...
Poza tym dziękuje za pomoc i ze rozwinąłeś ten projekt właściwie do końca.
@rydzyk184 Opis oferty jest dostępny w metodzie doShowItemInfoExt
, ale ona już wymaga podania dodatkowo sesji, która z kolei wymaga użycia metody doLogin
, co z kolei wymaga podania loginu i hasła do allegro. To już by chyba zbytnio skomplikowało skrypt.
@iskuzik Jasne, za duzo zachodu wiec niema sensu.
if(isset($_GET['category'])) { $filterOptions[] = array('filterId' => 'category', 'filterValueId' => array($_GET['category'])); }
Umożliwia podanie id kategorii. Na allegro id widoczne jest np. jako ostatni parametr w url:https://allegro.pl/kategoria/klocki-lego-17865