1. Code
  2. JavaScript

Der ultimative Leitfaden zum Dekodieren der Flickr-API

Scroll to top
16 min read

German (Deutsch) translation by Valentina (you can also view the original English article)

Flickr ist die weltweit größte Website für die Verwaltung und Freigabe von Fotos und verfügt über eine beeindruckende API, mit der Entwickler auf fast alle Daten zugreifen und diese bearbeiten können. Schauen wir uns an, wie man mit der API arbeitet: auf der niedrigstmöglichen Ebene.

Ein Wort vom Autor

In dieser Web 2.0-Ära haben Webanwendungen mit einer benutzerfreundlichen, intuitiven API einen deutlichen Vorteil, da Entwickler die Plattform nutzen und für sie erstellen und so mehr Benutzer erfassen können. Auf dem Weg zum Social Web und zu Mashups ist eine gute API keine nette Ergänzung mehr: Sie ist ausgesprochen notwendig. Und denken Sie daran, zu viel Abstraktion ist niemals eine gute Sache. Es gibt zwar eine Reihe von API-Kits, um die Arbeit mit der betreffenden API zu vereinfachen, aber wäre es nicht cool zu wissen, was tatsächlich unter der Haube vor sich geht? Wäre es nicht aufregend, das tatsächliche Voodoo zwischen dem Kit und der API zu dekonstruieren? Ja, das dachte ich mir! In dieser neuen Serie werden wir uns die APIs einiger der beliebtesten Dienste ansehen. Heute werfen wir einen Blick auf die Flickr-API.

Die Abfolge der Ereignisse

Der Tango zwischen Entwickler und API beginnt und gipfelt in einer Reihe klar definierter Schritte. Ich werde jeden Schritt erklären, während wir gehen.

Festlegen der Art der Anwendung

Zunächst müssen wir uns für die Art der Anwendung entscheiden, die wir erstellen möchten. Desktop-Anwendungen müssen das Desktop-Modell verwenden, während eine Webanwendung eines der beiden Modelle verwenden kann. Das mobile Modell geht über den Rahmen dieses Artikels hinaus.

Für diesen Artikel habe ich mich für das Desktop-Modell entschieden, da für das Web-Modell alle Tests in der Domäne durchgeführt werden müssen, in der die App bereitgestellt werden soll. Dies ist für viele Menschen möglicherweise nicht unbedingt machbar. Wir wählen das Desktop-Modell, da es diese Einschränkung nicht enthält.

Abrufen eines API-Schlüssels

Der nächste Schritt ist das Erhalten eines Anwendungsschlüssels. Flickr verwendet diesen App-Schlüssel, um unsere Nutzung und andere Statistiken im Auge zu behalten. Gehen Sie hierher und beantragen Sie Ihren eigenen API-Schlüssel.

Da wir diesen speziellen API-Schlüssel nur zu Bildungszwecken verwenden, entscheiden wir uns für einen nichtkommerziellen Schlüssel.

Füllen Sie alle Details aus, die das Formular erfordert, und achten Sie dabei besonders auf die Beschreibung des Projekts. Die Entwickler von Flickr haben diese Beschreibung tatsächlich gelesen, wenn sich Ihre App in irgendeiner Weise schlecht verhält, um sicherzustellen, dass sie legitim ist. Verbringen Sie also diese zusätzliche Minute damit, Ihr Meisterwerk zu beschreiben.

Bei erfolgreicher Registrierung erhalten Sie diese Seite. Notieren Sie sich den API-Schlüssel und das gemeinsame Geheimnis für die spätere Verwendung.

Flickr API-Grundlagen

Die Flickr-API bietet eine Reihe von Methoden, für die möglicherweise eine Authentifizierung erforderlich ist oder nicht. Jede Methode verwendet eine Reihe von Argumenten, die ihr Verhalten und ihre Nutzlast ändern. Antworten können in einer Reihe von Formaten empfangen werden, einschließlich JSON, XML, SOAP und REST. Alle diese Anfragen können an Endpunkte gestellt werden, die dem Format entsprechen, in dem Sie die Anfrage gestellt haben. Zum Beispiel werden wir REST für den Rest dieses Artikels verwenden. Unser URL-Endpunkt wäre also http://api.flickr.com/services/rest/.

Öffentliche Daten abrufen

Es gibt eine Reihe von Methoden, die öffentliche Daten abrufen und daher keinerlei Authentifizierung erfordern. Wir brauchen nur den API-Schlüssel, den wir zuvor erhalten hatten, zusammen mit allen erforderlichen Argumenten der fraglichen Methode. Schauen wir uns ein Beispiel an.

Die Methode getPublicGroups ist ein Beispiel für eine Methode, für die keine Authentifizierung erforderlich ist und die öffentliche Daten abruft. Wir übergeben die Benutzer-ID des Benutzers und unseren API-Schlüssel, und die API antwortet in dem von Ihnen angeforderten Format mit einer Liste von Gruppen, zu denen der Benutzer gehört.

Wir würden eine Anfrage an diese URL senden.

1
http://api.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=your_api_key&user_id=user_id_x

Ersetzen Sie your_api_key durch den zuvor erhaltenen Schlüssel und user_id_x durch eine gültige NSID. Da ich möchte, dass meine Antworten in JSON vorliegen, kann ich einen weiteren Parameter hinzufügen, der die API auffordert, mit einer JSON-Nutzlast zu antworten.

1
http://api.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=your_api_key&user_id=user_id_x&format=json

Die API sendet eine Antwort wie folgt:

1
jsonFlickrApi({"photos":{"page":1, "pages":1, "perpage":100, "total":"2", 
2
"photo":[{"id":"3728895285", "owner":"40318902@N02", "secret":"df6dfee053", "server":"3466", 
3
"farm":4, "title":"opac", "ispublic":1, "isfriend":0, "isfamily":0}, 
4
{"id":"3729689790", "owner":"40318902@N02", "secret":"ea9c38a675", 
5
"server":"2531", "farm":3, "title":"scale", "ispublic":1, "isfriend":0, "isfamily":0},]}, 
6
"stat":"ok"})

Richtig formatiert wird es so aussehen.

1
jsonFlickrApi(
2
 	{"photos": {
3
    	"page": 1,
4
        "pages": 1,
5
        "perpage": 100,
6
        "total": "2",
7
        "photo": [
8
        	{
9
            	"id": "3729689790",
10
                "owner": "40318902@N02",
11
                "secret": "ea9c38a675",
12
                "server": "3466",
13
                "farm": 4,
14
                "title": "opac",
15
                "ispublic": 1,
16
                "isfriend": 0,
17
                "isfamily": 0
18
            },
19
            {
20
            	"id": "3729689845",
21
                "owner": "40318902@N02",
22
                "secret": "df6dfee053",
23
                "server": "2531",
24
                "farm": 3,
25
                "title": "scale",
26
                "ispublic": 1,
27
                "isfriend": 0,
28
                "isfamily": 0
29
            }
30
          ]
31
	  },
32
      "stat": "ok"
33
})

Private Daten abrufen

Dies ist wahrscheinlich der Grund, warum Sie lernen möchten, wie man mit der Flickr-API arbeitet, und deshalb werden wir jeden Schritt langsam durchgehen, da dieser Teil dazu neigt, Menschen zu verwirren.

Unterzeichnung

Um private Daten zu erhalten, muss jede Methode authentifiziert werden, und damit die Authentifizierung funktioniert, muss jeder unserer Anrufe signiert werden. Das Signieren funktioniert so:

Erstellen Sie eine alphabetisch sortierte Liste der Argumente

Im vorherigen Beispiel würde unsere Liste beispielsweise so aussehen:

  • api_key: xxx
  • Format: json
  • user_id: yyy

Erstellen Sie die Signaturzeichenfolge

Die Signaturzeichenfolge wird erstellt, indem das zuvor erhaltene API-Geheimnis verwendet und anschließend die Liste der Argumente angehängt wird. Zum Beispiel würde unsere Signaturzeichenfolge so aussehen:

1
0123456789api_keyxxxformatjsonuseridyyy

Unterschreiben Sie unseren Anruf

Der letzte Schritt ist die eigentliche Unterzeichnung. Flickr erwartet, dass wir den MD5-Hash unserer Signaturzeichenfolge als benannten Parameter an unseren ursprünglichen Methodenaufruf anhängen.

Jeder authentifizierte Anruf hat also dieses allgemeine Format

1
http://api.flickr.com/services/rest/?method=ourmethod&api_key=apikey&api_sig=hashedvalue

Einen Frob bekommen

Nachdem Sie sich abgemeldet haben, können Sie mit der eigentlichen Authentifizierung fortfahren. Flickr verwendet ein OAuth-ähnliches System für die Autorisierung. Dies bedeutet, dass ein Benutzer, der unsere App verwenden möchte, seine Benutzeranmeldeinformationen nicht preisgeben muss. Benutzer werden zur Flickr-Website transportiert, auf der der Benutzer gefragt wird, ob er unserer App den Zugriff auf die Benutzerdaten ermöglichen möchte.

Hier kommt ein Frob ins Spiel. Um den Anmeldelink zu erstellen, der den Benutzer zu einer Autorisierungsseite auf Flickr führt, benötigen wir eine Möglichkeit, eine bestimmte Anmeldesitzung zu identifizieren.

Um einen Frob zur Identifizierung der Sitzung zu erhalten, müssen wir den flickr.auth.getFrob aufrufen, der unseren API-Schlüssel als benanntes Argument übergibt. Unsere URL würde so aussehen:

1
http://api.flickr.com/services/rest/?method=flickr.auth.getFrob&api_key=apikey&api_sig=hashedvalue

Eine JSON-Antwort sieht folgendermaßen aus:

1
frobcallback(
2
	{"frob":{
3
    	"_content": "xxx"
4
        }, 
5
     "stat":"ok"
6
     })

Erstellen der Anmelde-URL

Nachdem wir erfolgreich einen Frob erhalten haben, können wir nun daran arbeiten, die URL zu erstellen, mit der der Benutzer unsere Anwendung autorisieren kann. Die Anmelde-URL hat dieses allgemeine Format:

1
http://flickr.com/services/auth/?api_key=apikey&api_sig=apisig&perms=perms&frob=frob

Ersetzen Sie den Wert von api_key durch den zuvor erhaltenen Wert, den Wert von api_sig durch einen MD5-Hash unserer Signaturzeichenfolge und den Wert von frob durch den von der API zurückgegebenen frob-Wert. Der Parameter perms definiert die gewünschte Ebene des Kontozugriffs und hat gültige Werte für Lesen, Schreiben und Löschen. Jeder Zugriff enthält die Rechte aller seiner Vorgänger.

Eine gültige Anmelde-URL hat folgende Form:

1
2
http://flickr.com/services/auth/?api_key=63b08e2efcc22de9900163f4d761fdbc&api_sig=663369798c695dbe2fd7e2af7576dd2b&perms=delete&frob=72157621742082858-8e995a1104e28114-870912

Die Autorisierungsseiten sehen folgendermaßen aus:


Zunächst stellt Flickr sicher, dass der Benutzer nicht mit der Autorisierung der Anwendung verbunden ist.

Als nächstes wird sichergestellt, dass der Benutzer die Berechtigungsstufe kennt, die er der Anwendung gewährt.

Erfolgreiche Autorisierung!

Erhalten des Authentifizierungstokens

Sobald der Benutzer die Genehmigung für unsere Anwendung erteilt hat, können wir fortfahren. Der letzte Schritt in diesem Prozess ist das Abrufen eines auth_token. Ein Authentifizierungstoken bindet einen bestimmten API-Schlüssel an eine bestimmte Benutzer-ID, d. h. Ein Authentifizierungstoken kann verwendet werden, um nur die Daten eines bestimmten Benutzers zu bearbeiten, während ein bestimmter API-Schlüssel verwendet wird. Für jeden API-Methodenaufruf, für den eine Authentifizierung erforderlich ist, ist ein Authentifizierungstoken erforderlich.

Das Abrufen eines Authentifizierungstokens ist so einfach wie das Aufrufen der Methode flickr.auth.getToken, die den API-Schlüssel, den Frob und die API-Signatur als benannte Parameter übergibt. Die URL würde so aussehen:

1
http://flickr.com/services/auth/?api_key=apikey&api_sig=apisig&frob=frob

Bei einer erfolgreichen Anforderung erhalten wir ein Authentifizierungstoken, mit dem unbegrenzt auf die Daten eines bestimmten Benutzers mit einem bestimmten API-Schlüssel zugegriffen werden kann.

Anruf tätigen

Nachdem alle Voraussetzungen erfüllt sind, können wir nach Bedarf Daten abrufen. Denken Sie daran, dass jeder Ihrer authentifizierten Aufrufe signiert werden muss. Daher muss jeder Aufruf api_key, auth_token und api_sig senden, damit der Methodenaufruf funktioniert.

Die URL für Ihre REST-Anfrage muss mindestens so aussehen. Andere methodenspezifische Parameter oder Parameter, die die Nutzlast ändern, können nach Bedarf angehängt werden.

1
2
http://flickr.com/services/auth/?api_key=xxx&api_sig=yyy&auth_token=zzz&method=method_name

Stellen Sie beim Signieren sicher, dass Sie auch die anderen Argumente und ihre Werte angeben. Dies ist eine häufige Ursache für Fehler und Kopfschmerzen und kann leicht behoben werden. Fügen Sie der URL Rückrufparameter hinzu, um die domänenübergreifende Einschränkung in Browsern bei Verwendung von AJAX zu vermeiden? Die müssen auch in die Signaturzeichenfolge gehen!

Rekonstruktion der URLs

Schauen wir uns eine Beispielantwort für eine Methode an, die öffentliche Fotos zurückgibt.

1
jsonFlickrApi(
2
 	{"photos": {
3
    	"page": 1,
4
        "pages": 1,
5
        "perpage": 100,
6
        "total": "2",
7
        "photo": [
8
        	{
9
            	"id": "3729689790",
10
                "owner": "40318902@N02",
11
                "secret": "ea9c38a675",
12
                "server": "3466",
13
                "farm": 4,
14
                "title": "opac",
15
                "ispublic": 1,
16
                "isfriend": 0,
17
                "isfamily": 0
18
            },
19
            {
20
            	"id": "3729689845",
21
                "owner": "40318902@N02",
22
                "secret": "df6dfee053",
23
                "server": "2531",
24
                "farm": 3,
25
                "title": "scale",
26
                "ispublic": 1,
27
                "isfriend": 0,
28
                "isfamily": 0
29
            }
30
          ]
31
	  },
32
      "stat": "ok"
33
})

Es ist alles in Ordnung und gut, aber die Antwort enthält keine URL, auf die wir nur verlinken könnten. Stattdessen müssen wir eine URL für das betreffende Bild erstellen, die auf den vom Server zurückgesendeten Daten basiert. Hier ist, wie:

Die URL eines Bildes auf Flickr folgt einem genau definierten Muster. Entsperren Sie dies und die Antwort macht viel mehr Sinn. Hier ist die URL eines Bildes in meinem Konto.

1
http://farm3.static.flickr.com/2531/3729689790_ea9c38a675_b.jpg

Die URL besteht aus mehreren Teilen:

  • Farm ID. 3 in unserem Fall.
  • Server ID. 2531 hier.
  • Lichtbildausweis - Eine Möglichkeit, jedes von Flickr gehostete Foto eindeutig zu identifizieren. 3729689845 in diesem Fall.
  • Foto geheim - ea9c38a675
  • Bildgröße - Definiert die Größe des zurückzugebenden Bildes. Mögliche Werte sind o für Original, b für eine Breite/Höhe von 1024, m für 240, t für 100 und s für 75. Wenn nicht angegeben, wird standardmäßig eine Breite/Höhe von 500 verwendet.

Kurz gesagt, um die Quelle des Bildes zu konstruieren, würde der Link wie der unten gezeigte aussehen, wenn wir die JSON-Antwort analysieren müssten, wobei Daten die Variable sind, die die Antwort enthält:

1
"http://farm" + data.photos.photo[i].farm + ".static.flickr.com/" + data.photos.photo[i].server + "/"+data.photos.photo[i].id + "_"+data.photos.photo[i].secret + ".jpg

Hochladen auf Flickr

Nachdem wir uns nun angesehen haben, wie Daten mithilfe der API von Flickr abgerufen werden, ist es an der Zeit, einen Blick darauf zu werfen, wie Daten zurückgesendet werden.

Die Upload-API von Flickr unterscheidet sich von den REST- oder SOAP-basierten APIs darin, dass es keine URL-Endpunkte gibt, auf die Sie nur zugreifen und Daten abrufen können. Stattdessen müssen Daten über eine POST-Anfrage an gesendet werden

1
http://api.flickr.com/services/upload/

Da es außerhalb des Geltungsbereichs dieses Artikels liegt, Ihnen zu zeigen, wie Sie eine POST-Abfrage von Grund auf neu erstellen, verwenden wir ein Formularelement mit dem Enctype-Wert multipart/form-data, um den gesamten Code für uns zu generieren. Wenn Sie dieses bestimmte Attribut verwenden, können Sie angeben, dass das Formular Binärdaten enthält und als solche behandelt werden muss. Ein Beispielformular würde so aussehen.

1
<form enctype="multipart/form-data" method="post"  action="http://api.flickr.com/services/upload/">
2
<input type="file" name="photo"/>
3
<input type="submit" name ="submit" value="Upload"/>
4
</form>

Denken Sie jedoch daran, dass wir dem Dienst noch eine Reihe von Parametern senden müssen, darunter den API-Schlüssel, das Authentifizierungstoken und die Methodensignatur. Wie machen wir das? Es geht nur darum, ein verstecktes Textfeld zu erstellen und deren Wert so zu ändern, dass er die richtigen Werte widerspiegelt. Wie so:

1
<form enctype="multipart/form-data" method="post"  action="http://api.flickr.com/services/upload/">
2
<input type="file" name="photo"/>
3
<input type="hidden" name="api_key" value=""/>
4
<input type="hidden" name="auth_token" value=""/>
5
<input type="hidden" name="api_sig" value=""/>
6
<input type="submit" name ="submit" value="Upload"/>
7
</form>

Denken Sie daran, dass Sie beim Generieren des MD5-Hashs der Signaturzeichenfolge jedes Element des Formulars mit Ausnahme des Fotofelds hochladen müssen. Dies schließt den Wert der Senden-Schaltflächen ein, da der Inhalt des gesamten Formulars an die URL gesendet wird. Für das obige Beispiel müsste der Hash wie folgt berechnet werden:

1
var hash = MD5(secret + "api_key" + apikey  + "auth_token" + token + "submitUpload");

Sie sind nicht ganz auf diese Argumente beschränkt. Die Upload-API berücksichtigt eine Reihe von Argumenten, darunter den Titel des Fotos, den Titel und die Beschreibung. Wenn Sie möchten, können Sie den Benutzer genauso einfach alle diese Daten zusammen mit den Datenschutzeinstellungen wie folgt eingeben lassen:

1
<form enctype="multipart/form-data" method="post"  action="http://api.flickr.com/services/upload/">
2
<input type="file" name="photo"/>
3
<input type="text" name="title" value=""/>
4
<input type="text" name="description" value=""/>
5
<input type="text" name="tags" value=""/>
6
<input type="text" name="is_public" value="0"/>
7
<input type="text" name="is_friend" value="1"/>
8
<input type="text" name="content_type" value="1"/>
9
<input type="text" name="hidden" value="2"/>
10
<input type="hidden" name="api_key" value=""/>
11
<input type="hidden" name="auth_token" value=""/>
12
<input type="hidden" name="api_sig" value=""/>
13
<input type="submit" name ="submit" value="Upload"/>
14
</form>

Häufig verwendete Methoden

Ein Artikel über die Arbeit mit der API eines Dienstes wäre eindeutig unvollständig, ohne einen Blick auf einige der am häufigsten verwendeten API-Methoden zu werfen. In diesem Sinne finden Sie hier einige API-Methoden, die sehr hilfreich sein sollten, unabhängig davon, ob Sie ein Mashup erstellen oder nur Ihre eigenen Daten abrufen möchten.

Denken Sie daran, dass für authentifizierte Aufrufe gültige Werte erforderlich sind, damit die Parameter api_key, api_sig und auth_token funktionieren, während für normale Aufrufe möglicherweise methodenspezifische Parameter erforderlich sind oder nicht. Für alle Aufrufe muss der Parameter api_key gesendet werden. Wenn ich also erwähne, dass der Aufruf eine Authentifizierung erfordert, ist die Tatsache, dass für den Aufruf die anderen Argumente erforderlich sind, implizit impliziert. Die unten angegebenen Argumente sind optional, sofern nicht anders angegeben. Methoden, die eine Liste von Daten zurückgeben, verwenden auch ein page- und ein per_page-Argument, um ihre Namensvetter zu definieren.

Ich habe Antworten zu jeder Methode beigefügt, um Ihnen eine Vorstellung von den Daten zu geben, die an uns zurückgesendet werden. Ich habe mich für JSON als Antwortformat entschieden, da die meisten Entwickler, mit denen ich arbeite, JSON besser mögen als XML.

flickr.activity.userPhotos
Gibt eine Liste der letzten Aktivitäten für Fotos zurück, die dem anrufenden Benutzer gehören.

Argumente: Zeitrahmen - Definiert den Zeitrahmen, in dem nach Updates gesucht werden soll.

Authentifizierung: Ja

Antwort

1
{
2
    "items": {
3
          "item":[
4
               {
5
                   "type": "photo",
6
                   "id": "3728895285",
7
                   "owner": "40318902@N02",
8
                   "ownername": "lordtottuu",
9
                   "secret": "df6dfee053",
10
                   "server": "3466",
11
                   "farm": 4,
12
                   "title": {
13
                         "_content": "opac"
14
                        },
15
                   "commentsold": 1,
16
                   "commentsnew": 0,
17
                   "notesold": 0,
18
                   "notesnew": 0,
19
                   "views": 0,
20
                   "faves": 0,
21
                   "more": 0,
22
                   "activity": {
23
                         "event": [
24
                               {
25
                                   "type": "comment",
26
                                   "commentid": "40298554-3728895285-72157621628251433",
27
                                   "user": "40318902@N02",
28
                                   "username": "lordtottuu",
29
                                   "dateadded": "1248131143",
30
                                   "_content": "Demo image for my upcoming article on Net Tuts"
31
                               }
32
                            ]
33
                        }
34
                  }
35
            ],
36
          "page": 1,
37
          "pages": 1,
38
          "perpage": 10,
39
          "total": 1
40
      },
41
     "stat": "ok"
42
}

flickr.contacts.getList
Gibt eine Liste der Kontakte für den anrufenden Benutzer zurück.

Argumente: filter - Argument zum Herausfiltern der Liste. Gültige Werte sind Freunde, Familie, beide und keine.

Authentifizierung: Ja

Antwort

1
{
2
     "contacts": {
3
           "page": 1,
4
           "pages": 1,
5
           "per_page": 1000,
6
           "perpage": 1000,
7
           "total": 2,
8
           "contact": [
9
               {
10
                  "nsid": "7488445@N05",
11
                  "username": "thegleek",
12
                  "iconserver": "179",
13
                  "iconfarm": 1,
14
                  "ignored": 0,
15
                  "realname": " Mike Poleski",
16
                  "friend": "1",
17
                  "family": "0",
18
                  "path_alias": null,
19
                  "location": ""
20
               }
21
            ]
22
         // Rest of the contacts

23
      },
24
     "stat": "ok"

flickr.favorites.getList
Gibt eine Liste von Fotos zurück, die von einem bestimmten Benutzer als Favorit markiert wurden.

Argumente: min_fave_date, max_fav_date - Selbsterklärend.

Authentifizierung: Ja

Antwort

1
{
2
    "photos": {
3
          "page": 1,
4
          "pages": 1,
5
          "perpage": 100,
6
          "total": "3",
7
          "photo": [
8
               {
9
                  "id": "2332823355",
10
                  "owner": "53555705@N00",
11
                  "secret": "e603be40a2",
12
                  "server": "2333",
13
                  "farm": 3,
14
                  "title": "Xbox 360 still life",
15
                  "ispublic": 1,
16
                  "isfriend": 0,
17
                  "isfamily": 0,
18
                  "date_faved": "1248134938"
19
               }
20
            ]
21
          // Rest of the photos

22
      },
23
    "stat": "ok"
24
}

flickr.people.getPublicPhotos
Holen Sie sich eine Liste der öffentlichen Fotos für den angegebenen Benutzer.

Argumente: nsid [erforderlich] - ID des aufrufenden Benutzers, safe_search - Zum Blockieren von NSFW-Inhalten.

Authentifizierung: Nein

Antwort

1
{
2
    "photos": {
3
          "page": 1,
4
          "pages": 1,
5
          "perpage": 100,
6
          "total": "15",
7
          "photo": [
8
               {
9
                   "id": "3728895285",
10
                   "owner": "40318902@N02",
11
                   "secret": "df6dfee053",
12
                   "server": "3466",
13
                   "farm": 4,
14
                   "title": "opac",
15
                   "ispublic": 1,
16
                   "isfriend": 0,
17
                   "isfamily": 0
18
                }
19
            ]
20
        // Rest of the photos    

21
      },
22
     "stat": "ok"
23
}

flickr.groups.getInfo
Informationen zu einer bestimmten Gruppe erhalten.

Argumente: group_id [erforderlich] - Die ID der Gruppe, über die Sie Informationen suchen.

Authentifizierung: Nein

Antwort

1
{
2
    "group": {
3
           "id": "51035612836@N01",
4
           "iconserver": "1",
5
           "iconfarm": 1,
6
           "name": {
7
                 "_content": "Flickr API"
8
           },
9
           "description": {
10
                 "_content": string"A Flickr group for Flickr API projects. Driving awareness of the Flickr API, projects that use it and those incredible ideas that programmatically exposed systems produce. Think Google API + Amazon API + Flickr API with a bit of GMail thrown in. The developers of Flickr rightly pointed out they want to keep technical discussions directly related to the API on the mailing list."
11
           },
12
           "members": {
13
                 "_content": "7775"
14
           },
15
           "privacy": object{
16
                 "_content": "3"
17
           },
18
           "lang": null,
19
           "ispoolmoderated": 1,
20
           "throttle": object{
21
                 "count": "3",
22
                 "mode": "day"
23
           },
24
           "restrictions": object{
25
                 "photos_ok": 1,
26
                 "videos_ok": 1,
27
                 "images_ok": 1,
28
                 "screens_ok": 1,
29
                 "art_ok": 1,
30
                 "safe_ok": 1,
31
                 "moderate_ok": 0,
32
                 "restricted_ok": 0,
33
                 "has_geo": 0
34
           }
35
     },
36
     "stat": "ok"
37
}

flickr.photos.getExif
Extrahiert EXIF-Daten eines vorhandenen Fotos.

Argumente: photo_id [erforderlich] - ID des Fotos, dessen EXIF-Daten extrahiert werden sollen.

Authentifizierung: Nein

Antwort

1
{
2
3
    "photo": {
4
          "id": "2332823355",
5
          "secret": "e603be40a2",
6
          "server": "2333",
7
          "farm": 3,
8
          "exif": [
9
               	  {
10
                      "tagspace": "TIFF",
11
                      "tagspaceid": 1,
12
                      "tag": 271,
13
                      "label": "Make",
14
                      "raw": {
15
                            "_content": "Canon"
16
                        }
17
                  },
18
               	  {
19
                      "tagspace": "TIFF",
20
                      "tagspaceid": 1,
21
                      "tag": 272,
22
                      "label": "Model",
23
                      "raw": {
24
                            "_content": "Canon EOS 350D DIGITAL"
25
                        }
26
                  },
27
               	// Rest of the exif data

28
            ]
29
      },
30
    "stat": "ok"
31
}

flickr.photos.geo.getLocation
Gibt den Breiten- und Längengrad des Ortes zurück, an dem ein bestimmtes Foto aufgenommen wurde.

Argumente: photo_d [erforderlich] - ID des Fotos, dessen Standort bekannt sein soll.

Authentifizierung: Nein

Antwort

1
{
2
     "photo": object{
3
         "id": string"229097925",
4
         "location": object{
5
                 "latitude": -33.856874,
6
                 "longitude": 151.214672,
7
                 "accuracy": "16",
8
                 "context": "0",
9
                 "locality": {
10
                       "_content": "Sydney",
11
                       "place_id": "p50kaZyYAJx9BZHQ",
12
                       "woeid": "1105779"
13
                 },
14
                 "region": object{
15
                       "_content":"New South Wales",
16
                       "place_id": "puGzSeubAphuNnF2",
17
                       "woeid": "2344700"
18
                 },
19
                 "country": object{
20
                       "_content": "Australia",
21
                       "place_id": "om3Zr2abAphqrm3jdA",
22
                       "woeid": "23424748"
23
                 },
24
                 "place_id": string"p50kaZyYAJx9BZHQ",
25
                 "woeid": string"1105779"
26
           }
27
     },
28
    "stat": string"ok"
29
}

flickr.photos.getFavorites
Gibt eine Liste von Personen zurück, die das übergebene Foto als Favorit markiert haben.

Argumente: photo_id [erforderlich] - ID des betreffenden Fotos.

Authentifizierung: Nein

Antwort

1
{
2
     "photo": {
3
           "person": [
4
               {
5
                   "nsid": "39011391@N06",
6
                   "username": "derek1960",
7
                   "favedate": "1243834286"
8
               },
9
               // Rest of the photos

10
            ],
11
           "id": "229097925",
12
           "secret": "13a21546fb",
13
           "server": "61",
14
           "farm": 1,
15
           "page": 1,
16
           "pages": 2,
17
           "perpage": 10,
18
           "total": "18"
19
      },
20
     "stat": "ok"
21
}

flickr.places.getTopPlacesList
Gibt eine Liste der 100 am häufigsten markierten Orte für einen Tag zurück.

Argumente: place_type_id [erforderlich] - Numerische ID eines Ortes, an dem definiert wird, wie Fotos geclustert werden sollen.

Authentifizierung: Nein

Antwort

1
{
2
     "places": object{
3
           "total": number100,
4
           "place": [
5
               {
6
                   "place_id": "4KO02SibApitvSBieQ",
7
                   "woeid": "23424977",
8
                   "latitude": "48.890",
9
                   "longitude": "-116.982",
10
                   "place_url": "/United+States",
11
                   "place_type": "country",
12
                   "place_type_id": "12",
13
                   "_content": "United States",
14
                   "photo_count": "23654"
15
               },
16
               // Rest of the 99 countries

17
            ],
18
           "date_start": 1248048000,
19
           "date_stop": 1248134399
20
      },
21
     "stat": "ok"
22
}

flickr.tags.getHotList
Gibt eine Liste der am häufigsten verwendeten Tags für einen bestimmten Zeitraum zurück.

Argumente: Punkt - Gibt den Zeitraum an, für den Tags abgerufen werden sollen. count - Gibt die Anzahl der Tags an, die in der Antwort zurückgegeben werden sollen.

Authentifizierung: Nein

Antwort

1
{
2
     "hottags": {
3
           "period": "day",
4
           "count": 20,
5
           "tag": [
6
               {
7
                  "score": "100",
8
                  "_content": "sundaystreets"
9
               },
10
               {
11
                  "score": "100",
12
                  "_content": "happymondayblues"
13
               },
14
               {
15
                  "score": "100",
16
                   "_content": "melbourneopenhouse2009"
17
               }
18
            ]
19
      },
20
     "stat": string"ok"
21
}

Abschließend

In diesem ersten Teil der Serie haben wir uns mit der Arbeit mit der Flickr-API befasst, einschließlich dem Abrufen öffentlicher und privater Daten, der Authentifizierung mit der API und dem Hochladen von Daten zum Dienst. Wir haben uns auch einige der am häufigsten verwendeten API-Methoden zusammen mit ihren JSON-Antworten angesehen, um die Struktur der Daten, die die API zurücksendet, besser zu verstehen.

Welche API als nächstes behandelt wird, liegt ganz bei Ihnen. Hier bei Net Tuts gehen wir auf die große Nachfrage ein und lassen Sie, die Leser, entscheiden, über welche API des Dienstes als nächstes geschrieben wird. Hinterlassen Sie in Ihrem Kommentar unten gegebenenfalls den Namen des Dienstes und die API-Schnittstelle. Wir haben REST in diesem Artikel behandelt, würden uns aber freuen, SOAP-basierte oder XML-RPC-basierte APIs zu behandeln, wenn genügend Leute dies wünschen.

Fragen? Schöne Dinge zu sagen? Kritik? Klicken Sie auf den Kommentarbereich und hinterlassen Sie mir einen Kommentar. Viel Spaß beim Codieren!

  • Folgen Sie uns auf Twitter oder abonnieren Sie den NETTUTS RSS-Feed, um weitere tägliche Tipps und Artikel zur Webentwicklung zu erhalten.