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]