JSON con PHP

  • 14/06/2009
  • 12:16 pm
  • unijimpe

JSON es un formato de intercambio de información muy practico pues se puede compartir datos como si fueran objetos, originalmente pensado para usarse con Javascript hoy veremos la forma de utilizarlo con PHP.

json-php

Como utilizar JSON con PHP
Si estamos utilizando PHP4 necesitaremos una clase que encargue de codificar/decodificar los datos en formato JSON. Para ello descargamos la clase JSON.php. Luego de ello la incluimos en nuestro archivo y la inicializamos llamando a Services_JSON para luego decodificar los datos con el método decode.

  1. require_once("JSON.php");
  2. $json = new Services_JSON;
  3. $obj = $json->decode($data)

Ejemplo de uso
Para desarrollar nuestro ejemplo, obtendremos los datos de Google AJAX Search API, el cual es un servicio que nos utilizar los resultados de búsqueda de Google y devuelve los datos en JSON. Para ello si deseamos obtener los datos de la búsqueda de la palabra 'Google' podremos acceder a http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Google, el cual devolverá los resultados en el siguiente formato:

  1. {"responseData":
  2. { "results": [
  3.   {
  4.    "GsearchResultClass": "GwebSearch",
  5.    "unescapedUrl": "http://en.wikipedia.org/wiki/Paris_Hilton",
  6.    "url": "http://en.wikipedia.org/wiki/Paris_Hilton",
  7.    "visibleUrl": "en.wikipedia.org",
  8.    "cacheUrl": "http://www.google.com/search?...",
  9.    "title": "\u003cb\u003eParis Hilton\u003c/b\u003e",
  10.    "titleNoFormatting": "Paris Hilton",
  11.    "content": "In 2006, she released her debut..."
  12.   },
  13.   {
  14.    "GsearchResultClass": "GwebSearch",
  15.    "unescapedUrl": "http://www.imdb.com/name/nm0385296/",
  16.    "url": "http://www.imdb.com/name/nm0385296/",
  17.    "visibleUrl": "www.imdb.com",
  18.    "cacheUrl": "http://www.google.com/search?...",
  19.    "title": "\u003cb\u003eParis Hilton\u003c/b\u003e",
  20.    "titleNoFormatting": "Paris Hilton",
  21.    "content": "Self: Zoolander. Socialite..."
  22.   },
  23.   ...
  24.  ],
  25.  "cursor": {
  26.   "pages": [
  27.    { "start": "0", "label": 1 },
  28.    { "start": "4", "label": 2 },
  29.    { "start": "8", "label": 3 },
  30.    { "start": "12","label": 4 }
  31.   ],
  32.   "estimatedResultCount": "59600000",
  33.   "currentPageIndex": 0,
  34.   "moreResultsUrl": "http://www.google.com/search?..."
  35.  }
  36. }, 200, null)
  37. }

Como pueden ver, toda la información esta estructurada como un objeto con lo cual es muy sencillo de acceder a todos los elementos como veremos a continuación.

Ahora el siguiente paso es obtener los datos de la ruta indicada y decodificarlas para posteriormente mostrarlas en nuestro HTML. Nótese que para hacer uso de este servicio es necesario tener un key, el cual es gratuito y lo pueden obtener en Sign-up for an AJAX Search API Key.

  1. require_once("JSON.php");   
  2. // read data
  3. $aQue = "Google";
  4. $aKey = "TU_API_KEY";
  5. $aUrl = "http://ajax.googleapis.com/ajax/services/search/web";
  6. if (isset($_GET['q'])){
  7.    $aQue = urlencode($_GET['q']);
  8. }
  9. $data = file_get_contents($aUrl."?v=1.0&key=".$aKey."&q=".$aQue);
  10. // decode data
  11. $json = new Services_JSON;
  12. $obj = $json->decode($data);

Hasta este punto tenemos los datos en la variable $obj, luego en el cuerpo de nuestro html hacemos un recorrido por cada elemento de los resultados. Como se puede ver en el siguiente código se accede a los elementos como objetos de manera sencilla.

  1. $results = $obj->responseData->results;
  2. for ($i=0; $i<sizeof($results); $i++) {
  3.     $tmp = $results[$i];
  4.     $tmpHTML.= "<a href=\"".$tmp->url."\">".$tmp->title."</a>";
  5.     $tmpHTML.= "<br />".$tmp->content."<br/>";
  6.     $tmpHTML.= "<i>".$tmp->url."</i><br /><br />";
  7. }
  8. echo $tmpHTML;

Podemos mejorar nuestro ejemplo si le agregamos una caja de texto para que ingrese su búsqueda y además de una hoja de estilos para que se vean mejor los resultados, con lo cual obtenemos /json/php.php.

Posts Relacionados

bajar-youtube.com

  • 31/05/2009
  • 1:21 pm
  • unijimpe

Hoy les presento un nuevo proyecto llamado bajar-youtube.com el cual les permitirá buscar, reproducir, dedicar y/o descargar vídeos Youtube. Además tiene una opción para copiar directamente el URL del vídeo que estas viendo para descargarlo.

bajar-youtube

Características para el Usuario
Entre las características mas importantes de esta web podemos destacar:

  • Buscador para encontrar el vídeo que mas te agrade.
  • Opciones para descargar los vídeos en FLV, MP4 y 3GP.
  • Uso de un player personalizado basado en Toobplayer.
  • Se muestran los vídeos relaciones del archivo en reproducción.
  • Opción para ingresar el URL del vídeo para descargar.

Características Técnicas
Respecto a los temas técnicos podemos mencionar:

Para los que nos visitan desde hace tiempo Bajar Youtube es una evolución de Sprytube, con varios cambios que facilitan la navegación, rapidez de carga y opciones para descargar vídeos.

Espero les agrade este nuevo servicio y la pueden recomendar a sus amigos, si tienes preguntas y sugerencias las pueden hacer llegar al foro.

Posts Relacionados

Tutorial de SimplePie

  • 30/05/2009
  • 10:17 pm
  • unijimpe

SimplePie es una librería PHP muy popular que permite parsear Feeds del tipo RSS o Atom. Tiene todos los métodos necesarios para obtener todos los datos del Feed, incluso permite hacer cache de feeds para acelerar las consultas.

simplepie

Empezando con SimplePie
Lo primero es descargar la librería desde la página oficial en SimplePie Download la cual en estos momentos esta en la versión 1.1.3, extraemos el archivo donde encontramos el archivo simplepie.inc el cual es el archivo que contiene las funciones necesarias para leer feeds. Luego creamos un archivo PHP en donde incluimos este archivo:

  1. <?php require("simplepie.inc"); ?>

El siguiente paso es crear una instancia de la clase SimplePie, luego utilizamos el método set_feed_url para asignar el feed que deseamos leer y con el método set_cache_location definimos la carpeta donde se guardarán los archivos temporales de cache.

  1. $feed = new SimplePie();
  2. $feed->set_feed_url("http://blog.unijimpe.net/feed/");
  3. $feed->set_cache_location("cache");
  4. $feed->init();
  5. $feed->handle_content_type();

Hasta este punto ya tenemos los datos del feed en la variable $feed, lo siguiente es mostrar cada ítem del feed. Para ello hacemos un recorrido por cada elemento del feed, haciendo un foreach por cada elemento devuelto por el método get_items,

  1. <strong><?php echo $feed->get_title(); ?></strong><br />
  2. <em><?php echo $feed->get_description(); ?></em>
  3.     <?php foreach ($feed->get_items() as $item) { ?>
  4.     <li>
  5.         <a href="<?php echo $item->get_link(); ?>">
  6.             <?php echo $item->get_title(); ?>
  7.         </a>
  8.         <br />
  9.         <?php echo $item->get_description(); ?>
  10.     </li>
  11.     <?php } ?>
  12. </ul>

En donde hemos utilizado get_description para obtener un resumen de cada post, si deseamos obtener el post completo se puede utilizar get_content. Pueden ver el ejemplo funcionando en /simplepie/parser.php.

Ahora si aplicamos estilos y formateamos los resultados devueltos por SimplePie podemos lograr excelente resultados, incluso podemos incluir un formulario para que los visitantes ingresen el feed que desean leer. Pueden ver un ejemplo mucho mas completo en /simplepie/.

demo-simplepie

Pueden ver el listado completo de funciones disponibles para extraer los datos del Feed en la documentación oficial SimplePie: API Reference. Finalmente les dejo los archivos fuente de estos ejemplos para que hagan sus pruebas.

Posts Relacionados