Noutati despre interfete web si interfete evoluate

duminică, 9 noiembrie 2008

API pentru explorarea comunitatii HI5

A trecut si tema 1 la Interfete Evoluate. Titlul ei? Analiza unor comunitati web
.
Cum aveam un cont la HI5 m-am gandit ca e perfect daca as face o explorare pentru a vedea cu cati utilizatori este conectat profilul meu (mergand doua niveluri in jos am descoperit ca "am" aproximativ 6000 de prieteni distincti, destul de multi :) )

Dar pana sa ajung aici a fost destul de interesant.

Trebuie sa va spun ca mie imi place sa programez in JAVA, asa ca pentru tema aceasta m-am gandit ca ar fi excelent daca as utiliza cunostintele de parsere SAX pentru a rezolva tema.
Initial, am zis ca voi face o parsare a listei de prieteni Numai ca nu e chiar asa de simplu: in primul rand trebuie sa fii logat (se poate face din Java, de exemplu folosind clasa HttpClient insa nu e asa placut) apoi, pentru a folosi un parser XML cu o pagina HTML e riscant (paginile HTML nu au intotdeauna tag-urile inchise corect, nu folosesc intotdeauna ghilimele pentru valorile atributelor ...), apoi lista de prieteni este afisata pe mai multe pagini, deci trebuie mai multe parsari. In concluzie, prima solutie parea destul de complicata.

Dupa ce am cautat putin pe net am descoperit ca HI5 expune un api (aflat in stadiu beta!) de explorare a comunitatii. Exact ce aveam nevoie. API-ul era oferit sub forma de servcii web ce puteau fi accesate prin SOAP. Ca urmare am incercat sa ma conectez la serviciul de lookup pentru a afla ID-ul unui utilizator (eu) a carui adresa de email o cunosteam. Conectarea am incercat sa o realizez folosind un client SOAP si anume Axis. Desi pare foarte simplu: creezi un nou client SOAP, creezi un nou apel, setezi parametrii si tipul lor, tipul raspunsului, trimiti cererea si astepti raspunsul formatat XML, nu a fost simplu. Se pare ca nu degeaba e in stadiu beta API-ul. Aparent, WSDL-ul (Web Service Description Language) asociat nu era consistent (asa cum am aflat dupa ce am folosit un utilitar AXIS de generare a unui client folosind WSDL-ul).

A picat si SOAP-ul. Insa pe pagina API-ului HI5 mai era un API, si anume: REST (Representational state transfer). API-ul permite accesarea de resurse peste o retea folosind identificatori. In scurt timp am vazut cat de usor se puteau accesa informatiile care ma interesau (userID si lista de prieteni ai unui utilizator pentru care cunosc id-ul). Asa ca am folosit metoda /profile/lookup pentru a afla id-ul utilizatorului si /profile/foaf/ pentru a afla lista de utilizatori in format FOAF. Era exact ce imi trebuia; primesc raspunsul in XML, totul e foarte clar. Mai departe am inceput sa scriu programul care foloseste un XMLReader pentru a parsa documentele si cateva handlere (cate unul pentru fiecare tip de document). Este destul de usor sa creezi un handler SAX, este nevoie sa extinzi clasa org.xml.sx.helpers.DefaultHandler si sa redefinesti cateva metode: startDocument (apelata la inceputul documentului), startElement (apelata la dechiderea unui nou tag), endElement (apelata la inchiderea unui tag) si characters (apelata la intalnirea de caractere intre un tag de inceput si unul de sfarsit).

Si asa am utilizat SAX si REST scriind un program in JAVA pentru a descoperii ca am 6000 de prieteni indirecti pe HI5. Voi cati prieteni aveti?

Florin.

1 comentarii:

Anonim,  13 noiembrie 2008 la 17:38  

Un blog foarte dragut si interesant. Poate il pastrati si il actualizati si dupa ce se termina semestrul :) .

Arhivă blog