Blog de Eliseo Ortiz Valdez
Breve tutorial para uso de la API Flickr en aplicaciones con PHP.
Introducción.
Este tutorial tiene como objetivo proveer de los pasos necesarios para empezar a desarrollar aplicaciones utilizando API de flickr para PHP. Aunque la utilización de esta API es relativamente sencilla, hay poca información desde que se crean las claves necesarias para autenticación, al realizar una petición REST. De esto tratará este breve tutorial. Para este caso utilizaremos la API PHP, no por que sea la mejor si no por que esta fue la que probé.
Requerimientos.
Tiempo para jugar, ganas para jugar.
Para este tutorial necesitaremos PHP 5.x, haber bajado la librería PHP desde: http://sourceforge.net/projects/phlickr/
Descomprimir la librería en el directorio de documentos html del servidor HTTP en uso.
Autenticación.
Antes de poder hacer uso de la API PHP será necesario obtener dos clave válida para la API(API key & API secret), en esta liga: http://www.flickr.com/services/apps/create/apply (solo por confirmar, es obviamente necesario tener una cuenta flickr)
Posteriormente necesitamos crear un controlador de autenticación para generar un token, sin estos no podremos realizar peticiones REST. Para más información de como generar dichas claves podemos remitirnos a la siguiente liga: http://www.flickr.com/services/api/auth.howto.web.html . Sin embargo en la librería que hemos bajado se encuentra una herramienta para generar un archivo que contendrá las claves necesarias. Dicha herramienta se encuentra en la ruta: flickr/Tools, donde flickr es el directorio descomprimido de la librería PHP de la API. El script se llama GetToken.php. A continuación el código:
#!/usr/local/bin/php -q <?php include_once '../Phlickr/Api.php'; /** * I wrote this script because it's a real pain in the ass to generate the * authorization tokens. Hopefully this will make it a little easier. * * @version $Id$ * @author Andrew Morton <drewish@katherinehouse.com> * @license http://opensource.org/licenses/lgpl-license.php * GNU Lesser General Public License, Version 2.1 */ print "This script will help you retrieve a Flickr authorization token.\n\n"; // Prevent PHP from enforcing a time limit on this script set_time_limit(0); // Get the user's API key and secret. print 'API Key: '; $api_key = trim(fgets(STDIN)); print 'API Secret: '; $api_secret = trim(fgets(STDIN)); // Create an API object, then request a frob. $api = new Phlickr_Api($api_key, $api_secret); $frob = $api->requestFrob(); print "Got a frob: $frob\n"; // Find out the desired permissions. print 'Permissions (read, write, or delete): '; $perms = trim(fgets(STDIN)); // Build the authentication URL. $url = $api->buildAuthUrl($perms, $frob); print "\nOpen the following URL in your browser and and authorize:\n$url\n\n"; print "Press return when you're finished...\n"; fgets(STDIN); // After they've granted permission, convert the frob to a token. $token = $api->setAuthTokenFromFrob($frob); // Print out the token. print "Auth token: $token\n"; // Optionally, create a config file. print 'Save these settings? (y/N): '; $saveit = strtolower(trim(fgets(STDIN))); if ($saveit{0} == 'y') { print 'Filename: '; $filename = trim(fgets(STDIN)); print "Saving settings to '$filename'\n"; $api->saveAs($filename); print "Use this with Phlickr_Api::createFrom() to create an object.\n"; } exit(0); ?> |
Es necesario antes de correr el script, tener nuestras claves API que fueron generadas perviamente, pues el script pedirá estas para la generación del token. Como se ve en el código, el script nos pedirá si queremos salvar las configuraciones en un archivo, una vez que ingresemos el nombre este script generará un archivo similar a este:
api_key=0123456789abcdef0123456789abcedf
api_secret=abcedf0123456789
api_token=123-abcdef0123456789
cache_file= cache.tmp
Ejecución
Una vez obtenido las claves necesarias el scrtip, es tiempo de realizar una petición a flickr.
Nota.- Antes de comenzar recomiendo analizar las rutas del require_once que se encuentran en el archivo Api.php, pues es posible que sean necesarias algunas adecuaciones.
Ahora realizaremos una petición a flickr, utilizando el método de búsqueda (flickr.photos.search) , dándole como parámetro una palabra clave.
Para saber cuales son y que variables necesita pasar como argumento cada método haremos uso de la página: http://www.flickr.com/services/api/, donde se encuentran todos los métodos disponibles. En este caso sería bueno dar un vistazo a la liga correspondiente a nuestro método: http://www.flickr.com/services/api/flickr.photos.search.html. Tenemos que tener en cuenta, que este método solo devolverá imágenes disponibles para el usuario que se encuentra realizando la petición, para que sea posible obtener información a cerca de fotos privadas es necesario realizar la autenticación correspondiente.
El argumento obligatorio es la clave “API key”, sin embargo en nuestra aplicación utilizaremos la función executeMethod, y como ya hemos creado el objeto Phlickr_Api en la variable $api, no será necesario ingresar el argumento API key, para la petición.
La petición devolverá un documento XML como el siguiente:
<photos page="2" pages="89" perpage="10" total="881"> <photo id="2636" owner="47058503995@N01" secret="a123456" server="2" title="test_04" ispublic="1" isfriend="0" isfamily="0" /> <photo id="2635" owner="47058503995@N01" secret="b123456" server="2" title="test_03" ispublic="0" isfriend="1" isfamily="1" /> </photos> |
En nuestra aplicación seleccionamos los elementos que nos interesa y generamos las ligas href de cada imágen y la liga de la página que corresponde a la foto.
<?php require_once '../includes/services/flickr/Phlickr/Api.php'; $api = new Phlickr_Api('a192837oiabcccffccca', '6363636adaeadaead3', '734344534343dabb4-767564537272ceb4'); $request = array( 'tags' => 'nazca', 'per_page' => '10' ); $responseXML = $api->executeMethod('flickr.photos.search',$request); $dom = new DomDocument(); $up = new site_Photos(); if($dom->loadXML($responseXML)){ //echo $dom->saveXML(); //dump dom into a string $photos = $dom->getElementsByTagName( "photo" ); foreach($photos as $photo){ $photo_id = $photo->getAttribute("id"); $photo_owner = $photo->getAttribute("owner"); $photo_title = $photo->getAttribute("title"); /* Esta es la notación para obtener la página que corresponde a la foto http://www.flickr.com/[owner]/[idPhoto] */ $photo_page = "http://www.flickr.com/photos/".$photo_owner."/".$photo_id; /* Este es la notación requerida para obtener la imagen en tamaño pequeño (s) o mediano (m), para visualización http://farm[numberFarm].static.flickr.com/[numberServer]/[idPhoto]_[secret]_[size(s|m)].jpg */ $farm = $photo->getAttribute("farm"); $secret = $photo->getAttribute("secret"); $server = $photo->getAttribute("server"); $image_src = "http://farm" . $farm . ".static.flickr.com/" . $server . "/" . $photo_id . "_" . $secret ."_s.jpg"; echo "ID: ".$photo_id." Owner:".$photo_owner." Title:".$photo_title. " PHOTO PAGE:" . $photo_page . "IMG SRC:" . $image_src ."\n"; } } ?> |
| Imprimir artículo | Este artículo fue publicado por admin el 17 March 2010 a las 9:31, y está archivado en Código. Sigue las respuestas a esta entrada a través de RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio. |