Como leer JSON con wp_remote_get en WordPress


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]