Flickr, fiind cel mai mare site de administrare și partajare a fotografiilor din lume, are un API impresionant pentru a permite dezvoltatorilor să acceseze și să manipuleze aproape toate datele sale. Să aruncăm o privire asupra modului de lucru cu API: la cel mai scăzut nivel posibil.
În această epocă Web 2.0, aplicațiile web care au un API ușor de utilizat și intuitiv au un avantaj distinctiv, deoarece permit dezvoltatorilor să exploateze și să construiască pentru platformă și astfel să capteze mai mulți utilizatori. Pe măsură ce ne mutăm spre web-ul social și mashup-uri, un API bun nu mai este un plus frumos: este absolut necesar. Și amintiți-vă că prea multă abstracție nu este niciodată un lucru bun. Deși există un număr de kituri API acolo pentru a simplifica lucrul cu API-ul în cauză, nu ar fi bine să știm ce se întâmplă de fapt sub capota? Nu ar fi interesant să deconstruim voodoo-ul real care se întâmplă între kit și API? Da, m-am gândit așa! În această nouă serie, vom examina API-urile unor dintre cele mai populare servicii de acolo. Astăzi, ne uităm la API-ul Flickr.
Tangoul dintre dezvoltator și API începe și culminează într-o serie de etape bine definite. Voi explica fiecare pas în timp ce mergem.
În primul rând, trebuie să decidem cu privire la tipul de aplicație pe care o vom construi. Aplicații desktop avea pentru a utiliza modelul de desktop în timp ce o aplicație web poate utiliza oricare dintre modele. Modelul mobil depășește domeniul de aplicare al acestui articol.
Pentru acest articol am ales să merg cu modelul desktop deoarece modelul web necesită efectuarea tuturor testelor pe domeniul pe care va fi implementată aplicația. Acest lucru nu ar fi neapărat fezabil pentru o mulțime de oameni. Alegem modelul de desktop deoarece acesta este lipsit de această restricție.
Următorul pas este obținerea unei chei de aplicație. Flickr folosește această cheie de aplicație pentru a păstra filele privind utilizarea noastră și alte statistici. Continuați aici și aplicați pentru propria cheie API.
Deoarece utilizarea noastră a acestei chei API este pur educativă, alegem să obținem o cheie necomercială.
Completați toate detaliile pe care le cere formularul, acordând o atenție deosebită descrierii proiectului. Descărcătorii de pe Flickr citesc de fapt această descriere dacă aplicația dvs. este înșelătoare într-un fel pentru a vă asigura că este legitimă. Așa că petreceți acel minut suplimentar care vă descrie capodopera.
O înregistrare reușită vă oferă această pagină. Notați apăsând tasta api și secretul comun pentru o utilizare ulterioară.
API-ul Flickr oferă o serie de metode care pot sau nu necesită autentificare. Fiecare metodă ia o serie de argumente care îi modifică comportamentul și sarcina utilă. Răspunsurile pot fi primite într-un număr de formate, inclusiv JSON, XML, SOAP și REST. Toate aceste cereri pot fi făcute pentru a termina punctele corespunzătoare formatului pe care l-ați ales pentru a efectua solicitarea. De exemplu, vom folosi REST pentru restul acestui articol și astfel punctul nostru de final URL ar fi http: // api .flickr.com / servicii / odihnă /.
Există o serie de metode care trag datele publice și, prin urmare, nu necesită autentificare de niciun fel. Avem nevoie doar de cheia API pe care am obținut-o mai devreme, împreună cu argumentele necesare ale metodei în cauză. Să aruncăm o privire la un exemplu.
Metoda getPublicGroups este un exemplu de metodă care nu necesită autentificare și care atrage date publice. Transmitem ID-ul de utilizator al utilizatorului și cheia API, iar API răspunde în formatul pe care l-ați solicitat cu o listă de grupuri din care face parte utilizatorul.
Vom trimite o solicitare la adresa URL.
http://api.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=your_api_key&user_id=user_id_x
A inlocui your_api_key cu cheia pe care am obținut-o mai devreme și user_id_x cu un valid NSID. Deoarece îmi plac răspunsurile mele de a fi în JSON, pot adăuga un alt parametru prin care API să răspundă cu un volum util JSON.
http://api.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=your_api_key&user_id=user_id_x&format=json
API-ul va trimite un răspuns ca acesta:
jsonFlickrApi ("fotografii": "pagina": 1, "pagini": 1, "perpage": 100, "total": "2", "foto" ":", "Isfriend": 0, "ispublic": "40318902 @ N02", "secret": "df6dfee053", " "isfamily": 0, "id": "3729689790", "proprietar": "40318902 @ N02", "secret": "ea9c38a675" ":" scară "," ispublic ": 1," isfriend ": 0," isfamily ": 0,," stat "
Formatat corect, va arăta astfel.
jsonFlickrApi ("fotografii": "pagină": 1, "pagini": 1, "perpage": 100, "total": "2", "photo": "3729689790" ":", "Isfriend": 0, "isfriend": "0", " "isfamily": 0, "id": "3729689845", "proprietar": "40318902 @ N02", "secret": "df6dfee053" ":" scară "," ispublic ": 1," isfriend ": 0," isfamily ": 0
Acesta este probabil motivul pentru care doriți să învățați cum să lucrați cu API-ul Flickr și astfel vom trece peste fiecare pas încet, deoarece această parte are tendința de a confunda oamenii.
Pentru a obține date private, fiecare metodă are nevoie de autentificare și de autentificare pentru a funcționa fiecare dintre apelurile noastre trebuie să fie semnat. Semnarea funcționează astfel:
Efectuați o listă de argumente sortată în ordine alfabetică
De exemplu, în exemplul anterior, lista noastră ar arăta astfel:
Creați șirul de semnătură
Șirul de semnătură este creat prin preluarea funcției Secretul API am obținut mai devreme și apoi am adăugat lista argumentelor. De exemplu, șirul de semnături ar arăta astfel:
0123456789api_keyxxxformatjsonuseridyyy
Semnarea apelului nostru
Ultimul pas este semnarea reală. Flickr ne așteaptă să luăm hash-ul MD5 al șirului de semnături și să îl adăugăm la apelul metodei inițiale ca parametru numit.
Deci, orice apel autentificat are acest format general
http://api.flickr.com/services/rest/?method=ourmethod&api_key=apikey&api_sig=hashedvalue
Acum, odată cu semnarea, putem trece acum la autentificarea reală. Flickr folosește un sistem similar cu cel al OAuth pentru autorizare, ceea ce înseamnă că un utilizator care dorește să utilizeze aplicația noastră nu are nevoie să divulge acreditările utilizatorului. Utilizatorii sunt transportați pe site-ul Web Flickr, unde utilizatorul este întrebat dacă dorește să permită aplicației noastre să acceseze datele utilizatorului.
Aici se află a FROB vine în. Pentru a crea link-ul de conectare care duce utilizatorul la o pagină de autorizare pe Flickr, avem nevoie de o modalitate de a identifica o sesiune de autentificare specifică.
Pentru a obține un frob pentru a identifica sesiunea, trebuie să sunăm flickr.auth.getFrob trecând cheia api ca argument argumentat. URL-ul nostru ar arata astfel:
http://api.flickr.com/services/rest/?method=flickr.auth.getFrob&api_key=apikey&api_sig=hashedvalue
Un răspuns JSON arată astfel:
frobcallback ("frob": "_content": "xxx", "stat": "ok"
După ce am obținut cu succes un frob, putem lucra acum la crearea adresei URL care permite utilizatorului să autorizeze aplicația noastră. Adresa URL de conectare are acest format general:
http://flickr.com/services/auth/?api_key=apikey&api_sig=apisig&perms=perms&frob=frob
Înlocuiți valoarea api_key cu cea pe care am obținut-o mai devreme, valoarea lui api_sig cu un șir de semnătură MD5 al șirului de semnătură și valoarea lui frob cu valoarea frob returnată de API. permanentul parametrul definește nivelul dorit de acces la cont și are valori valide de citiți, scrieți și ștergeți. Fiecare acces include drepturile tuturor predecesorilor săi.
O adresă validă de conectare ia acest formular:
http://flickr.com/services/auth/?api_key=63b08e2efcc22de9900163f4d761fdbc&api_sig=663369798c695dbe2fd7e2af7576dd2b&perms=delete&frob=72157621742082858-8e995a1104e28114-870912
Paginile de autorizare arată astfel:
Odată ce utilizatorul a dat autorizația pentru cererea noastră, putem continua. Ultimul pas în acest proces este obținerea unui auth_token. Un jeton de autentificare leagă o cheie API specifică unui ID utilizator specific, adică un jeton auth poate fi folosit pentru a manipula numai datele unui anumit utilizator în timp ce utilizează o cheie API specifică. Un jeton auth este necesar pentru fiecare apel API metodă care necesită autentificare.
Obținerea unui jeton auth este la fel de simplă ca și apelarea flickr.auth.getToken metoda care trece în cheia api, semnătura frob și api ca parametri numiți. URL-ul ar arata astfel:
http://flickr.com/services/auth/?api_key=apikey&api_sig=apisig&frob=frob
O solicitare de succes ne oferă un jeton auth, care poate fi folosit pe o perioadă nelimitată pentru a accesa datele unui anumit utilizator folosind o cheie api specifică.
Acum, că toate premisele au fost îndeplinite, putem să recuperăm datele după cum este necesar. Rețineți că fiecare dintre apelurile dvs. autentificate trebuie să fie semnat și deci fiecare apel trebuie să trimită în api_key, auth_token și api_sig pentru apelul la metoda de a lucra.
La minimul de bază, adresa URL pentru cererea dvs. REST trebuie să arate așa. Alți parametri sau parametri specifici metodelor care modifică sarcina utilă pot fi adăugați după cum este necesar.
http://flickr.com/services/auth/?api_key=xxx&api_sig=yyy&auth_token=zzz&method=method_name
În timp ce semnați, asigurați-vă că includeți și alte argumente și valorile acestora. Aceasta este o cauză frecventă de eroare și durere de cap și este ușor de rectificat. Includeți un parametru de returnare a apelului în URL pentru a evita restricționarea domeniului încrucișat în browsere în timp ce utilizați AJAX? Aceștia trebuie să meargă și în șirul de semnături!
Să aruncăm o privire la un exemplu de răspuns pentru o metodă care returnează fotografii publice.
jsonFlickrApi ("fotografii": "pagină": 1, "pagini": 1, "perpage": 100, "total": "2", "photo": "3729689790" ":", "Isfriend": 0, "isfriend": "0", " "isfamily": 0, "id": "3729689845", "proprietar": "40318902 @ N02", "secret": "df6dfee053" ":" scară "," ispublic ": 1," isfriend ": 0," isfamily ": 0
Totul e bine și dandos, dar răspunsul nu conține o adresă URL la care am putea să ne conectăm. În schimb, trebuie să construim o adresă URL pentru imaginea în cauză pe baza datelor trimise înapoi de la server. Iata cum:
Adresa URL a imaginii pe Flickr urmează un model bine definit. Deblocați acest lucru și răspunsul începe să devină mult mai sensibil. Aici este adresa URL a unei imagini în contul meu.
http://farm3.static.flickr.com/2531/3729689790_ea9c38a675_b.jpg
Adresa URL este alcătuită dintr-un număr de părți:
Pe scurt, pentru a construi sursa imaginii, legătura ar arăta ca cea prezentată mai jos dacă am fi făcut să analizăm răspunsul JSON în cazul în care datele sunt variabilele care dețin răspunsul:
"http: // farm" + date.photos.photo [i] .farm + ".static.flickr.com /" + date.photos.photo [i] .server + "/" + date.photos.photo [ i] .id + "_" + date.photos.photo [i] .secret + ".jpg
Acum, că am analizat modul în care puteți prelua datele de pe Flickr utilizând API-ul său, este timpul să examinați cum să trimiteți date înapoi.
Aplicația de încărcare Flickr se deosebește de API-urile sale bazate pe REST sau SOAP, în sensul că nu există puncte de sfârșit de URL pe care să le puteți accesa și să le recuperați. În schimb, datele trebuie trimise prin intermediul unei solicitări POST către
http://api.flickr.com/services/upload/
Deoarece este în afara domeniului de aplicare al acestui articol pentru a vă arăta cum să construiți o interogare POST de la zero, vom folosi un element de formular cu o valoare enctype a multipart / form-data pentru a genera tot codul pentru noi. Folosind acest atribut, putem spune că formularul conține date binare și trebuie tratat ca atare. Un exemplu de formă ar arăta astfel.
Dar rețineți că trebuie încă să trimitem un număr de parametri serviciului, inclusiv cheia api, jetonul auth și semnătura metodei. Cum facem asta? Este doar o chestiune de a crea un câmp text ascuns și de a modifica valoarea acestora pentru a reflecta valorile corecte. Ca astfel:
Rețineți că, în timp ce generați hash-ul MD5 al șirului de semnătură, trebuie să încărcați fiecare element al formularului care exclude câmpul de fotografie. Aceasta include valoarea butoanelor de trimitere, deoarece conținutul întregului formular este afișat pe adresa URL. Pentru exemplul de mai sus, hash-ul ar trebui să fie calculat astfel:
var hash = MD5 (secret + "api_key" + apikey + "auth_token" + token + "submitUpload");
Nu vă limitați complet la aceste argumente. API-ul de încărcare are un număr de argumente, inclusiv titlul fotografiei, titlul și descrierea acesteia. Dacă doriți, puteți la fel de ușor să lăsați utilizatorul să introducă toate aceste date împreună cu setările de confidențialitate cum ar fi:
Un articol despre cum să lucrați cu API-ul unui serviciu ar fi în mod clar incomplet, fără să aruncăm o privire asupra unora dintre cele mai utilizate metode API. Având în vedere acest lucru, iată câteva metode API care ar trebui să fie foarte utile, indiferent dacă creați un mashup sau căutați doar să vă recuperați propriile date.
Rețineți că apelurile autentificate necesită valori valide pentru ca parametrii api_key, api_sig și auth_token să funcționeze în timp ce apelurile normale pot sau nu pot necesita parametri specifici metodei. Toate apelurile necesită trimiterea parametrului api_key. Deci, dacă menționez că apelul necesită autentificare, faptul că apelul solicită celelalte argumente este implicit implicit. Argumentele menționate mai jos sunt opționale, cu excepția cazului în care se menționează altfel Metodele care returnează o listă de date iau, de asemenea, un argument pe pagină și per_page pentru a defini numele lor.
Am inclus răspunsurile fiecărei metode pentru a vă oferi o idee despre datele trimise înapoi. M-am dus cu JSON ca format de răspuns, deoarece majoritatea devs lucrez cu JSON mai bine decât XML.
flickr.activity.userPhotos
Returnează o listă a activității recente pe fotografiile aparținând utilizatorului apelant.
Argumente: interval de timp - Definește intervalul de timp în care să căutați actualizări.
Autentificare: Da
Raspuns
"elemente": "element": "" tip ":" fotografie "," id ":" 3728895285 "; "0", "notesold": 0, "df6dfee053", "server": "3466", "ferma": 4, "note": 0, "vizualizări": 0, "faves": 0, "more": 0, "activity": 40298554- 3728895285-72157621628251433 "," utilizator ":" 40318902 @ N02 "," nume utilizator ":" lordtottuu "," dateadded ":" 1248131143 "," _content " ], "pagină": 1, "pagini": 1, "perpage": 10, "total": 1, "stat": "ok"
flickr.contacts.getList
Returnează o listă de contacte pentru utilizatorul apelant.
Argumente: filter - Argument pentru filtrarea listei. Valorile valide includ prieteni, familie, ambii și nici unul.
Autentificare: Da
Raspuns
"contacte": "pagina": 1, "pagini": 1, "per_page": 1000, "perpage": 1000, "total": 2, "contact" "," nume de utilizator ":" thegleek "," iconserver ":" 179 "," iconfarm ": 1," ignorat " : "0", "path_alias": null, "location": ""] // Restul contactelor, "stat"
flickr.favorites.getList
Returnează o listă de fotografii marcate preferate de un anumit utilizator.
Argumente: min_fave_date, max_fav_date - Auto-explicativ.
Autentificare: Da
Raspuns
"fotografii": "pagină": 1, "pagini": 1, "perpage": 100, "total": "3", "fotografie": [2332823355 "; "53555705 @ N00", "secret": "e603be40a2", "server": "2333", "ferma": 3, "titlu": "ispublic" , "isfamily": 0, "date_faved": "1248134938"] // Restul fotografiilor, "stat": "ok"
flickr.people.getPublicPhotos
Obțineți o listă de fotografii publice pentru utilizatorul dat.
Argumente: nsid [required] - ID-ul utilizatorului apelant, safe_search - Blocarea conținutului NSFW.
Autentificare: Nu
Raspuns
"fotografii": "pagină": 1, "pagini": 1, "perpage": 100, "total": "15", "fotografie": 3728895285 "; "40318902 @ N02", "secret": "df6dfee053", "server": "3466", "ferma": 4, "title": "isfriend" ": 0] // Restul fotografiilor," stat ":" ok "
flickr.groups.getInfo
Pentru a obține informații despre un anumit grup.
Argumente: group_id [required] - ID-ul grupului despre care căutați informații.
Autentificare: Nu
Raspuns
"group": "id": "51035612836 @ N01", "iconserver": "1", "iconfarm": 1, "_content": șirul "Un grup Flickr pentru proiectele API Flickr Conducerea conștientizării API-ului Flickr, a proiectelor care o utilizează și a ideilor incredibile pe care sistemele expuse în mod programat le produc Google Think Google API + Amazon API + API Flickr cu un pic de GMail aruncat Dezvoltatorii din Flickr au subliniat în mod corect că doresc să țină discuții tehnice direct legate de API din lista de discuții. " , "limită": null, "ispoolmoderated": 1, "accelerare": obiect "_content" număr ":" 3 "," mod ":" zi "," restricții ": obiect " photos_ok ": 1," videos_ok ": 1," images_ok ": 1," screens_ok ": 1, art_ok 1, "safe_ok": 1, "moderate_ok": 0, "restricted_ok": 0, "has_geo": 0, "stat": "ok"
flickr.photos.getExif
Extrage datele EXIF ale unei fotografii existente .
Argumente: photo_id [required] - ID-ul fotografiei a cărui date EXIF urmează să fie extrase.
Autentificare: Nu
Raspuns
"photo": "id": "2332823355", "secret": "e603be40a2", "server": "2333" "tagspaceid": 1, "etichetă": 271, "etichetă": " "etichetă": 272, "etichetă": "model", "brut": "_content": "Canon EOS 350D DIGITAL";
flickr.photos.geo.getLocation
Returnează latitudinea și longitudinea locului în care a fost făcută o anumită fotografie.
Argumente: photo_d [required] - ID-ul fotografiei a cărei locație trebuie să fie cunoscută.
Autentificare: Nu
Raspuns
"foto": obiect "id": șir "229097925", "locație": obiect "latitude" :-33.856874, "longitudine": 151.214672, , "locație": "_content": "Sydney", "loc_id": "p50kaZyYAJx9BZHQ", "woeid": "1105779" : "", "țară": obiect "_content": "Australia", "place_id": "om3Zr2abAphqrm3jdA", "woeid": "23424748" "p50kaZyYAJx9BZHQ", "woeid": șir "1105779", "stat": șir "ok"
flickr.photos.getFavorites
Returnează o listă de persoane care au marcat fotografia trecută ca preferată.
Argumente: photo_id [obligatoriu] - ID-ul fotografiei în cauză.
Autentificare: Nu
Raspuns
"fotografie": "person": "" nsid ":" 39011391 @ N06 "," username ":" derek1960 "," favedate " : "229097925", "secret": "13a21546fb", "server": "61", "fermă": 1, 18 "...," stat ":" ok "
flickr.places.getTopPlacesList
Returnează o listă cu cele 100 de locuri cele mai marcate pentru o zi.
Argumente: place_type_id [obligatoriu] - ID numeric al unui loc pentru a defini modul în care să se clusteră fotografiile.
Autentificare: Nu
Raspuns
"locurile": obiect "total": numărul100, "loc": ["place_id": "4KO02SibApitvSBieQ", "woeid": "-116.982" "," place_url ":" / United United States "," place_type ":" țară "," place_type_id ":" 12 "," _content ":" United States "," photo_count " din cele 99 de țări], "date_start": 1248048000, "date_stop": 1248134399, "stat": "ok"
flickr.tags.getHotList
Returnează o listă cu cele mai utilizate etichete pentru o anumită perioadă de timp.
Argumente: period - Specifică perioada pentru care se pot obține etichete. număr - specifică numărul de etichete care trebuie returnate în răspuns.
Autentificare: Nu
Raspuns
"hottags": "perioadă": "zi", "număr": 20, "etichetă": "100", "_content": "sundaystreets" "," _content ":" happymondayblues ", " scor ":" 100 "," _content ":" melbourneopenhouse2009 "]," stat ": șir" ok "
În această parte a seriei, am analizat modul de lucru cu API-ul Flickr, inclusiv modul de preluare a datelor publice și private, autentificarea cu API și modul de încărcare a datelor în serviciu. De asemenea, am aruncat o privire asupra unora dintre cele mai utilizate metode API împreună cu răspunsurile lor JSON pentru a înțelege mai bine structura datelor pe care API le trimite înapoi.
Care este API acoperit în continuare, depinde în întregime de dvs. Aici, la Net Tuts, satisfacem cererea populară și astfel vă vom lăsa pe voi, cititorii, să decideți ce API de serviciu va fi scris despre următorul. În comentariul dvs. de mai jos, lăsați numele serviciului și interfața API, dacă este cazul. Am acoperit REST în acest articol, dar ne-am bucura să acopere API bazate pe SOAP sau XML-RPC dacă suficiente persoane o doresc.
Întrebări? Ce lucruri frumoase de spus? Critici? Activați secțiunea de comentarii și lasă-mă un comentariu. Codificare fericită!