czwartek, 22 września 2011

Allegro WebAPI

Allegro stworzyło interfejs programistyczny (API), dzięki któremu możemy zrobić bardzo dużo nie wchodząc na stronę allegro.
Jedyne co potrzeba to klucz webapi, który w wersji podstawowej można otrzymać za darmo. Wystarczy posiadanie konta na allegro i wypełnienie formularza.
Baza wiedzy o webapi jest tutaj: http://allegro.pl/webapi/

Dają oni masę instrukcji do php, natomiast praktycznie nic nie ma na temat javy.
Postaram się chociaż trochę opisać temat jak ugryźć WebAPI z Javą.

Po pierwsze środowisko w którym będziemy programować.
Ja lubię Eclipse, i na tym się skupię, ale pewnie bez problemu można to też wykonać w NetBeans albo czymkolwiek innym.

Sam Eclipse nie wystarczy. Ja używam wersji Eclipse for Java EE i ją polecam.
Zakładam, że macie też zainstalowanego Maven'a.

Tworzymy nowy projekt Maven'a, i wybieramy archetyp quickstart


Wybieramy nazwę grupę i nazwę jaka nam przyjdzie do głowy i klikamy finish.
Otwieramy pom.xml - czyli plik konfiguracyjny maven'a i w sekcji dependencies dopisujemy:


    <dependency>
    <groupId>axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
    <type>jar</type>
    <scope>compile</scope>
    </dependency>


To nam doda obsługę Axis, który jest niezbędny do pracy z protokołem, który obsługuje allegro.
Teraz najważniejsze - musimy utworzyć klasy, które będą odpowiadały za komunikację z allegro.
Robi się to banalnie:
file->new->other
i z sekcji Web services wybieramy: WSDL
wpisujemy nazwę pliku jaką chcemy.
Nie edytujemy tego pliku, zostawiamy wszystko tak jak jest.
klikamy na niego prawym klawiszem i wybieramy:

pojawi się nowe okno, które wypełniamy:
service definition: http://webapi.allegro.pl/uploader.php?wsdl


resztę zostawiamy bez zmian.
klikamy finish, i niech dzieje się magia ;)
Po chwili naszym oczom ukażą się klasy do obsługi allegro api :)
Dodatkowo plugin do wsdl dodaje nam jary z axisem, ale skoro mamy już maven'a, to możemy wszystkie dodatkowe biblioteki usunąć.
To wszystko :) Teraz pozostaje nam tylko spróbować się połączyć i... pisać to co chcemy.

Tworzymy sobie nową klasę. Nazwę ją AllegroTest


import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.holders.LongHolder;
import javax.xml.rpc.holders.StringHolder;
import AllegroWebApi.AllegroWebApiPortType;
import AllegroWebApi.AllegroWebApiService;
import AllegroWebApi.AllegroWebApiServiceLocator;




public class AllegroTest {

public static void main(String[] args) {
// TODO Auto-generated method stub
AllegroWebApiService allegroWebApiService = new AllegroWebApiServiceLocator();
try {
AllegroWebApiPortType allegro = allegroWebApiService.getAllegroWebApiPort();
String userLogin = "login allegro"; //tutaj login allegro
String userPassword = "haslo allegro"; //tutaj hasło allegro
int countryCode = 1; //kod kraju - dostajemy go razem z kluczem webapi 
String webapiKey = "xxx"; //klucz webapi
long localVersion = 333; //klucz wersji 
StringHolder sessionHandlePart = new StringHolder(); //tutaj znajdzie sie id sesji po zalogowaniu
LongHolder userId = new LongHolder(); //tutaj znajdzie sie nasz identyfikator
LongHolder serverTime = new LongHolder(); //czas
allegro.doLogin(userLogin, userPassword, countryCode, webapiKey, localVersion, sessionHandlePart, userId, serverTime);
//jesli nie wyskoczy zaden exception, to znaczy, że logowanie sie udalo...
//to wyświetlmy kilka danych
System.out.println("Id: "+userId.value);
System.out.println("identyfikator sesji: "+sessionHandlePart.value);

} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


I to wszystko.
Cały system jest dość pokręcony. Wynik działania metody jest przekazywany jako parametr, czasem jest baaardzo dużo parametrów, opakowanych w obiekty, które są dalej w coś opakowane, więc czasem można się nieźle zakręcić.
Nie ma po co opisywać wszystkich metod jakie można używać, bo właściwie wszystko działają na podobnej zasadzie co przedstawione tutaj logowanie.
Jeśli zajdzie taka potrzeba, będę kontynuował temat allegro + java.
Dodatkowe informacje - właściwie kompletne znajdziecie na:
http://allegro.pl/webapi/documentation.php



15 komentarzy:

  1. Dziękuje, bardzo pomocny samouczek:)

    OdpowiedzUsuń
  2. Bardzo fajny tutek, oby więcej wpisów o tej tematyce :)

    OdpowiedzUsuń
  3. Bardzo się cieszę, że komuś ten zapomniany trochę przeze mnie temat się spodobał.
    Postaram się w takim razie ponownie przysiąść do tematu Javy i coś tutaj naskrobać :)

    OdpowiedzUsuń
    Odpowiedzi
    1. A moze odswiezyc go w oparciu o Androida?

      Usuń
    2. A moze odswiezyc go w oparciu o Androida?

      Usuń
  4. Hej.

    Dzięki wielkie za te informacje. Ten wpis dużo ułatwia, zwłaszcza osobom początkującym.

    Pozdrowienia :)!

    OdpowiedzUsuń
  5. hello,
    znajdzie się coś więcej w temacie webAPI allegro java ? np. wystawiawianie aukcji, licytacja itp. ? :-)

    OdpowiedzUsuń
  6. Dla "Device definition"=http://webapi.allegro.pl/uploader.php?wsdl
    <- czyli jak w opisie powyżej
    Eclipse zwraca : The service definition selected is invalid.

    Gdzie jest problem (coś się zmieniło) ?

    OdpowiedzUsuń
    Odpowiedzi
    1. Możesz manualnie skopiować plik wsdl z przeglądarki http://webapi.allegro.pl/uploader.php?wsdl albo z SOAP UI i zamieścić go ścieżką do niego na dysku albo w projekcie. Zbugowany eclipse czasem tak działa.

      Usuń
  7. Jak wpisuję w okno Web Service Client http://webapi.allegro.pl/uploader.php?wsdl, jest "The service definition selected is invalid"

    OdpowiedzUsuń
  8. Wielkie dzięki. Pracowałem nad tym godzinam. Przerabiałem różne projekty i naprawde mordęga. Bardzo dużo mi pomogłeś serio.

    OdpowiedzUsuń
  9. czy komuś się udało wyciągnąć listę sprzedawanych przedmiotów, mi zwraca poprawnie 1 parametr jakim jest ilość aukcji, ale w liście aukcji dostaje juz puste wartości

    OdpowiedzUsuń
  10. 36 year-old Nuclear Power Engineer Bar McFall, hailing from MacGregor enjoys watching movies like Demons 2 (Dèmoni 2... l'incubo ritorna) and Web surfing. Took a trip to Ha Long Bay and drives a Ferrari 250 Testa Rossa. sprawdz

    OdpowiedzUsuń