Darmowy Panel Aukcji Allegro ?
Panel Aukcji Allegro - Miniaturki Aukcji Trwających - w najprostszej formie jest to lista innych aukcji użytkownika, umieszczona na stronie O mnie i/lub na każdej jego aukcji. Od jakiegoś czasu, coraz rzadziej widuje się panele w takiej prostej formie - zazwyczaj są to teraz duże, nasączone grafiką skrypty php.
Panel aukcji ma na celu zwiększenie sprzedaży - dowiedz się jak zwiększyć sprzedaż na allegroTen artykuł nie ma na celu pokazania krok po kroku jak napisać taki panel aukcji, ale tylko wprowadzić osoby zainteresowane w ten temat. Osoby niecierpliwe, lub nie znające się na programowaniu w PHP zapraszam do testowania darmowej wersji panelu aukcji. Zdaję sobie sprawę że istnieją inne sposoby pobierania danych z allegro (jak to ktoś gdzieś napisał - zżerają mnóstwo transferu i wyglądają jak Gołota po walce), ale ten art opisuje tylko jeden sposoób - moim zdaniem najbardziej elegancki.
Zacząć należy od zapoznania z tą stroną
http://webapi.allegro.pl/uploader.phpi z tą
http://www.allegro.pl/country_pages/1/0/edukacja/narzedzia/help/index.php?page=3oraz pobrania swojego klucza WEBAPI.
Dokumentacja WEBAPI nie zawiera obszernej dokumentacji z licznymi przykładami, ale do prostego panelu nie trzeba wiele :)
1. Pobieranie aukcji Allegro
Komunikacja z serwisem allegro odbywać się będzie poprzez SOAP . PHP należy skompilować z obsługą soap lub użyć klasy nusoap do jej obsługi ... będą jeszcze potrzebne jakieś grafiki i czcionki, ale o tym dalej.
Dla ułatwienia pracy i uporządkowania całego kodu najlepiej zacząć od napisania klasy allegro.inc.php , która będzie odpowiedzialna za komunikację z allegro, oraz pozwoli nam wydzielić całą logikę w innym pliku.
class Allegro {
public function __construct($opcje=array())
{
foreach($opcje as $n->$v) $this->$n=$v;
}
public function login()
{
$this->soap = new SoapClient('http://webapi.allegro.pl/uploader.php?wsdl', array('encoding'=>'UTF-8'));
$this->soap->soap_defencoding = 'UTF-8';
$this->soap->decode_utf8 = false;
$params = array(
'sysvar' => 1, // 1 dla AllegroWebApi
'country-id' => $this->country_code,
'webapi-key' => $this->webapi_key
);
$result = $this->soap->__soapCall('doQuerySysStatus',$params);
$this->local_version = $result['ver-key'];
$msg = array(
'user-login' => $this->login,
'user-password' => $this->haslo,
'country-code' => $this->country_code,
'webapi-key' => $this->webapi_key,
'local-version' => $this->local_version
);
$response = $this->soap->__call('doLogin', $msg);
$this->session_handle_part= $response['session-handle-part'];
$msg= array('country-id'=> $this->country_code, 'user-login'=>$this->login);
$this->user_id= $this->soap->__call('doGetUserID', $msg);
return true;
}
(...)
}
Jak widzimy podajemy do konstruktora tablicę z parametrami ( takimi jak login, hasło, webapi, country-code ) i zapisujemy ją wewnątrz. Pozwoli to na szybką zmianę. Wartość local-version jest inna , gdy w oprogramowaniu webapi jest jakaś zmiana. Na potrzeby tego skryptu uznałem że można ją zawsze pobierać z serwisu - są to proste działania, które raczej się nie zmienią. W normalnym (większym) programie trzeba po zmianie tej wartości sprawdzić czy wszystkie funkcje działają poprawnie ....
Po pobraniu local-version następuje logowanie do systemu allegro, zapisanie wartości session-handle-part (potrzebne później), oraz pobranie identyfikatora użytkownika allegro - czyli userID.
Następną funkcją jest pobranie wszystkich (t.zn. tyle, ile chcemy wyświetlać w panelu np.6 ) aukcji użytkownika, oraz ich zapisanie. No właśnie zapisanie. Tutaj możliwości jest kilka. Zapisujemy z tego powodu iż jak zauważymy później logowanie oraz pobranie aukcji jest czasochłonne, także bez sensu by było aby za każdym razem gdy ktoś wejdzie na naszą aukcję powtarzać tę czynność. Częstotoliwość pobierania należy ustawić indywidualnie , ja przyjąłem 30 minut. Jak napisałem wcześniej możliwości zapisu aukcji jest kilka np. do pliku, do bazy danych czy też do pamięci. Najbardziej spodobała mi się ta ostatnia metoda, wykorzystałem do tego MemCache . Czemu ? Jest szybki, automatycznie kasuje stare aukcje z pamięci i ... bo lubię :)
Fragment kodu odpowiedzialnego za pobranie listy aukcji alllegro :
$msg=array(
'user-id' => $this->user_id,
'webapi-key' => $this->webapi_key,
'country-id' => $this->country_code,
'offset' => $this->offset); // np. 0
$allAuctions= $this->soap->__call('doGetUserItems', $msg);
Teraz poprzez iterację pobieramy po kolei każdą aukcję i ją zapisujemy. Powinniśmy tutaj sprawdzać, czy aukcja nie kończy się przed czasem ('it-time-left') następnego pobierania, u nas 30 minut.
Każda aukcja ma unikalny ID ('it-id'), można wykorzystać go do zapisu obrazków z aukcji - sprawdzamy czy już taki istnieje jeśli nie pobieramy go i zapisujemy w jakimś katalogu :
$obrazek='/allegro/zdjecia/'.$aukcja['it-id'].'.jpg';
if(!file_exists($obrazek))
{
$msg=array(
'session-handle' => $this->session_handle_part,
'item-id' => $aukcja['it-id'],
'get-desc'=>0,
'get-image-url' => 1
);
$res = $this->soap->__call('doShowItemInfo', $msg);
$res = get_object_vars($res['item-img-list'][0]);
$img = $this->getImage($res['image-url']);
$f = fopen($obrazek,"w");
fwrite($f, $img);
fclose($f);
}
}
i funkcja do pobrania obrazka ( PHP musi mieć włączoną obsługę CURL'a ) :
private function getImage($url='')
{
if(empty($url)) return '';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$output = curl_exec($ch);
return $output;
}
na końcu, zapisujemy aukcję :
private function saveAuctions($aukcje=array())
{
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Nie mogę się połączyć z memcache!");
if(!$memcache->set($this->login, $aukcje, false, $this->saveTime)) die("Nie udało się zapisać danych do memcache'a"); // 30 minut
}
Tak przygotowaną i odpowiednio przez nas dopieszczoną klasę Allegro wykorzystujemy w skrypcje poniżej, nazywając go odpowiednio pobierz_aukcje.php i uruchamiając poprzez CRON co np. 30 minut (ustalone wcześniej) :
$op['login'] = 'NASZ_LOGIN';
$op['haslo'] = 'NASZE_HASLO';
$op['country_code'] = '1'; // dla allegro
$op['webapi_key'] = 'NASZ_WEBAPI_KEY';
require_once('./allegro.inc.php');
$all = new Allegro($op);
$all->getAuctionsFromAllegro(6); // ile ma pobrać, np 6
2. Wyświetlanie panelu
Jak działa wyświetlanie panelu aukcji ? Administratorzy allegro, zabronili (wyłączyli) możliwość uruchamiania skryptów JavaScript na stronach "O mnie" i poszczególnych aukcjach. Jak wiadomo powszechnie Polak Potrafi , więc wynaleziono kilka sposobów. Dwa najbardziej popularne to chyba :
- Tag HTML AREA
- Tag HTML A
Działa to na takiej zasadzie, że tworzy się np. tabelkę (może być lista) obrazków ponumerowanych kolejno , które są linkami z parametrem ID takim samym jak ID IMG. SRC obrazka pobierane jest z naszego servera. Linki są kierowane także na nasz server. Może to troszkę źle wytłumaczyłem, (wybaczcie nie jestem nauczycielem) ale zaraz wszystko się wyjaśni.
Np. pierwsza komórka z aukcją w tabelce mogłaby wyglądać tak :
<a title="Zobacz naszą inną aukcję!" href="http://www.naszserver.pl/allegro/panel_aukcji.php?aukcja=1">
<img src="http://www.naszserver.pl/allegro/panel_aukcji.php?img=1" alt="" />
</a>
Wyświetlane są kolejno obrazki pobrane wcześniej, nakładamy na nie tytuł aukcji, cenę i czas do końca. Po kliknięciu na taki link skrypt pobiera adres aukcji (zapisany w czasie iteracji w skrypcie pobierz_aukcje.php ) i przekierowywuje nas na nią. Proste, nie ?
No i to by było na tyle ... udostępniłem darmową wersje skryptu pod tym adresem
Polecam także za kurs za kilka złotych jak pokonać konkurencję (obronić się przed konkurencją) na allegro
Suplement artykułu o darmowym panelu allegro, działający na plikach
Andmin
mirvanos
Tutaj jest przykład : http://www.allegro.pl/my_page.php?uid=7048317
za wdzięczność można zostawić w nim link do mnie - pozdrawiam
dawid_c
Dzięki za odpowiedź
mirvanos
pozdrawiam :)
Kirin
Dziękuję Ci bardzo i życze Ci samych sukcesów i szczęśliwości! Chociaz z takim podejściem do zycia pewnie i tak osiągniesz sukces i szczęscie (jeśli jeszcze nie osiagnąłeś)
Trzymaj się ciepło :)
mirvanos
Problem
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/costam/public_html/costam/allegro/allegro.inc.php on line 5
Jakies sugestie? Testuję skrypt na testwebapi.pl
mirvanos
Kirs_N.T
mirvanos
*/29 * * * * /usr/bin/php /var/www/sciezka/dokatalogu/allegro/pobierz_aukcje.php
Miło mi że skrypt się komuś przydał ;)
pozdrawiam !
all
all
mirvanos
rozpacz
no i .. wyrzuca mi taki bład:
Fatal error: Cannot instantiate non-existent class: memcache in /homez.31/ontimea/www/allegro/panel_aukcji_mirvanos.php on line 5
oco chodzi .. ?
mirvanos
rozpacz
Dodam że, Skrypt został zainstalowany na serwerach ovh.
ramzes392
Jedno jest pewne napewno coś schrzaniłem.
Warning: require_once(/sciezka/do/klasy/allegro/config.php) [function.require-once]: failed to open stream: No such file or directory in /home/ramzesfox/ftp/aukcje/allegro/pobierz_aukcje.php on line 3
Fatal error: require_once() [function.require]: Failed opening required '/sciezka/do/klasy/allegro/config.php' (include_path='.:/usr/local/lib/php') in /home/ramzesfox/ftp/aukcje/allegro/pobierz_aukcje.php on line 3
mirvanos
Odis
Mam serwer na netmarku i mam taki error:
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/npasjane/public_html/allegro/allegro.inc.php on line 5
Pomoże ktoś ? Edytowałem notatnikiem ++ wiec kodowanie jest ok.
Pozdrawiam
mirvanos
ramzes392
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/ramzesfox/ftp/aukcje/allegro/pobierz_aukcje.php on line 3
Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /home/ramzesfox/ftp/aukcje/allegro/pobierz_aukcje.php on line 3
Parse error: syntax error, unexpected '/' in /home/ramzesfox/ftp/aukcje/allegro/pobierz_aukcje.php on line 3
kompinowalem z ta linia, ale jeszcze wiecej bledow wyskakiwalo
Pozdrawiam
demonstar.pl
Fatal error: Class 'Memcache' not found in /home/de/public_html/allegro/user/allegro.inc.php on line 110
co z tym zrobić bo troszkę się pogubiłem
z góry thx
mirvanos
Ramza
Szukałem w necie jakichś skryptów które pomogłyby mi napisać coś w rodzaju snipa. Wiem, wiem, po co pisać, jak są za darmo. Ano, moja potrzeba wygląda następująco:
Jak pewnie się orientujesz w tym momencie na allegro jest akcja charytatywna "kup misia". Jako że z żoną nie mamy specjalnie pomysłu na prezent gwiazdkowy to postanowiliśmy sobie kupić takiego misia za 50 pln i jednocześnie wspomóc dzieci. Wszystko fajnie, tylko jest jeden mankament który niedawno odkryłem.
Misiów jest 12 i codziennie jest wystawiana aukcja z każdym misiem (czyli 12 aukcji) i na każdej jest tych misiów około 30-40 sztuk. Przedwczoraj wieczorem przez 3h odswiezalismy strone czekając az pojawi się aukcja i w koncu po 23 się udało, ale jakież było nasze zdziwienie kiedy okazało się, że zanim zdąrzyliśmy kliknąć te kilka przycisków (kup teraz) aukcja się skonczyła... jak spojrzałem na czasy, to trwała całe 4 sekundy :)
Tak oto zmarnowaliśmy 3 godziny :) Nie jestem fanem zabaw tego typu, więc pomyślałem, że możnaby napisać skrypt, które sam odświeżałby stronkę i sam kupił tego misia. Niestety, nie jestem aż tak biegły w technologiach internetowych by to samemu napisać. Czy to jest do zrobienia? Może chcesz pomóc biednym dzieciom?
Ostatecznie linki do stron które mogą pomóc będą także bardzo przydatne ;-)
Pozdrawiam,
Ramza
maxihalucynka
mirvanos
(cytat z podanej strony) Można więc powiedzieć, że na chwile obecną galeria jest darmowa.
:) własny panel to zawsze własny - można go modyfikować i mieć pewność że nikt go nagle nie wyłączy, dając nam robotę na kilka godzin aby znowu zmieniać kod w każdej aukcji ...
bcrew5
Może mi ktoś pomóc w uruchomieniu tego panelu? Jestem zielony jeśli chodzi o php, widziałem na przykładzie wyżej, że panel jest bardzo fajny. ściągnąłem pliki, wrzuciłem na serwer, wcześniej oczywiście wpisałem własne dane ale aukcje mi się nie wyświetlają:( proszę o pomoc. Strona gdzie bedzie panel : http://bcrew5.webd.pl/aukcje.html
mirvanos
Tak, na szybko to widzę że chyba nie masz wsparcia dla memcache - uruchom phpinfo() i zobacz czy tak jest, ewentualnie skontaktuj się z adminem ...
Ta wersja panelu niestety bez tego nie zadziała ....
pozdrawiam
bcrew5
jjaros
jjaros
"Value of this field is number of package with values. Every package has elements indexed from 0. So if number of elements in packages will be 25, than if user want to get elements inxdexed from 25 to 50, than value of this field should be 1."
jjaros
Value of this field can be one of options:
* 1 - if image is a miniature (image size - 128x96)
* 2 - for a middle size of image (400x300)
* 3 - original image
ale jak to zmienic?
mirvanos
pobiera tylko zerowy element tablicy :
["item-img-list"]=
array(3) {
[0]=
object(stdClass)#32 (2) {
["image-type"]=
int(1)
["image-url"]=
string(60) "http://photos01.allegro.pl/photos/128x96/524/66/68/524666848"
}
[1]=
object(stdClass)#33 (2) {
["image-type"]=
int(2)
["image-url"]=
string(61) "http://photos01.allegro.pl/photos/400x300/524/66/68/524666848"
}
[2]=
object(stdClass)#34 (2) {
["image-type"]=
int(3)
["image-url"]=
string(62) "http://photos01.allegro.pl/photos/oryginal/524/66/68/524666848"
}
wystarczy więc chyba tutaj zmienić na 1 aby było większe zdjęcie, lub 2 aby pobrać oryginał - tak mi się zdaje nie testowałem ...
pozdrawiam
jjaros
Dzięki za odpowiedź. reklamuje wszystkim mirvanos.org
pafcio
mirvanos
W przypadku braku, proponuję zmienić skrypt na korzystanie z plików - baza sql chyba nie jest dobrym wyborem - moje zdanie :).
czyżby czas na wersję drugą artykułu :) ?
ali
Rusalka
Tu nie tylko zielona ale w kolorach teczy kobieta ktora wpadla na pomysl posiadania panelu :-)
Ja mam pytanie...
Pewnie wszyscy ktorzy maja jakiekolwiek pojecie na temat php czy to jest c++ sama nie wiem :-) beda sie smiac..
Zreszta znajomy kiedys powiedzial ze mnie powinni do windowsa zatrudnic bo pomysly jakie mam sa BAAAARDZO TWORCZE i ciezko na takie wpasc a ja nie tlko wpadam ale i realizuje ;-)
No ale do pytania...
Drogi Mirvanos...
Z gory mowie ci WIELKIE DZIEKI za Toja wiedze i pomoc :-)
Ale powiedz mi prosze czy jak skopiuje wszystkie te ciagi znaczkow i Twoj login zamienie na swoj login allegro panel zadziala u mnie :-)
Obecnie mam panel probny ale na dniach wygasnie... a to naprawde fajna sprawa...
A i 2 pytanie
Czy w Twoim panelu wyswietla sie np liczba ofert czas...
Bo ten darmowy ktory posiadam obecnie ma obrazek i cene i przyznam ze jakos obskornie wyglada :-/
mirvanos
Niestety ... to jest tylko próba arta - "krzaczki"nie będą działać tylko po skopiowaniu. Udostępniłem wersję panelu, ale w wersji dla memcache, który to mało serwerów posiada.
Co do liczby ofert to jest możliwość dodania, ale trzeba samemu zmodyfikować skrypt ...
Kirs_N.T
Na szczęście memcache z powodzeniem można obejść polecam funkcje var_export, file_put_contents i include. SQL ? odradzam ? powód prosty ilość jednoczesnych połączeń z bazą bywa ograniczona!!!
Drogi Mirvanos proponuje otworzyć forum..:)
arkangel
szukam i nie mogę znaleść,
potrzebuje skryptu czy webapi,
tak aby wyswietlać linki do moich aukcji na zewnetrzneej stronei WWW, tak jakby po wyszukaniu na allegro ale na mojej stronie i mojej szacie graficznej,
odwdzięczę się :)
pozdrawiam
arkangel
szukam i nie mogę znaleść,
potrzebuje skryptu czy webapi,
tak aby wyswietlać linki do moich aukcji na zewnetrzneej stronei WWW, tak jakby po wyszukaniu na allegro ale na mojej stronie i mojej szacie graficznej,
odwdzięczę się :)
pozdrawiam
mirvanos
To jest zwykły panel, tylko że zamiast grafiki linki tekstowe ...
wacusiek
mirvanos
Obrazek nie jest generowany ... Proszę kliknąć pokaż obrazek ( w FF) - to powinno pokazać jakieś błędy ....
pozdrawiam
hrabjo
Aktualizacja takiej bazy danych to koszmar, skrypt się wywiesza bo mój usługodawca ustawił max. time na wykonywanie skryptu na 60 sec. Zmiana serwera nie wchodzi w grę.
Średnio dziennie kończy mi się około 30-50 aukcji a tyle samo dziennie jest wystawionych. Cena danego produktu zmienia się z "minuty na minutę" i wypadałoby wyświetlać aktualne dane na miniaturkach. A do tego - w przypadku tysięcy aukcji - potrzebna jest przecież aktualizacja bazy danych która na tym silniku odbywa się PRZERAŹLIWIE WOLNO.
Czy jest jakiś sprytny sposób aby przyśpieszyć aktualizacje?
Dodam, że z bazy danych przedmioty których aukcja się zakończyła usuwam za pomocą CRONA co 30 min, aktualizacja 6000 tys aukcji to jakiś koszmar... POMOCY!!!!
mirvanos
Aktualizacja na pewno zmieści się w 60sek. a i na transferze można zaoszczędzić ...
pozdrawiam
tupc
Panel fajny, podziękowania dla autora :)
A w jaki sposób pobrać aukcje po ilości ofert i wyświetlać obrazki losowo w panelu. Chodzi o wprowadzenie zmienności treści panelu aukcji.
mirvanos
Jeśli chodzi o "losowość" to wspomniałem ( i inni komentatorzy) o tym w SUPLEMENCIAKU (następny artykuł).
pozdr.
jumps
mirvanos
http://www.demo.mirvanos.org/panel_allegro/
jumps
Fatal error: Class 'Memcache' not found in /users/edieta/www/artmade.pl/foto/allegro/panel_aukcji_mirvanos.php on line 5
mirvanos
emerge -av net-misc/memcached dev-php5/pecl-memcache
lub przerobić skrypt na inny "storage" np. baza, pliki itp ...
pozdrawiam i życzę sukcesów ;)