Julio 09, 2013
enzo
En algunas ocasiones podríamos necesitas que desde Drupal consumamos información provista por servicios que utilicen servicios que implementan JSONP como metodo de respuesta, este metodo es especialmente utilizado para intercambiar información entre diferentes dominios.
- Crear nueva función.
El problema que tenemos es que en Drupal no tenemos una función nativa que procese este tipo de respuestas, por lo tanto ahora les voy a mostrar una función llamada drupal_jsonp_decode que podríamos implementar en nuestros módulos personalizados. Veamos la definición de la función.
function drupal_jsonp_decode($jsonp, $assoc = false) { // PHP 5.3 adds depth as third parameter to json_decode
if($jsonp[0] !== '[' && $jsonp[0] !== '{') { // we have JSONP
$jsonp = substr($jsonp, strpos($jsonp, '('));
}
return drupal_json_decode(trim($jsonp,'();'), $assoc);
}
- Implementación de la función.
Teniendo la función ya implementada imaginemos un servicio que se invoca con la siguiente URL http://example.net/geocode?zip\_code=90210&format=json y que tiene una respuesta jsonp similar la la siguiente.
({"city":"Beverly Hills","state":"CA","zipcode":"90210"});
En el siguiente código consumiremos este servicio y se procesara la respuesta para crear un arreglo PHP con los datos retornados.
$url = 'http://example.net/geocode?zip_code=90245&format=json';
$result = drupal_http_request($url);
if($result->code == '200') {
$geocode = jsonp_decode($result->data);
}
Al final tendríamos un arreglo PHP como el que se muestra a continuación.
Array
(
[city] => Beverly Hills
[state] => CA
[zipcode] => 90210
)
Espero que haya sido de su agrado.