1. Code
  2. JavaScript

La guía definitiva para decodificar la API de Flickr

Scroll to top

Spanish (Español) translation by Luis Chiabrera (you can also view the original English article)

Flickr, siendo el sitio más grande de administración y uso compartido de fotos en el mundo, tiene una API impresionante para permitir a los desarrolladores acceder y manipular casi todos sus datos. Veamos cómo trabajar con la API: en el nivel más bajo posible.

Una Palabra del Autor

En esta era de la Web 2.0, las aplicaciones web que tienen una API intuitiva y fácil de usar tienen una clara ventaja, ya que les permite a los desarrolladores explotar y construir para la plataforma y así capturar a más usuarios. A medida que avanzamos hacia la web social y los mashups, una buena API ya no es una buena adición: es francamente necesaria. Y recuerda que demasiada abstracción nunca es algo bueno. Si bien hay una serie de kits de API para simplificar el trabajo con la API en cuestión, ¿no sería genial saber qué está pasando realmente bajo el capó? ¿No sería emocionante deconstruir el vudú real entre el kit y la API? Sí, eso creo! En esta nueva serie, veremos las API de algunos de los servicios más populares que existen. Hoy, echamos un vistazo a la API de Flickr.

La Secuencia de Eventos

El tango entre el desarrollador y la API comienza y culmina en una serie de pasos bien definidos. Explicaré cada paso a medida que avanzamos.

Decidir el Tipo de Aplicación

En primer lugar, tenemos que decidir sobre el tipo de aplicación que vamos a construir. Las aplicaciones de escritorio tienen que usar el modelo de escritorio, mientras que una aplicación web puede usar cualquiera de los modelos. El modelo móvil está más allá del alcance de este artículo.

Para este artículo, elegí ir con el modelo de escritorio, ya que el modelo web requiere que se realicen todas las pruebas en el dominio en el que se implementará la aplicación. Esto podría no ser necesariamente factible para muchas personas. Elegimos el modelo de escritorio ya que carece de esta restricción.

Obtención de una Clave API

El siguiente paso es obtener una clave de aplicación. Flickr utiliza esta clave de aplicación para controlar nuestro uso y otras estadísticas. Dirígete aquí y solicita tu propia clave API.

Dado que nuestro uso de esta clave API particular es puramente educativo, elegimos obtener una clave no comercial.

Complete todos los detalles que requiere el formulario con especial atención a la descripción del proyecto. Los desarrolladores de Flickr en realidad leen esta descripción si su aplicación se comporta mal de alguna manera para asegurarse de que sea legítima. Así que pasa ese minuto extra describiendo tu obra maestra.

Un registro exitoso le proporciona esta página. Anote la clave de la API y el secreto compartido para su uso posterior.

Conceptos Básicos de la API de Flickr

La API de Flickr proporciona varios métodos que pueden requerir o no autenticación. Cada método toma una serie de argumentos que modifican su comportamiento y carga útil. Las respuestas se pueden recibir en varios formatos, incluidos JSON, XML, SOAP y REST. Todas estas solicitudes se pueden realizar en los puntos finales correspondientes al formato que haya elegido para realizar la solicitud. Por ejemplo, usaremos REST para el resto de este artículo, por lo que nuestro punto final de URL sería http://api.flickr.com/services/rest/.

Extrayendo Datos Públicos

Existen varios métodos que extraen datos públicos y, por lo tanto, no requieren autenticación de ningún tipo. Solo necesitamos la clave de API que obtuvimos anteriormente junto con los argumentos necesarios del método en cuestión. Veamos un ejemplo.

El método getPublicGroups es un ejemplo de un método que no requiere autenticación y que extrae datos públicos. Pasamos la identificación de usuario del usuario y nuestra clave de API y la API responde en el formato que solicitó con una lista de grupos de los que forma parte el usuario.

Enviaremos una solicitud a esta URL.

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

Reemplace your_api_key con la clave que obtuvimos anteriormente y user_id_x con un NSID válido. Como me gusta que mis respuestas estén en JSON, puedo agregar otro parámetro pidiéndole a la API que responda con una carga JSON.

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

La API enviará una respuesta así:

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"})

Formateado correctamente, se verá así.

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
})

Extrayendo Datos Privados

Esta es probablemente la razón por la que desea aprender a trabajar con la API de Flickr, por lo que revisaremos cada paso lentamente, ya que esta parte tiende a confundir a las personas.

Firmando

Para obtener datos privados, cada método necesita autenticación y para que la autenticación funcione, se debe firmar cada una de nuestras llamadas. La firma funciona así:

Haga una lista ordenada alfabéticamente de los argumentos

Por ejemplo, en el ejemplo anterior nuestra lista se vería así:

  • api_key: xxx
  • formato: json
  • user_id: yyy

Crea la cadena de firma

La cadena de firma se crea tomando el secreto API que obtuvimos anteriormente y luego agregando la lista de argumentos. Por ejemplo, nuestra cadena de firma se vería así:

1
0123456789api_keyxxxformatjsonuseridyyy

Firmando nuestra llamada

El último paso es la firma real. Flickr espera que tomemos el hash MD5 de nuestra cadena de firma y lo agreguemos a nuestra llamada al método original como un parámetro con nombre.

Entonces, cualquier llamada autenticada tiene este formato general

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

Obteniendo un frob

Ahora con el cierre de sesión, ahora podemos pasar a la autenticación real. Flickr utiliza un sistema similar a OAuth para la autorización, lo que significa que un usuario que quiera usar nuestra aplicación no necesita divulgar sus credenciales de usuario. Los usuarios son transportados al sitio web de Flickr, donde se le pregunta si desea permitir que nuestra aplicación acceda a los datos del usuario.

Aquí es donde entra un frob. Para crear el enlace de inicio de sesión que lleva al usuario a una página de autorización en Flickr, necesitamos una forma de identificar una sesión de inicio de sesión específica.

Para obtener un frob para identificar la sesión, necesitamos llamar al flickr.auth.getFrob pasando nuestra clave de API como argumento con nombre. Nuestra URL se vería así:

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

Una respuesta JSON se ve así:

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

Construyendo la URL de inicio de sesión

Después de obtener con éxito un frob, ahora podemos trabajar en la creación de la URL que permite al usuario autorizar nuestra aplicación. La URL de inicio de sesión tiene este formato general:

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

Reemplace el valor de api_key con el que habíamos obtenido anteriormente, el valor de api_sig con un hash MD5 de nuestra cadena de firma y el valor de frob con el valor de frob devuelto por la API. El parámetro perms define el nivel deseado de acceso a la cuenta y tiene valores válidos de lectura, escritura y eliminación. Cada acceso incluye los derechos de todos sus predecesores.

Una URL de inicio de sesión válida toma esta forma:

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

Las páginas de autorización se ven así:


Primero, Flickr se asegura de que el usuario no haya sido engañado para autorizar la aplicación.

A continuación, se asegura de que el usuario conozca el nivel de autorización que está otorgando a la aplicación.

Autorización exitosa!

Obteniendo el token de autenticación

Una vez que el usuario ha autorizado nuestra aplicación, podemos continuar. El último paso en este proceso es obtener un auth_token. Un token de autenticación vincula una clave API específica a un ID de usuario específico, es decir, un token de autenticación se puede usar para manipular solo los datos de un usuario específico mientras se usa una clave API específica. Es necesario un token de autenticación para todas y cada una de las llamadas a métodos API que requieren autenticación.

Obtener un token de autenticación es tan simple como llamar al método flickr.auth.getToken pasando la clave api, frob y la firma api como parámetros con nombre. La URL se vería así:

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

Una solicitud exitosa nos proporciona un token de autenticación que se puede usar indefinidamente para acceder a los datos de un usuario específico utilizando una clave API específica.

Haciendo la llamada

Ahora que se han cumplido todos los requisitos previos, podemos recuperar los datos según sea necesario. Recuerde, cada una de sus llamadas autenticadas debe estar firmada, por lo que cada llamada debe enviar api_key, auth_token y api_sig para que la llamada al método funcione.

Como mínimo base, la URL de su solicitud REST debe tener este aspecto. Se pueden agregar otros parámetros específicos del método o parámetros que modifican la carga útil según sea necesario.

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

Al firmar, asegúrese de incluir también los otros argumentos y sus valores. Esta es una causa frecuente de error y dolor de cabeza y se rectifica fácilmente. ¿Incluye parámetros de devolución de llamada en la URL para evitar la restricción de dominio cruzado en los navegadores mientras usa AJAX? ¡Esos también tienen que ir en la cadena de firma!

Reconstruyendo las URL

Echemos un vistazo a una respuesta de ejemplo para un método que devuelve fotos públicas.

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
})

Todo está bien, pero la respuesta no contiene una URL a la que podríamos vincularnos. En su lugar, tenemos que construir una URL para la imagen en cuestión basada en los datos enviados desde el servidor. Aquí es cómo:

La URL de alguna imagen en Flickr sigue un patrón bien definido. Desbloquee esto y la respuesta comenzará a tener mucho más sentido. Aquí está la URL de una imagen en mi cuenta.

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

La URL está compuesta de varias partes:

  • Farm ID. 3 en nuestro caso.
  • Server ID. 2531 aquí.
  • Foto ID - una forma de identificar de forma única todas y cada una de las fotos alojadas por Flickr. 3729689845 en este caso.
  • Photo secret - ea9c38a675
  • Image size - define el tamaño de la imagen que se devolverá. Los valores posibles incluyen o para el original, b para un ancho / alto de 1024, m para 240, t para 100 ys para 75. Cuando no se especifica, el valor predeterminado es un ancho / alto de 500.

En resumen, para construir la fuente de la imagen, el enlace se vería como el que se muestra a continuación si se nos hiciera analizar la respuesta JSON donde los datos son la variable que contiene la respuesta:

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

Subiendo a Flickr

Ahora que hemos echado un vistazo a cómo recuperar datos de Flickr usando su API, es hora de echar un vistazo a cómo enviar datos de vuelta.

La API de carga de Flickr es distinta de sus API basadas en REST o SOAP en que no hay puntos finales de URL a los que pueda acceder y recuperar datos. En cambio, los datos deben enviarse a través de una solicitud POST a

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

Dado que está fuera del alcance de este artículo mostrarle cómo construir una consulta POST desde cero, utilizaremos un elemento de formulario con un valor enctype de multipart / form-data para generar todo el código para nosotros. El uso de este determinado atributo nos permite afirmar que el formulario contiene datos binarios y debe manejarse como tal. Un formulario de muestra se vería así.

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>

Pero recuerde, aún necesitamos enviar una serie de parámetros al servicio, incluida la clave de API, el token de autenticación y la firma del método. ¿Como hacemos eso? Es solo una cuestión de crear un campo de texto oculto y modificar su valor para reflejar los valores correctos. Al igual que:

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>

Recuerde que al generar el hash MD5 de la cadena de firma, debe cargar todos los elementos del formulario, excluyendo el campo de la foto. Esto incluye el valor de los botones de envío, ya que el contenido de todo el formulario se publica en la URL. Para el ejemplo anterior, el hash debería calcularse así:

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

No estás completamente limitado a esos argumentos. La API de carga incluye una serie de argumentos que incluyen el título de la foto, su título y descripción. Si lo desea, puede dejar que el usuario ingrese todos esos datos junto con la configuración de privacidad de la misma manera:

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>

Métodos de Uso Común

Un artículo sobre cómo trabajar con la API de un servicio estaría claramente incompleto sin una mirada a algunos de los métodos de API más utilizados. Con eso en mente, aquí hay algunos métodos de API que deberían ser muy útiles independientemente de si está creando un mashup o solo está buscando recuperar sus propios datos.

Recuerde, las llamadas autenticadas requieren valores válidos para que los parámetros api_key, api_sig y auth_token funcionen, mientras que las llamadas normales pueden o no requerir parámetros específicos del método. Todas las llamadas requieren que se envíe el parámetro api_key. Por lo tanto, si menciono que la llamada requiere autenticación, el hecho de que la llamada requiera los otros argumentos está implícito. Los argumentos anotados a continuación son opcionales a menos que se mencione lo contrario. Los métodos que devuelven una lista de datos también toman un argumento de página y por página para definir sus homónimos.

He incluido respuestas de cada método para darle una idea sobre los datos que se nos devuelven. He elegido JSON como formato de respuesta, ya que a la mayoría de los desarrolladores con los que trabajo les gusta JSON mejor que XML.

flickr.activity.userPhotos
Devuelve una lista de actividades recientes en fotos que pertenecen al usuario que llama.

Argumentos: timeframe - define el marco temporal en el que buscar actualizaciones.

Autenticación: Si

Respuesta

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
Devuelve una lista de contactos para el usuario llamante.

Argumentos: filter - Argumento para filtrar la lista. Los valores válidos incluyen amigos, familiares, ambos y ninguno.

Autenticación: Si

Respuesta

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
Devuelve una lista de fotos marcadas como favoritas por un usuario específico.

Argumentos: min_fave_date, max_fav_date: se explica por sí mismo.

Autenticación: Si

Respuesta

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
Obtenga una lista de fotos públicas para el usuario dado.

Argumentos: nsid [required] - ID del usuario llamante, safe_search - Para bloquear el contenido NSFW.

Autenticación: no

Respuesta

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
Para obtener información sobre un grupo en particular.

Argumentos: group_id [required]: el ID del grupo sobre el que busca información.

Autenticación: No

Respuesta

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
Extrae datos EXIF de una foto existente.

Argumentos: photo_id [required]: ID de la foto cuyos datos EXIF se van a extraer.

Autenticación: No

Respuesta

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
Devuelve la latitud y longitud del lugar donde se tomó una foto específica.

Argumentos: photo_d [required]: ID de la foto cuya ubicación se debe conocer.

Autenticación: No

Respuesta

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
Devuelve una lista de personas que han marcado la foto pasada como favorita.

Argumentos: photo_id [required]: ID de la foto en cuestión.

Autenticación: No

Respuesta

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
Devuelve una lista de los 100 lugares más etiquetados por día.

Argumentos: place_type_id [required] - Identificación numérica de un lugar para definir cómo agrupar fotos.

Autenticación: No

Respuesta

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
Devuelve una lista de las etiquetas más utilizadas para un período de tiempo determinado.

Argumentos: period : especifica el período para el que obtener etiquetas. count: especifica el número de etiquetas que se devolverán en la respuesta.

Autenticación: No

Respuesta

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
}

En conclusión

En esta parte inicial de la serie, vimos cómo trabajar con la API de Flickr, incluida la forma de recuperar datos públicos y privados, la autenticación con la API y cómo cargar datos al servicio. También echamos un vistazo a algunos de los métodos API más utilizados junto con sus respuestas JSON para comprender mejor la estructura de los datos que la API envía de vuelta.

La siguiente API que se cubre depende totalmente de usted. Aquí, en Net Tuts, satisfacemos la demanda popular, por lo que les permitiremos a ustedes, los lectores, decidir qué API de servicio se escribirá a continuación. En su comentario a continuación, deje el nombre del servicio y la interfaz API, si es necesario. Cubrimos REST en este artículo, pero nos complacería cubrir las API basadas en SOAP o XML-RPC si suficientes personas lo desean.

Preguntas? ¿Cosas bonitas que decir? ¿Críticas? Haz clic en la sección de comentarios y déjame un comentario. ¡Feliz codificación!