Json, Wordpress y PHP (segunda parte)

Escrito el 7 de Abril del 2007 por artux.
Categoria: Desarrollo, Wordpress, Tutoriales, Programacion.

Nota importante: El archivo wp-json.php original mencionado en el post anterior, tiene un minúsculo error de syntaxis; en las parejas {”clave” : “valor”} {”key” : “value”} la definicion de las diferentes claves esta hecha sin comillas, lo cual puede provocar errores de lectura en algunas aplicaciones.

Para solucionar este pequeño inconveniente, edité el wp-json.php original agregándole las comillas faltantes, y además retoqué un poco el código para que la función callback pueda ser definida por el cliente. Pueden ver el archivo resultante en el siguiente enlace: wp-json.php (editado) o desde este otro Feed en Formato JSON para Wordpress.

Hecha la aclaración, paso a completar este post con la segunda parte que quedé debiendo :) .

Json, Wordpress y PHP (segunda parte)

3- PHP y JSON

Exiten parses de JSON para la mayoría de lenguajes de programación, y como no podría ser de otra forma también para PHP.

Sin embargo la forma en que llevaremos esto acabo va a depender de la versión de PHP que estemos utilizando y de las posibilidades que ofrezca nuestro servidor de hosting.

Explicando mejor esto.

En PHP desde la versión 5.2.0 viene incluida una extencion para codificar y decodificar JSON habilitada por defecto. Pero no todos los servidores de hosting funcionan con PHP 5, es mas, la gran mayoria solo lo hacen con PHP 4, en ese caso se puede utilizar la libreria de PEAR llamada Services_JSON.

Ejemplificando para que se entienda.

  • JSON con PHP 5:
    =========================================
    <?php
    
    //codificando un array en formato JSON
    
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
    
    echo json_encode($arr);
    
    ?>
    
    /*Nos devuelve lo siguente
    
    {"a":1,"b":2,"c":3,"d":4,"e":5}
    */
    =========================================
    
    =========================================
    <?php
    
    //decodificando JSON
    
    $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
    
    var_dump(json_decode($json));
    var_dump(json_decode($json, true));
    
    ?>
    
    /*Nos devuelve lo siguente
    
    Sin parametro opcional devuelve un objeto
    
    object(stdClass)#1 (5) {
        ["a"] => int(1)
        ["b"] => int(2)
        ["c"] => int(3)
        ["d"] => int(4)
        ["e"] => int(5)
    }
    
    true como parametro opcional devuelve un array asociativo
    
    array(5) {
        ["a"] => int(1)
        ["b"] => int(2)
        ["c"] => int(3)
        ["d"] => int(4)
        ["e"] => int(5)
    }
    */
    =========================================
    

Se puede leer más sobre el método anterior en el sitio oficial de PHP.

  • JSON con PHP 4:
    solo necesitaremos descargar el archivo Services_JSON y hacer lo siguiente.

    =========================================
    
    // creando un nueva instancia del Services_JSON
    
    require_once('JSON.php');
    $json = new Services_JSON();
    
    // convirtiendo un array en formato JSON
    
    $value = ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5)
    $output = $json->encode($value);
    print($output);
    
    // decodificando JSON
    $input = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
    $value = $json->decode($input);
    
    =========================================
    

Con esto creo que ya podemos empezar a trabajar con PHP y JSON. Tambien, si no queremos trabajar con la clase Services_JSON, existe la posibilidad de instalar la extencion json disponible en PECL; pero para ello tendremos que tener acceso al archivo php.ini y no todos los servidores de hosting lo permiten.

4- JSON, Wordpress y PHP

Para ir terminando, solo nos queda hacer interactuar estas tres tecnologias.

Por un lado ya tenemos el archivo wp-json.php, que nos genera un feed de nuestro blog en formato JSON; por otro lado en las líneas anteriores aprendimos a codificar y decodificar JSON con PHP. Lo que haremos entonces, sera un minilector en PHP del feed JSON, generado por el ya mencionado wp-json.php, que nos muestre el último post de nuestro blog.

Para el ejemplo voy a usar la clase Services_JSON.

=========================================

<?php

//incluyo el archivo que hara el trabajo de decodificacion
include (’json.php’);
$json = new Services_JSON();

//peticion del feed JSON
$site = file_get_contents(’http://www.tublogwordpress.com/wp-json.php’);

//decodificando la data recibida en formato JSON
$value = $json->decode($site);

//rescatando los valores mediante la funcion get_object_vars ()
$data = get_object_vars($value);
$show = get_object_vars($data[’entries’][’0′]);

//armando la salida a mostrar
$titulo = $show[’title’];
$link = $show[’id’];
$contenido = $show[’content’];

//formateando la salida
$content = “<div id=’json’>n”;
$content .= “<h2><a href=’” . $link . “‘>” . $titulo . “</a></h2>n”;
$content .= $contenido;
$content .= “</div>”;

//mostrando el resultado
echo $content;

?>

=========================================

Pueden ver un ejemplo funcionando que muestra el último post de anieto2k.com desde aquí. Es un poquito más completo y además cachea el contenido cada una hora para evitar sobrecargas.

Tambien pueden ojear el código de dicho ejemplo desde aquí.

Por ahora esto es todo, espero que les sirva para algo. Estoy un poco cansado y hambriento asi que me despido con un gran saludo!. Ante cualquier duda o sugerencia pueden dejar un comentario.

Saludos!!

delicious technorati google my web yahoo
6 comments.

Enrique Place

Comment on Abril 8th, 2007.

Me gustaron ambos artículos introductorios, lo que me gustaría conocer desde tu punto de vista y experiencia es en casos prácticos que ventajas hay de usar JSON sobre las alternativas tradicionales.

Luk

Comment on Abril 19th, 2007.

Lo único que puedo aportar es que recuerdo haber utilizado JSON en SugarCRM, una vez q tuve que modificar unos módulos…

Muy buenos artículos!

artux

Comment on Abril 19th, 2007.

#Enrique: antes que nada, disculpame por tardar tanto en responderte, resulta que estube un poco ocupado.

Ahora tratando de respoder a tu pregunta de las ventajas de JSON sobre las alternativas tradicionales.

Si solo vamos a trabajar con PHP, es decir, si lo que necesitamos hacer es recibir datos para luego procesarlos y mostrarlos, no existen grandes diferencias con respecto a las formas de parsear JSON o XML. Por lo tanto las ventajas son relativas y dependen más de factores externos e independientes, como pueden ser:

-El API y/o Aplicacion de la cual vamos a recibir los Datos;
-Las Posibilidades que nos ofrece nuestro servidor.

Pero si vamos a trabajar con AJAX, usando o no PHP como serverside, las ventajas de JSON se ponen en evidencia. Ya que desde javascript es mucho menos engorroso recorrer un objeto JSON para obtener los datos que necesitemos, que parsear los datos recibidos en formato XML.

Espero aver respondido tu pregunta. Te dejo, como complemento, una exelente traducción hecha por Bruno Vilches de tambien, y por que no, un exelente artículo escrito por Dustin Diaz:

- JSON for the masses. (original en ingles)

- Json Para Todos. (traduccion bruno vilches)

Axell

Comment on Octubre 23rd, 2007.

He intentado utilizar la libreria Services_JSON pero la información que obtengo de mi DB contiene acentos
y otros caracteres especiales, los cuales no pueden ser correctamente interpretados cuando tomo esta informacion en un Grid de ExtJs, tienen ustedes alguna sugerencia al respecto ?

De antemano muchas gracias !

Saludos …

Axell.

carlos

Comment on Noviembre 22nd, 2007.

intento usar la lib json pero todo funciona menos los acentos y eñes el resultado del encode del json ya me devuelve mal los datos ej:Asociacin00200053agrada Familia de Burdeos
necesito la solucion

carlos

Comment on Noviembre 22nd, 2007.

Intento usar la lib json
pero no funcionan los acentos y eñes el resultado del encode del json ya me devuelve mal los datos.
mucho busque la solución pero no la encuentro
ej:Asociacin00200053agrada Familia de Burdeos
ya no se q hacer…

Deja tu Comentario

Comments can contain some xhtml. Names and emails are required (emails aren't displayed), url's are optional.