Se afișează postările cu eticheta Api. Afișați toate postările
Se afișează postările cu eticheta Api. Afișați toate postările

joi, 20 noiembrie 2008

HI5 API

Cand am primit prima data invitatie pe Hi5 (acum cativa ani) m-am gandit: "Ce-o mai fi si asta?". Ca sa aflu, mi-am facut cont. Am completat cateva informatii, am pus 10 poze si gata. Pe urma am mai intrat in cont doar cand am primit alte invitatii. N-am fost niciodata fan Hi5, dar imi place sa ma uit la pozele prietenilor (pe unii dintre ei asta e singurul mod in care ii mai vad:D). Am pierdut ore bune uitandu-ma la pozele prietenilor si ale prietenilor prietenilor si ale prietenilor prietenilor prietenilor etc...

De aceea Hi5 a fost prima alegere cand am vazut enuntul temei 1: analiza unor comunitati web. Trebuia sa extrag cunostinte referitoare la relatiile sociale din cadrul comunitatii. Prima idee a fost sa parsez efectiv pagina web a profilului unui utilizator (am pornit chiar de la mine). Am folosit cunostintele despre DOM&SAX si am ales sa parsez cu SAX (deoarece nu trebuia sa fac cine stie ce prelucrari de date, ci doar sa le afisez; asadar pe masura ce se declanseaza un eveniment - apare tag-ul corespunzator - se extrage informatia si se afiseaza). Problema a fost insa ca pagina nu era corecta din punct de vedere al sintaxei XML: aparea caracterul & care este strict interzis in XML.

Asa ca am cautat alte metode, stiind ca unele comunitati ofera API-uri pentru extragerea informatiilor. Am descoperit HI5 API care este deocamdata in stadiul de beta - a fost lansat abia in martie anul acesta (lucky me:P). Acest API permite extragerea de informatii prin 2 metode: folosind SOAP (Simple Object Access Protocol) sau folosind REST (REpresentational State Transfer). SOAP este un protocol prin care serviciile web schimba informatii, formatul mesajelor folosind sintaxa XML. REST, asa cum a fost el initial definit, se bazeaza pe o serie de principii dintre care cel mai important este reprezentat de conceptul de resurse: o resursa mentine anumite informatii si este identificata printr-un URI (Universal Resource Identifier) unic.

Eu am folosit REST pentru rezolvarea temei. Practic tot ce am facut consta in urmatoarele: in primul rand am creat un parser de tip SAX, caruia i-am dat sa parseze un URL (Universal Resource Locator - locatia unde se afla resursa dorita). Totodata am mentinut si un vector de URL-uri ale prietenilor deja "vizitati" - pentru a nu ajunge la cicluri (daca un user are un prieten care a mai fost afisat, nu il mai introduc in vector). La rulare am dat de alta exceptie (dupa parsarea mai multor prieteni): unul dintre URL-uri continea caractere non-Unicode. Am tras concluzia ca paginile web sunt facute cam in graba, bazandu-se pe faptul ca browserele sunt suficient de "destepte" incat sa treaca cu vederea aceste mici "scapari".

Revenind la URL-ul ce l-am trimis spre parsare, linia de cod este:

parser.parse("http://api.hi5.com/rest/profile/foaf/id")

Radacina pentru toate resursele este http://api.hi5.com/rest/. De exemplu, pentru a obtine lista de albume a unui utilizator URL-ul este http://api.hi5.com/rest/feed/albumlist/id. Din pacate nu exista resurse pentru extragerea comentariilor.

ID-ul utilizatorului din URL-urile de mai sus se poate afla din adresa paginii sale de profil: http://hi5.com/friend/p8260414--Micky--html sau, daca utilizatorul este logat, http://hi5.com/friend/profile/displaySameProfile.do?userid=8260414. In aceste exemple ID-ul este 8260414.

In concluzie, aceasta tema m-a ajutat sa descopar noi notiuni pe care le pot folosi pentru a dezvolta aplicatii pentru Hi5 - si pentru orice alte site-uri compatibile cu standardul OpenSocial. Acum imi mai trebuie doar idei de aplicatii:P

luni, 17 noiembrie 2008

Cate ceva despre Api Youtube

Cum sa parsam informatia de pe youtube ?

Informatii utile pentru TEMA 1 la Interfete Evoluate !!


Poate v-ati gandit vreodata : oare cum pot sa stiu fara sa ma uit mereu ce comentatori am, cati sunt, cu ce filme au raspuns la filmele mele, pe ce pozitie oi mai fi in statisticile celor de la youtube in functie de numarul celor care imi vad filmele si asa mai departe. Un mod foarte usor ar fi sa scrieti un mic cod in php si el sa faca automat tot ce voua v-ar lua muult timp.

Api-ul de la YOUTUBE ofera posibilitatea de a acesa continutul public foarte usor, intorcand ca rezultat al interogarilor un XML care contine informatia dorita si se poate si parsa destul de usor.

Cei de la IBM au un tutorial foarte bun in acest sens si daca va intereseaza subiectul merita sa aruncati o privire si aici : http://www.ibm.com/developerworks/xml/library/x-youtubeapi/ precum si in documentatia scrisa de cei de la GOOGLE pentru API-ul de la YOUTUBE : http://code.google.com/apis/youtube/2.0/developers_guide_protocol.html

Cum arata o cerere catre api-ul de la YOUTUBE ?

De exemplu pentru a vedea cele mai vazute TOP-ul video-urilor URL-ul va arata asa :

http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed

Scrieti acest URL in browserul vostru si vi se va intoarce o pagina care contine doar aceste video-uri. Daca va uitati si la sursa veti vedea ca este frumos arantaja intr-un XML.

Alte exemple de URL-uri. Cum scrieti daca vrei sa vedeti doar video-urile dintr-o categorie anume ?

Pentru calatorii si pentru tehnologie arata asa :

http://gdata.youtube.com/feeds/api/videos/-/Travel

http://gdata.youtube.com/feeds/api/videos/-/Tech

Cand vreti sa intoarceti feed-ul pentru un filmulet sau rezultatul unui search, Youtube Api va raspunde cu un XML, al carui rootXML va fi ‘<’feed’>’ si fiecare Atom feed va fi incapsulat intr-un tag’ <’entry’>’. Un ‘<’feed’>’ poate avea mai multe elementede genul ‘ <’entry’> ‘ reprezentand cate un film care corespunde criteriului de cautare. Fiecare ‘<’entry’>’ contine al randul sau elemente ‘<’link’>’ unde se gaseste URL link-ul pentru a vedea acel video, raspunsurile la el, precum si alte video-uri care au legatura cu acesta de pe site-ul celor de la Youtube.

Informatiile referitoare la un video se gasesc in interiorul tag-ului ‘<’media’>’. Un element ‘<’media:group’>’ din interiorul fiecarui element ‘<’entry’>’contine informatii detaliate cu privire la : titlul sau, descriere, link-urile catre thumbnails-urile sale, link-uri atre player-ul video.

Acesta contine imagini si poate avea atasate mai multe poze thumbnail si le veti putea identifica dupa tagul ‘<’media : thumbnail’>’. Durata filmului este in tagul <> exprimata in secunde.

Numarul de vizualizari al lui video se gaseste in tag-ul ‘<’yt:statistics’>’ iar tagul « viewCount » da numarul. Pentru a vedea cat de bine este cotat « rating-ul » lui ne vom uitat in ‘<’gt:rating’>’ care este un copil al ‘<’yt :statistics’>’ adica exact stelutele care apar in dreptul video-ului. De ex., un numar intre 2.75 si 3.249 va afisa 3 stelutze pe cand un rating intre 3.25 si 2.749 va afisa 3.5 stelutze.

Video comments feed

Fiecare video entry contine tagul ‘<’gt :comments’>’ care incapsuleaza URL-ul catre care vei trimite cerei API sau vei atasa lista de comentarii pentru un video anume. Un video feed arata cam asa :

feed
  entry
    ...
    media:group
      ...
    /media:group
    gd:comments
      gd:feedLink href='http://gdata.youtube.com/feeds/api/videos/VIDEO_ID/comments'/
    /gd:comments
  /entry
/feed

Unde VIDEO_ID reprezinta numele video-ului pentru care vreti sa gasiti comentariile.

Profilul unui utilizator (User Profile entry )

Informatiile pe care utilizatorul le-a dat despre el se gasesc pe pagina cu profilul sau.

Pentru a face o cerere catre profilul unui utilizator putem scrie urmatorul URL :

http://gdata.youtube.com/feeds/api/users/username?v=2

Daca va intereseaza sa-i vedeti prietenii sau familia(“contatcts”) avem urmatorul URL:

http://gdata.youtube.com/feeds/api/users/username/contacts?v=2

unde username= numele utilizatorului pentru care cautati informatiile

Alte exemple pentru folosirea Api-ului de la Youtube:

  • Cele mai vazute video-uri: http://gdata.youtube.com/feeds/api/standardfeeds/top_rated
  • Cele mai nou adaugate video-uri: http://gdata.youtube.com/feeds/api/standardfeeds/most_recent
  • Video-urile catre care ceilati useri au pus cele mai multe referinte: http://gdata.youtube.com/feeds/api/standardfeeds/most_linked

Cum sa parsezi comentriile text sau sub forma de video-uri la filmuletzul tau ; Cod in PHP

      $media = $entry->children('http://search.yahoo.com/mrss/');
      $obj->title = $media->group->title;
      $obj->description = $media->group->description;

      // get video player URL
      $attrs = $media->group->player->attributes();
      $obj->watchURL = $attrs['url'];

      // get video thumbnail
      $attrs = $media->group->thumbnail[0]->attributes();
      $obj->thumbnailURL = $attrs['url']; 
            
      // get  node for video length
      $yt = $media->children('http://gdata.youtube.com/schemas/2007');
      $attrs = $yt->duration->attributes();
      $obj->length = $attrs['seconds']; 
      
      // get  node for viewer statistics
      $yt = $entry->children('http://gdata.youtube.com/schemas/2007');
      $attrs = $yt->statistics->attributes();
      $obj->viewCount = $attrs['viewCount']; 
      
      // get  node for video ratings
      $gd = $entry->children('http://schemas.google.com/g/2005'); 
        $attrs = $gd->rating->attributes();
        $obj->rating = $attrs['average']; 
      
      // get  node for video comments
      $gd = $entry->children('http://schemas.google.com/g/2005');
        $attrs = $gd->comments->feedLink->attributes();
        $obj->commentsURL = $attrs['href']; 
        $obj->commentsCount = $attrs['countHint'];

      // get feed URL for video responses
      $entry->registerXPathNamespace('feed', 'http://www.w3.org/2005/Atom');
      $nodeset = $entry->xpath("feed:link[@rel='http://gdata.youtube.com/schemas/
      2007#video.responses']");