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 allegro

Ten 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.php

i z tą

http://www.allegro.pl/country_pages/1/0/edukacja/narzedzia/help/index.php?page=3

oraz 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

Wasze opinie :

    • 2008-10-13 14:57:45 Andmin:
    • Nooo co prawda jeszcze nie odpalilem ale jestem pod wrazeniem. Bede na prawde wdzieczny jak ruszy
    • 2008-10-13 16:00:33 mirvanos:
    • Musi zadziałać :)
      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
    • 2008-10-19 20:38:07 dawid_c:
    • Mam taki pomysł, żeby sprzedawać taki skrypt, ale mam pytanie: Czy dla każdego klienta musiałbym wtedy zamawiać ten klucz WEBAPI czy wystarczy, ze sobie kupie. Sorki, że tak jak lamer piszę, ale nie wiem jak to dokładnie działa :)
      Dzięki za odpowiedź
    • 2008-10-20 13:07:58 mirvanos:
    • Wystarczy dynamicznie podmieniać id usera allegro w metodzie : getAuctionsFromAllegro klasy allegro.inc.php ...
      pozdrawiam :)
    • 2008-10-30 12:36:56 Kirin:
    • Jesteś cudownym człowiekiem: tylko ludzie naprawde dobrzy oferują coś zupełnie za darmo.

      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 :)
    • 2008-10-30 21:59:29 mirvanos:
    • Oj jak miło ;) pozdrawiam
    • 2008-11-03 08:46:55 Problem:
    • Mam pewien 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
    • 2008-11-04 19:04:29 mirvanos:
    • Proszę zawsze pamiętać o kodowaniu znaków ... skrypty piszę w utf\'ie (unikod) więc należy używać takiego samego np. nie windosowy notatnik itd. Nie sprawdzałem na testwebapi ale nie powinno to mieć żadnej różnicy (oprócz konfiguracji). Proszę pisać w razie innych problemów
    • 2008-11-05 22:57:58 Kirs_N.T:
    • Skrypt świetny, trochę go przerobiłem do własnych potrzeb. Dodałem liczbę ofert i opcje ceny dla aukcji z licytacją. Mam tylko problem jak skonfigurować CRON. Można jakiś przykład prosić?
    • 2008-11-06 10:15:23 mirvanos:
    • U mnie w crontabie to wygląda tak :

      */29 * * * * /usr/bin/php /var/www/sciezka/dokatalogu/allegro/pobierz_aukcje.php

      Miło mi że skrypt się komuś przydał ;)
      pozdrawiam !
    • 2008-11-12 14:38:47 all:
    • Czy żeby to chodziło trzeba dostać od allegro webapi key,czy wystarczy uid?
    • 2008-11-12 14:46:55 all:
    • Już doczytałem ,ze webapi ,ten darmowy wystarczy?
    • 2008-11-12 16:03:38 mirvanos:
    • Dokładnie, darmowy wystarczy
    • 2008-11-13 18:47:11 rozpacz:
    • Wszystko zostalo zainstalowane według wskazówek.
      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 .. ?
    • 2008-11-13 20:24:49 mirvanos:
    • Brak wsparcia dla memcache ... przed zabawą polecam wywołanie phpinfo() i sprawdzenie czy jest memcache.
    • 2008-11-14 01:51:07 rozpacz:
    • a więc jeżeli tej funkcji niema, to mażna ją podinstalować.
      Dodam że, Skrypt został zainstalowany na serwerach ovh.
    • 2008-11-18 17:11:35 ramzes392:
    • O co chodzi tych błędach:
      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
    • 2008-11-18 20:44:33 mirvanos:
    • require_once(/sciezka/do/klasy/allegro/config.php) trzeba zamienić na prawdziwą ścieżkę do pliku, czyli w tym przypadku : require_once(\'/home/ramzesfox/ftp/aukcje/allegro/config.php\'); pozdrawiam ;)
    • 2008-11-19 22:51:00 Odis:
    • Witam

      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
    • 2008-11-20 10:44:51 mirvanos:
    • Jeśli kodowanie na pewno ok to proszę może wymusić działanie php5 , np. w .htaccess : AddHandler application/x-httpd-php5 .php
    • 2008-11-20 12:18:20 ramzes392:
    • zamienilem sciezke a teraz wyskakuje taki blad:

      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
    • 2008-12-07 19:58:18 demonstar.pl:
    • mi wyskoczyło coś takiego :

      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
    • 2008-12-07 20:03:42 mirvanos:
    • Jak pisałem ... niezbędny jest memcache - bez niego ani rusz w tej wersji panelu - aby sprawdzić jego dostępność należy wpisać w jakimś pliku php takie coś : <?php phpinfo();?> i sprawdzić w wynikach czy on występuje ...
    • 2008-12-12 09:55:28 Ramza:
    • Cześć,
      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
    • 2009-01-06 16:19:00 maxihalucynka:
    • Można też zamiast bawić się SOAPem i PHPem skorzystać z darmowego panelu na stronie www.pewex.net
    • 2009-01-06 16:48:04 mirvanos:
    • jasne, ale :

      (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 ...

Skomentuj artykul


AntiBot