Para aquellos que tenemos que trabajar con API de terceros, JSON es el formato estándar para estos procesos y WordPress nos provee de una API realmente útil la HTTP API.
Para los que no sepais que es JSON pues os dejo una definición pero traducido a dummies seria un formato en texto plano de esos del txt muy sencillo formado por clave // valor con lo que la transferencia de datos es mucho menor, mas simple y muy rápida.
JSON es un formato de texto para la serialización de datos estructurados. Deriva de los Objetos Literales de Javascript y está definido en la tercera edición del estándar de Lenguaje de programación ECMAScript
Ejemplo de JSON
{ “id”: “1234” }
HTTP API tiene varias funciones super útiles que nos van a facilitar el trabajo, nosotros vamos a ver dos de ellas en este articulo.
- wp_remote_get() recupera el contenido de una url usando el método get
- wp_remote_post() recupera el contenido de una url usando el método post
En realidad veremos solo wp_remote_get() porque no vamos a traera nada por post.
Y ahora diréis para que vale esto.
Pues por ejemplo para conectarnos a otros sitios como: Redes sociales ( Facebook, Twitter, .. ) , para conectarnos a Mailchimp , para trabajar con bancos como Stripe , para cargar los productos de Woocommerce y mucho mas.
Un ejemplo sencillo lo tenéis en el siguiente plugin Simple Share Button es un plugin para compartir en las redes sociales y muestra cuantas veces se ha compartido con facebook una entrada. Para eso se conectan a la api de facebook y le piden esa información.
Link al código de github alli teneis una funcion que llama a la api de facebook y os da la informacion.
https://github.com/davidsneal/simplesharebuttons/blob/master/inc/ssba_admin_panel.php
Si a la siguiente url : http://graph.facebook.com/ le poneis una pagina web por ejemplo:
http://graph.facebook.com/https://www.danielcastanera.com vereis que os devuelve un json.
{ "id": "https://www.danielcastanera.com" }
En mi caso nadie ni yo he compartido mi pagina en facebook pero si cogieramos la web de un periodico importante como abc , elpais, …
http://graph.facebook.com/http://www.abc.es
{ "id": "http://www.abc.es", "shares": 46155 }
http://graph.facebook.com/http://www.elpais.com
{ "id": "http://www.elpais.com", "shares": 186898, "comments": 4 }
Veréis que la cosa cambia y aparece el numero de veces compartida y los comentarios.
Esta información podríais procesarla y mostrarla mediante un shortcode, como vamos a ver en el siguiente ejemplo:
// funcion que me devuelve los datos de function demoFacebook(){ $url = get_site_url(); $datosFacebook = wp_remote_get('http://graph.facebook.com/'.$url, array('timeout' => 6)); if(is_wp_error($datosFacebook)){ return "error al leer facebook"; } else { // decodificamos la informacion $arrayDatosFacebook = json_decode($datosFacebook['body'], true); return (isset($arrayDatosFacebook['shares']) ? $arrayDatosFacebook['shares'] : 0); } } function demoTwitter(){ $url = get_site_url(); $datosTwitter = wp_remote_get('http://public.newsharecounts.com/count.json?url=' . $url, array('timeout' => 6)); if(is_wp_error($datosTwitter)){ return "error al leer twitter"; } else { // decodificamos la informacion $arrayDatosTwitter = json_decode($datosTwitter['body'], true); return (isset($arrayDatosTwitter['count']) ? $arrayDatosTwitter['count'] : 0); } } function shortcodePintarRedes() { return "<p>publicado en twitter " . demoTwitter(). " veces</p> <p>publicado en facebook " . demoFacebook(). " veces</p>"; } add_shortcode('pintarRedes', 'shortcodePintarRedes');
Y si ahora usamos el shortcode
[pintarRedes]
El resultado seria:
[pintarRedes]