Samoaktualizujący się panel allegro SUPLEMENCIAK
Wiele osób zalewało mnie mailami z informacją jak uruchomić panel allegro, gdy nie działa memcache … Odpowiedź była zawsze taka sama : nie da się bez przeróbek.
Postanowiłem napisać kilka myśli odnośnie jak taki panel uruchomić bez przetrzymywania danych w pamięci servera …. ponadto masę osób życzy sobie aby taki panel miał miniaturki aukcji są za każdem losowane.
A więc na początek należy pomyśleć gdzie będziemy zapisywali informacje pobrane z allegro … Zdjęcia miniaturek oczywiście pozostawiamy bez zmian, reszta :
-
Baza sql
-
Pliki txt
Wydawać by się mogło że baza sql (mysql lub postgresql) to idealny wybór … na pewno tak jest gdy nasz system będzie wykorzystywany dla więcej niż jednego konta allegro. Jednak już sobie wyobrażam jaki ruch on powoduje ;) do bazy i z powrotem …
Mój wybór padł na pliki txt, nie że to jest stare i sprawdzone, ale wydaje mi się że gdzie można trzeba stosować proste sposoby.
Nasz panel aukcji (wzorowany na poprzednim artykule) trzeba teraz zmodyfikować tak aby nie korzystał z memcache. Pierwsza sprawa – memcache ma własny garbage collection (tak sobie nazwę), przy plikach musimy sami dbać o usuwanie starych aukcji – rozwiązanie jest trywialne : każde pobranie aukcji musi nadpisywać plik.
Do losowego wyświetlania aukcji musimy pobrać wszystkie aukcje. Przerabiamy odpowiednio klasę allegro, a dokładnie funkcję getAuctionsFromAllegro. Po pobraniu aukcji musimy sprawdzić czy ilość aukcji dostępnych poprzez webapi nie jest większa od pobranych. Jeśli jest, ponawiamy pobieranie (poprzez zwiększanie offset'u) a wyniki doklejamy do poprzednich.
Zapisywanie aukcji zmieniamy teraz z memcache na pliki txt np. tak :
private function saveAuctions($aukcje=array())
{
$aukcje = serialize($aukcje);
$file =@ fopen($this->path.'aukcje.txt', "w") OR die('Nie udalo sie zapisac aukcji ! ');
fwrite($file, $aukcje);
fclose($file);
return;
}
Jak widać sposób jest prosty : serializujemy przekazaną tablicę, a następnie zapisujemy ją do pliku aukcje.txt. Odczyt aukcji z pliku powinien być odwrotny : odczyt pliku i unserialize();
Jak rozwiązać problem losowego wyświetlania aukcji ? Wydaje się że wystarczy losowo wyświetlać miniaturkę – z małym ale oczywiście. Załóżmy że wyświetlamy miniaturkę 1 z aukcji A, po kliknięciu w nią system powinien nas przekierować na tę właśnie aukcję. Aby „wiedział” na jaką musi je mieć jakoś powiązane … Odpada na stałe zapis przy każdym generowaniu, chyba że w sesji … Właśnie to wydaje mi się najszybsze i znowu najprostsze. Podczas generowania obrazka, musimy zapisać w sesji id miniaturki na panelu i odpowiadający jej adres url. Proste i szybkie !
Tworzymy sobie do tego jeszcze funkcję, która jest wywoływana przy przekierowaniu nas na allegro.pl. Powinna ona przy pomocy przekazanego id miniaturki odczytać z sesji odpowiedni url – czyżby to było takie proste ? JASNE!
No i chyba to tyle na temat suplementu do własnych miniaturek na aukcji …
Życzę udanych sprzedaży !
ps. piszcie jeśli macie jakieś uwagi → komentarze nie gryzą ;)
ps. dowiedz się także jak stworzyć i sprzedawać dobry serwis www
Wasze opinie :
- 2009-02-13 11:37:18 Klisiu:
- No to może ja będę pierwszy :) Mirvanosie :)
Pomóż proszę i napisz jak przerobić getAuctionsFromAllegro... Jestem laikiem i dopiero na podstawie jakiegoś gotowca się uczę :/ niestety walczę już z tym skryptem 2 tygodnie i ponieważ nie wyrzucał żadnych błędów w ogóle nie wziąłem pod uwagę, że ITL.PL nie ma obsługi memcacha :( przykra NIEspodzianka. Pomijam kwestię, że z CRONEM też mam problemy... ale to inna bajka i na to znajdę sposób. Najlepiej jak wrzuciłbyś taką sama paczkę z gotowym skryptem jak panel na memcachu. Ale póki co to zagłębiam się w php webapi :)
- 2009-02-15 10:24:16 slavik:
- To Klisiu:
tutaj zamieszczam przerobione funkcje z pliku
allegro.inc.php(z tym czytaniem pewnie trochę nieoptymalnie mam, ale to już w zależności od potrzeb, każdy może przerobić):
private function saveAuctions($aukcje=array())
{
$f = fopen('aukcje.txt',"w");
$aukcje=serialize($aukcje);
fwrite($f,$aukcje);
fclose($f);
return;
}
public function printAuctions()
{
$f = fopen('aukcje.txt',"r");
$aukcje=fread($f,20000);
$aukcje=unserialize($aukcje);
if(count($aukcje)\n";
}
}
również w pliku panel_aukcji_mirvanos.php należało by wprowadzić pewne zmiany - zamienić ten kawałek kodu:
$memcache = new Memcache;
$memcache-connect('localhost', 11211) or die ("Could not connect to memcache !");
$aukcje =(array) $memcache-get($op['allegro_login']);
na:
$f = fopen('aukcje.txt',"r");
$aukcje=fread($f,20000);
fclose($f);
$aukcje=unserialize($aukcje);
to chyba wszystko, u mnie działa
To mirvanos:
Wielkie dzięki za ten skrypt.
Pozdrawiam
- 2009-02-15 13:37:34 mirvanos:
- Witam i dziękuję za komentarz ...
Niestety z udostępnieniem takiej paczki jest problem (co prawda posiadam takową działającą) taki iż zauważyłem że za dużo ludzi próbuje już na tym zarobić, a moim zamierzeniem było udostępnienie panelu dla każdego indywidualnie ...
Jeśli powiedzmy udostępnie wersję zaszyfrowaną to nici z nauki dla osób takich np. jak Ty Klisiu ...
Jak znajdę jakieś rozwiązanie tego problemu to napewno zamieszczę gotowe rozwiązanie ... tymczasem proszę próbować - w drobnych problemach na pewno każdy pomoże ;)
pozdrawiam serdecznie
- 2009-02-18 21:45:28 Klisiu:
- Serdecznie dziękuję kolego Slavik! Jeśli chodzi o zapis do pliku to rozpracowałem już go wcześniej :) Mirvanos w artykule napisał jak powinien wyglądać zapis i podmieniłem wszędzie tak jak trzeba :) oczywiście serializując i unserializując dane w $aukcje. Dziękuję bardzo za odpowiedź. Niestety mam 2 inne wielkie problemy. Nie wiem jak zwiększać offset, żeby pobierał mi wszystkie moje aukcje no i przede wszystkim jak przypisać odpowiednie id odpowiednim miniaturkom/skrótom. Niestety oficjalnie mój panel wzorowany na Mirvanowskim nie działa :/ nie wyświetla zdjęć jak i odwołania nie kierują na odpowiedni adres na allegro... Ale jeszcze raz dziękuję za pomoc i dobre chęci :)
- 2009-02-20 09:37:44 mirvanos:
- Witam ponownie. Pozwolę sobie jednak dodać troszkę kodu z mojego panelu. Dokładnie moja wersja pobrania wszystkich aukcji :
$offset = 0;
$lp = 0;
$aukcje = array();
$response = $this->getAuctionsFromAllegroRaw($offset++);
$this->parseAuctions(&$aukcje, &$lp, $response);
if($this->howManyAuctions > $lp)
while($lp < $this->howManyAuctions)
{
$response = $this->getAuctionsFromAllegroRaw($offset++);
$this->parseAuctions(&$aukcje, &$lp, $response);
}
funckja getAuctionsFromAllegroRaw to p oprostu pobranie aukcji i zapisanie w $this->howManyAuctions = $response['user-item-count'];
Natomiast parserAuctions to ten wcześniejszy kod , czyli po prostu foreach na danych ....
No ... myślę że teraz każdy napisze już własny panel allegro ;)
pozdrawiam i życzę powodzenia
- 2009-02-20 23:26:10 lisu:
- a ja za żadne skarby nie mogę zainstalować tego panelu :/ ściągnąłem najpierw paczke tgz potem pozmienialem w config.php wszystkie dane łącznie z ostatnią linijką okładki, potem jeszcze w panel_aukcji_mirvanos.php zmieniłem na :
require_once('/allegro/config.php');
reszte kodu tak jak napisal klisiu i nic :/ nie wyswietlaja mi sie zadne aukcje, a gdy klikne na ktoreś z łączy to wyskakuje błąd T_STRING
- 2009-02-26 14:31:08 tensh:
- Wszystko działa... tylko panele się nie wyświetlają. :( Twój skrypt powinien tworzyć jeden plik jpg z miniaturką, tłem i informacjami o aukcji, prawda? Niestety nic takiego się nie tworzy... mam GD i Imagick... w czym tkwi problem? Nie mogę go zlokalizować. :/
Poza tym skrypt ładnie ściąga miniaturki i generuje linki do aukcji.
Do lisu: Pousuwaj wszystkie / obok nawiasów " i ' i zauważ podobieństwa między funkcjami memcache a tymi obsługującymi plik txt. Druga funkcja slavika nie jest kompletna, coś mu ucięło :)
- 2009-02-28 15:29:01 lisu:
- tensh mozesz dac mi jakiś kontakt do siebie ?
- 2009-03-02 12:25:38 kozunia:
- Wytłumaczy ktoś jak "sołtys krowie na granicy" jak to wszystko po kolei zrobić?
teraz wyrzuca mi taki błąd:
Parse error: syntax error, unexpected T_STRING in /homez.108/twojstyl/www/allegro/panel_aukcji_mirvanos.php on line 10
linia ta wygląda tak:
if(isset($_GET['aukcja']))
Pomoże ktoś?
- 2009-03-03 19:17:32 lisu:
- kurcze ja nie wiem jak wam to działa. Ja jestem na etapie takim ze juz nie pojawiaja sie bledy ,natomiast nie wyswietlaja sie miniatury a po kliknieciu na link ktorejs z aukcji wogole nie przechodzi na strone allegro do danej aukcji
- 2009-03-04 18:23:43 Donq751:
- mi rowniez nie udalo sie uruchomic panelu. Bledow nie mam ale tak jak poprzednikowi - nie pobieraja mi sie miniaturki i linki do aukcji mam takie
...allegro/panel_aukcji_mirvanos.php?aukcja=1
w czym moze tkwic blad?
Bylbym wdzieczny za podpowiedz
Pozdrawiam
- 2009-03-06 15:57:28 piekloniebo:
- Czy komuś z osób nie znających się na programowaniu udało się wdrożyć ten skrypt na swojej aukcji. Autor pisze że to proste ale w rzeczywistości tak chyba nie jest.
Mam pytanie?
Jak przerobić te dwie funkcje żeby zadziałały?
Starałem się kasowac znaki wstawione przez Lavika bo jak wstawiam to:
private function saveAuctions($aukcje=array())
{
$f = fopen(\'aukcje.txt\',\"w\");
$aukcje=serialize($aukcje);
fwrite($f,$aukcje);
fclose($f);
return;
}
public function printAuctions()
{
$f = fopen(\'aukcje.txt\',\"r\");
$aukcje=fread($f,20000);
$aukcje=unserialize($aukcje);
if(count($aukcje)\\n\";
}
}
to od razu mi w dreamweaverze podpowiada że są błędy chyba znaki \\
- 2009-03-06 16:04:48 piekloniebo:
- Kurcze żeby nie być gołosłownym że może nie działać wrzucam tutaj linka do aukcji na której chciałbym umieścić skrypt.
Nie działa mi!
Ja bardzo chętnie Mirvanos zostawię link do twojej strony na moich aukcjach.
To jest bardzo pomocny skrypt ale niestety nie do końca jasno opisany. Dla laika nie do rozgryzienia.
pomóżcie
- 2009-03-06 16:13:02 piekloniebo:
- Witam,
To jest link do aukcji na której umieściłem twój skrypt.
Całość skryptów jest wrzucona na strone www.piekloniebo.pl
gdzie nie ma obsługi memcache wiec starałem się wprowadzić zmiany takie zeby lista aukcji była eksportowana do pliku txt.
To jest link:
http://www.allegro.pl/show_item.php?item=574424570
Co zrobiłem?
Poleciałem według zaleceń Slavika z drugiego komentarza do tego artykułu.
Natomiast już zupełnie nie wiem gdzie wstawić to z twojego komentarza.
$offset = 0;
$lp = 0;
$aukcje = array();
$response = $this-getAuctionsFromAllegroRaw($offset++);
$this-parseAuctions(&$aukcje, &$lp, $response);
if($this-howManyAuctions $lp)
while($lp howManyAuctions)
{
$response = $this-getAuctionsFromAllegroRaw($offset++);
$this-parseAuctions(&$aukcje, &$lp, $response);
}
- 2009-03-06 18:30:06 mirvanos:
- Witam
tak na szybko, bo czas to pieniądz ;)
PiekłoNiebo : z komunikatu jasno wynika że nie masz pliku aukcje.txt ... stwórz takowy(pusty) z prawami zapisu dla daemona www np. chmod 777 jak nie wiesz jakie ....
moje funkcje nie nadają się na sztywno do wklejenia - to tylko fragment - jak pisałem nie dałem całej wersji panelu działającego na plikach ...
pozdrawiam serdecznie
- 2009-03-06 19:18:08 piekloniebo:
- kurcze trochę tam liznałem PHP ale ogólnie nic nie programuje ale przez chwile mi to przeszło przez myśl. Bardzo dziękuję za pomoc. JAk się wszystko uda umieszczam linka do ciebie na pierwszej stronie piekla...
- 2009-03-06 20:54:34 piekloniebo:
- utworzyłem plik aukcje.txt z chmod777
dobra mam jeszcze jedno pytanie jeżeli plik config.php mam w katalogu allegro na swoim serwerze to ścieżka do tego katalogu powinna wyglądać tak:
require_once('config.php');
czy
require_once('http://www.piekloniebo.pl/allegro/config.php');
Kurcze dalej mi to nie działa.
- 2009-03-06 21:02:41 piekloniebo:
- wiem,
że jestem upierdliwy ale jak już zasiadłem i siedzę pół dnia to postaram się skończyć i skumać do końca.
w pliku config.php ścieżki do mojej strony powinny wyglądąć następująco prawda?
(Pliki są w katalogu allegro/ który mieści się w katalogy głównym strony.)
define('ADRES_AUKCJI', 'http://www.piekloniebo.pl/allegro/panel_aukcji_mirvanos.php?aukcja=');
define('ADRES_IMG', 'http://www.piekloniebo.pl/allegro/panel_aukcji_mirvanos.php?img=');
define('OKLADKI', 'http://www.piekloniebo.pl/allegro/okladki/');
Pozdrawiam
Darek
- 2009-03-07 12:56:14 mirvanos:
- Witam
Tak gdzie jest require dajemy sciężkę do pliku na serverze nie poprzez protokół http - bo wtedy server "wykona" ten plik a nie go dołączy ... adres aukcji, img jest ok.
pozdr.
- 2009-05-09 00:19:16 rysioslaw:
- To dziwne ale nie potrafię rozpakować tego pliku .tgz. Używam linuxa więc nie powinienem mieć problemów. Zciągnąłem go już 3 razy. Można dostać inny link do pliku z panelem aukcji?
- 2009-05-09 17:24:14 mirvanos:
- Hmm to dziwne ... tar xf panel_aukcji_mirvanos.tgz - przed chwilkę sprawdzałem ...
- 2009-05-10 14:58:58 rysioslaw:
- Zciągnąłem ponownie i rzeczywiście się rozpakowało. Dziękuję, mam nadzieję się czegoś nauczyć :)
- 2009-05-29 05:18:42 Michal08:
- Witam, jestem laikiem więc z góry proszę o wyrozumiałość;D Po długich próbach uruchomienia tego skryptu wyskakuje mi błąd:
Fatal error: main() [function.require]: Failed opening required 'http://michal08.is-the-boss.com/allegro/config.php' (include_path='.:/data/apache/php/mmp_lib') in /data/members/free/tripod/uk/m/i/c/michal08/htdocs/allegro/panel_aukcji_mirvanos.php on line 3
Dla mnie jest to dużo mało zrozumiałych znaczków, domyślam się że mam źle zapisaną ścieżkę do klasy allegro config.php, i tu pytanie, jak ona powinna wyglądać? Jeżeli jest jakiś inny błąd to również proszę o rady. Pozdrawiam.
PS. Mirvanos.. Jesteś na prawdę dobrym człowiekiem, mało kto pomaga innym bezinteresownie, i za to Ci dzięki;D
- 2009-05-29 08:42:45 mirvanos:
- Witam
W kodzie musimy przekazać położenie pliku allegro.inc.php dla parsera PHP czyli np. jeśli jest on w
/data/members/free/tripod/uk/m/i/c/michal08/allegro.inc.php to tak tam wpisujemy t.z. do require ...
Jeli jest on w tym samym katalogu co plik panel_aukcji_mirvanos.php to ja zawsze daję :
require_once (dirname(__FILE__).'/allegro.inc.php');
pozdrawiam
- 2009-05-29 10:10:45 Michal08:
- Ta operacja pomogła, tyle że teraz coś nie gra w pliku allegro.inc.php w 5linii:
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /data/members/free/tripod/uk/m/i/c/michal08/htdocs/allegro/allegro.inc.php on line 5
Co tu może być nie tak?
- 2009-05-29 10:36:57 mirvanos:
- Skrypt nie uruchamia się w php 5, należy to ustawić na serverze (panel lub za pomocą htaccess)
- 2009-05-29 11:06:33 Michal08:
- Na serwerze z którego korzystam jest PHP4u Version 3.0 Based on PHP-4.4.6, muszę zmieniać coś w ustawieniach na serwerze? Przepraszam, że aż tyle pytań zadaję ale na prawdę się na tym nie znam, i nie bardzo wiem jak się za to zabrać.
- 2009-05-29 11:13:54 mirvanos:
- Tak, najlepiej zapytać o to obsługę ... do php4 trzeba by ten skrypt przerabiać ... a na pewno w takim razie jest memcache ? Proszę wywołać phpinfo() i sprawdzić ...
- 2009-05-31 07:02:25 Michal08:
- Niestety nie potrafię wywołać tej funkcji=/ wiem jak wygląda ale nie potrafię jej uruchomić, nie znam się=( to może inaczej, czy mógłby ktoś polecić jakiś darmowy serwer na którym będzie działać ten skrypt?
- 2009-06-03 05:12:41 Michal08:
- Ponawiam pytanie. Gdzie mogę umieścić te pliki aby skrypt działał poprawnie? Może mi ktoś to wyjaśnić, krok po kroku co mam robić aby uruchomić ten skrypt?
- 2009-06-06 19:17:24 wolfen3:
- SLAVIK zrobiłem w taki sposób w jaki opisałeś z tą zmianą w allegro.inc i panelu.php ale niestety nie wyświetlają się miniaturki a po kliknięciu w tekst nie wyświetla się aukcja.
http://www.gold-studio.pl/allegro/
- 2009-06-13 11:35:17 jac33k:
- wolfen3 możesz napisać co zrobiłeś ?
Widzę że miniaturki ci się generują.
Mam tak samo jak Ty miałeś , nie widać miniaturek i nie generuje odnośników do aukcji.
- 2009-07-27 13:42:25 supernova:
- Witam, mi się wszystko na razie udało. Panel działa, są miniaturki, linkuje poprawnie itp itd. Niestety od paru godzin analizuję kod (w php początkujący jestem) i nigdzie nie mogę dojrzeć gdzie jest zrobione ograniczenie do 6 aukcji? Ja bym chciał 15 :-)
Kombinuję z offsetem z wpisu nr 5, ale nie bardzo mogę dojść gdzie to wkleić.
Jakby jakaś wskazówką to prosiłbym...
- 2009-07-28 10:02:56 mirvanos:
- Jeśli masz pobrane więcej aukcji to wystarczy w html ustawić więcej miniaturek ...
- 2009-08-25 21:25:04 o_rety:
- Swietny skrypt ale niestety - prawie dziala.
Zrobilem na plikach, linkuje ale nie wyswietla generowanych miniatur (z aukcji pobiera obrazki). Pytanie - czy celowo jest gdzies w kodzie umieszczony blad aby nie bylo tak latwo i kolorowo?
- 2009-08-29 07:53:16 rosenzweigova:
- Witam,
drugi dzień nad tym siedzę, z tym i owym sobie poradziłam, ale za chińskiego boga nie mogę sprawić, żeby skrypt zapisywał cokolwiek w okladkach, tzn. tło wyświetla, linkować linkuje, ale miniaturek nie pokazuje zupełnie...
Czy ja mogę prosić o jakąś umiarkowanie zawoalowaną podpowiedź? :)
- 2009-08-29 08:34:04 rosenzweigova:
- Okey dokey, poprzednie pytanie już nieaktualne :).
Ale żeby nie marnować komenta - dałoby radę jakoś rozwinąć temat losowości wyświetlanych aukcji? Tak dla mniej oblatanych w pehapie?
poza tym - GIGANTYCZNE podzięki za ten skrypt!
- 2009-09-04 13:32:03 pafflick:
- private function saveAuctions($aukcje=array())
{
$f = fopen(\'aukcje.txt\',\"w\");
$aukcje=serialize($aukcje);
fwrite($f,$aukcje);
fclose($f);
return;
}
public function printAuctions()
{
$f = fopen(\'aukcje.txt\',\"r\");
$aukcje=fread($f,20000);
$aukcje=unserialize($aukcje);
if(count($aukcje)\\n\";
}
}
Nie wiem czy tylko u mnie, ale mi wywyała błąd składni w pliku, gdy wkleję ten kod. Po usunięciu slashów wszystko jest OK, ale nadal w linijce:
if(count($aukcje)\\n\";
jest Parse error: syntax error, unexpected '"' in /home/pafflick/public_html/test/allegro.inc.php on line 123
Adres do panelu http://pafflick.nstrefa.pl/test/
Z góry dzięki za pomoc...
- 2009-09-04 14:02:52 pafflick:
- Jeszcze dodam, że plik pobierania aukcji znajduje się w powyższej ścieżce, tj. http://www.pafflick.nstrefa.pl/test/pobierz_aukcje.php
Tam właśnie wywala błąd składni, ale nie wiem jak to obejść :(
Informacje o aukcjach pobiera, okładki się tworzą, ale za cholerę nie chcą się wyświetlić na http://pafflick.nstrefa.pl/test/
Instrukcja jest możliwie jak najbardziej zagmatwana, a sytuację pogarsza fakt, że system dodawania komentarzy na tej stronie jest do d**y - przed każdym cudzysłowiem dodaje slashe i wszystkie kody trzeba poprawiać ręcznie.
- 2009-09-04 14:15:50 pafflick:
- OK, już sobie poradziłem. Powyższą linię zmieniłem po prostu na
if(count($aukcje));
i nie ma błędu w składni, za to nie wyświetlają się miniaturki mimo iż w katalogu się tworzą. Naprawdę nie dało się zrobić gotowej paczki skryptu działającego na serwerze bez obsługi Memcahce? Pół dnia człowiek traci na użeranie się z tymi skryptami... :(