Foros del Web » Programando para Internet » PHP »

Obtener datos de JSON

Estas en el tema de Obtener datos de JSON en el foro de PHP en Foros del Web. Hola, Como puedo obtener datos desde JSON ?? Estoy haciendo un programa que usa la API de Yahoo para un pequeño buscador.... el código que ...
  #1 (permalink)  
Antiguo 23/06/2011, 06:11
 
Fecha de Ingreso: junio-2011
Mensajes: 4
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta Obtener datos de JSON

Hola,

Como puedo obtener datos desde JSON ??


Estoy haciendo un programa que usa la API de Yahoo para un pequeño buscador.... el código que estos ponen en su pobre documentación para realizar la consulta en PHP es el siguiente:

Código PHP:
    <?php  
    
require("OAuth.php");  
       
    
$cc_key  "your consumer key here";  
    
$cc_secret "your consumer secret here";  
    
$url "http://yboss.yahooapis.com/ysearch/news,web,images";  
    
$args = array();  
    
$args["q"] = "yahoo";  
    
$args["format"] = "json";  
       
    
$consumer = new OAuthConsumer($cc_key$cc_secret);  
    
$request OAuthRequest::from_consumer_and_token($consumerNULL,"GET"$url$args);  
    
$request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumerNULL);  
    
$url sprintf("%s?%s"$urlOAuthUtil::build_http_query($args));  
    
$ch curl_init();  
    
$headers = array($request->to_header());  
    
curl_setopt($chCURLOPT_HTTPHEADER$headers);  
    
curl_setopt($chCURLOPT_HEADER1);  
    
curl_setopt($chCURLOPT_URL$url);  
    
$rsp curl_exec($ch);  
    
$results json_decode($rsp);  
    echo 
$results;  
    
?>

Al ejecutar ese código, con los respectivos datos que pide, obtengo como resultado algo como esto que vienen a ser los resultados en JSON (perdón por llenar tanto esto de caracteres ;) ):

Cita:
{"bossresponse":{"responsecode":"200","web":{"star t":"0","count":"6","totalresults":"472856467","res ults":[{"date":"2011\/06\/21","clickurl":"http:\/\/www.yahoo.es\/","url":"http:\/\/www.yahoo.es\/","dispurl":"www.yahoo.es<\/b>","title":"Yahoo!<\/b> España","abstract":"Bienvenido a Yahoo!<\/b>, el portal más visitado del mundo. ...<\/b>"},{"date":"2011\/06\/15","clickurl":"http:\/\/correo.yahoo.es\/","url":"http:\/\/correo.yahoo.es\/","dispurl":"correo.yahoo.es<\/b>","title":"Entrar en Yahoo!<\/b>","abstract":""},{"date":"2011\/06\/15","clickurl":"http:\/\/mx.yahoo.com\/","url":"http:\/\/mx.yahoo.com\/","dispurl":"mx.yahoo.com<\/b>","title":"Yahoo!<\/b> México","abstract":"Bienvenido a Yahoo!<\/b>, la página principal más visitada del mundo. ...<\/b> Yahoo<\/b>.com. Mi Yahoo!<\/b>. Haz de Yahoo!<\/b> tu página de inicio. Entrar ¿Eres nuevo aquí? Regístrate ...<\/b>"},{"date":"2011\/06\/16","clickurl":"http:\/\/cm.es.my.yahoo.com\/","url":"http:\/\/cm.es.my.yahoo.com\/","dispurl":"cm.es.my.yahoo.com<\/b>","title":"Mi Yahoo!<\/b>","abstract":"Mi Yahoo!<\/b> Crea una página ...<\/b> para guardar permanentemente los cambios que realizas en Mi Yahoo!<\/b> ...<\/b> seattlepi.com via Yahoo!<\/b> News. Opciones. Abrir aplicación ...<\/b>"},{"date":"2011\/06\/13","clickurl":"http:\/\/es.messenger.yahoo.com\/download\/","url":"http:\/\/es.messenger.yahoo.com\/download\/","dispurl":"es.messenger.yahoo.com<\/b>\/download","title":"Descargar Yahoo<\/b> Messenger","abstract":"Descarga la nueva versión de Yahoo!<\/b> Messenger con reproductor de multimedia ...<\/b> Copyright © 2011 Yahoo!<\/b> Todos los derechos reservados. Inicio - Socios ...<\/b>"},{"date":"2011\/06\/13","clickurl":"http:\/\/login.yahoo.com\/config\/mail?.intl=e1","url":"http:\/\/login.yahoo.com\/config\/mail?.intl=e1","dispurl":"login.yahoo.com<\/b>\/config\/mail?.intl=e1","title":"Entrar en Yahoo!<\/b>","abstract":"Añade tus sitios favoritos a la nueva página de inicio de Yahoo!<\/b> ...<\/b> Nombre de usuario Yahoo!<\/b> (por ejemplo, free2rhyme@yahoo<\/b>.com) Contraseña. Seguir conectado ...<\/b>"}]}}}
El problema que no encuentro la manera de cómo mostrar esos resultados uno por uno y ordenados respectivamente. He intentado de miles maneras pero no consigo nada :S

Lo he consultado miles de veces en su foro de ayuda, pero ahí no responde nadie :(

POR FAVOR, ojalá alguien pueda ayudarme con esto que ya no me deja ni dormir por lo preocupado que me tiene!!
aqui la documentación de esta api: [URL="http://developer.yahoo.com/search/boss/boss_api_guide/codeexamples.html"]http://developer.yahoo.com/search/boss/boss_api_guide/codeexamples.html[/URL]


Muchas gracias de antemano :D
  #2 (permalink)  
Antiguo 23/06/2011, 06:14
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: Obtener datos de JSON

hola, bienvenido, me parece que lo que quieres hacer es consumir json
acá tienes una ayuda
http://www.desarrolloweb.com/manuales/php-json.html
  #3 (permalink)  
Antiguo 23/06/2011, 06:22
 
Fecha de Ingreso: junio-2011
Mensajes: 4
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Obtener datos de JSON

Hola,

Sí, viene a ser eso lo que necesito, ya me había leído esos enlaces que me has pasado pero no he tenido éxito con esta api, no logro por nada del mundo hacer que los resultados se muestren ordenados uno por uno :S

Gracias por tu respuesta.
  #4 (permalink)  
Antiguo 23/06/2011, 06:23
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: Obtener datos de JSON

pero ya sabes leer formato json ?
  #5 (permalink)  
Antiguo 23/06/2011, 06:26
 
Fecha de Ingreso: junio-2011
Mensajes: 4
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Obtener datos de JSON

La lecttura de los resultados viene a ser algo como esto, verdad? :


Cita:
$consumer = new OAuthConsumer($cc_key, $cc_secret);
$request = OAuthRequest::from_consumer_and_token($consumer, NULL,"GET", $url, $args);
$request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, NULL);
$request_url = sprintf("%s?%s", $url, OAuthUtil::build_http_query($args));

$curl_handle = curl_init($request_url);
$headers = array($request->to_header());
curl_setopt($curl_handle , CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl_handle , CURLOPT_HEADER, 1);
curl_setopt($curl_handle , CURLOPT_URL, $request_url);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 5);
$raw_results = curl_exec($curl_handle);
curl_close($curl_handle);
$results_dict = json_decode($raw_results);


$results = $results_dict->bossresponse->web;

echo "Título del 1re resultado es: ". $results[1]->title;

Última edición por jjvm123; 23/06/2011 a las 06:28 Razón: correción de la última línea de código
  #6 (permalink)  
Antiguo 01/07/2011, 11:43
 
Fecha de Ingreso: marzo-2009
Mensajes: 62
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Obtener datos de JSON

Por favor, necesito ayuda con esto, he intentado de muchas maneras y no encuentro la solución :S
¿Como puedo mostrar cada resultado?

-----CODIGO-------
Código PHP:
<?php
  
require("OAuth.php");  
   
   
$cc_key  "dj0yJmxxxxxxw";  
$cc_secret "0b9a897axxxxxxd";  
$url "http://yboss.yahooapis.com/ysearch/web";  
$args = array();  
$args["q"] = "iphone";  
$args["format"] = "json";  
$args["market"] = "es-es";
$args["count"]=3;
   
$consumer = new OAuthConsumer($cc_key$cc_secret);  
$request OAuthRequest::from_consumer_and_token($consumerNULL,"GET"$url$args);  
$request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumerNULL);  
$url sprintf("%s?%s"$urlOAuthUtil::build_http_query($args));  
$ch curl_init();  
$headers = array($request->to_header());  
curl_setopt($chCURLOPT_HTTPHEADER$headers);  
curl_setopt($chCURLOPT_HEADER1);  
curl_setopt($chCURLOPT_URL$url);  
$rsp curl_exec($ch);  
$results json_decode($rsp);  
echo 
$results;      



// OUTPUTS
echo "</br></br>VARIABLES: </br>";


echo 
"QUERY : ".$args["q"] ."</br>";
echo 
"FORMAT : ".$args["format"] ."</br>";
echo 
"MARKET : ".$args["market"] ."</br>";
echo 
"COUNT : ".$args["count"] ."</br></br>";

echo 
"CONSUMER : ".$consumer ."</br></br>";
echo 
"REQUEST : ".$request ."</br></br>";
echo 
"URL : ".$url ."</br></br>";

echo 
"</br></br>TRYING SHOW RESULTS:</br></br>";

    echo 
$results["bossresponse"]["responsecode"]["results"][0]["title"][0]; //Title
    
echo $results["bossresponse"]["responsecode"]["results"][0]["clickurl"][0]; // Click URL
    
echo $results["bossresponse"]["responsecode"]["results"][0]["abstract"][0]; // Result
    
 
echo $results->bossresponse->responsecode->results[0]->title[0];  
 echo 
$results->bossresponse->responsecode->results[1]->title[1]; 
 echo 
$results->bossresponse->responsecode->web->results[1]->title[1];
 
 echo 
$results->responsecode->web->results[1]->title[1];
 echo 
$results->bossresponse->web->results[1]->title[1];
 echo 
$results->title[1];
?>
----PANTALLA------
Cita:
HTTP/1.1 200 OK Date: Fri, 01 Jul 2011 17:26:57 GMT P3P: policyref="http://info.yahoo.com/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC GOV" Vary: Accept-Encoding Connection: close Transfer-Encoding: chunked Content-Type: application/json Cache-Control: private {"bossresponse":{"responsecode":"200","web":{"star t":"0","count":"3","totalresults":"247796706","res ults":[{"date":"2011\/06\/26","clickurl":"http:\/\/es.wikipedia.org\/wiki\/IPhone","url":"http:\/\/es.wikipedia.org\/wiki\/IPhone","dispurl":"es.wikipedia.org<\/b>\/wiki\/IPhone<\/b>","title":"iPhone<\/b> - Wikipedia, la enciclopedia libre","abstract":"iPhone<\/b> es una familia de teléfonos inteligentes multimedia con conexión a ...<\/b> El iPhone<\/b> 3GS dispone de una cámara de fotos de 3 megapixeles y un reproductor ...<\/b>"},{"date":"2011\/06\/17","clickurl":"http:\/\/www.apple.com\/es\/iphone\/","url":"http:\/\/www.apple.com\/es\/iphone\/","dispurl":"www.apple.com<\/b>\/es\/iphone<\/b>","title":"Apple - iPhone<\/b> - Teléfono móvil, iPod y dispositivo de acceso ...<\/b>","abstract":"iPhone<\/b> 4 es un teléfono móvil GSM y también un iPod, una videocámara y un dispositivo de acceso a Internet con correo electrónico, GPS y mapas."},{"date":"2011\/06\/30","clickurl":"http:\/\/www.iphone.movistar.es\/","url":"http:\/\/www.iphone.movistar.es\/","dispurl":"www.iphone.movistar.es<\/b>","title":"Iphone<\/b>","abstract":"Movistar te trae el iPhone<\/b> 4 de Apple. Resérvalo ya. ...<\/b> Tarifa Plana iPhone<\/b> Premium. 39 €\/mes. Consumo mínimo Voz. 9 €\/mes. ver tarifas. 19,90 €\/mes ...<\/b>"}]}}}1

VARIABLES:
QUERY : iphone
FORMAT : json
MARKET : es-es
COUNT : 3

CONSUMER : OAuthConsumer[key=djXXXXw,secret=0bXXXXXXX8e259d]

REQUEST : http://yboss.yahooapis.com/ysearch/w...n=1.0&q=iphone

URL : http://yboss.yahooapis.com/ysearch/w...es-es&q=iphone



TRYING SHOW RESULTS:

NO RESULTS-> EMPTY <-
----------------
  #7 (permalink)  
Antiguo 01/07/2011, 12:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Obtener datos de JSON

Aquí tienes un problema.

Para que la función curl_exec() devuelva el resultado del request debes agregar la opción CURLOPT_RETURNTRANSFER a la conexión cURL.

Pero como no lo haces, imprime el JSON, y por lo tanto no lo devuelve, por ende no funciona tu posterior código.

Intenta agregar dicha opción.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 04/07/2011, 13:50
 
Fecha de Ingreso: marzo-2009
Mensajes: 62
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Obtener datos de JSON

Muchas gracias por responder pateketrueke

entonces el código quedaría asi??:


Código PHP:
<?php
  
require("OAuth.php");  
   
   
$cc_key  "dj0yJxxxxxxxxxPTAw";  
$cc_secret "0xxxxxxxxxd";  
$url "http://yboss.yahooapis.com/ysearch/web";  
$args = array();  
$args["q"] = "MOZILLA";  
$args["format"] = "json";  
$args["market"] = "es-es";
$args["count"]=3;
   
$consumer = new OAuthConsumer($cc_key$cc_secret);  
$request OAuthRequest::from_consumer_and_token($consumerNULL,"GET"$url$args);  
$request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumerNULL);  
$url sprintf("%s?%s"$urlOAuthUtil::build_http_query($args));  
$ch curl_init();  
$headers = array($request->to_header());  
curl_setopt($chCURLOPT_HTTPHEADER$headers);  
curl_setopt($chCURLOPT_HEADER1);  
curl_setopt($chCURLOPT_URL$url);  
curl_setopt($ch,CURLOPT_RETURNTRANSFER); //AGREGADO ESTO??
$rsp curl_exec($ch);  
$results json_decode($rsp);  
echo 
$results;      



// OUTPUTS
echo "</br></br>VARIABLES: </br>";


echo 
"QUERY : ".$args["q"] ."</br>";
echo 
"FORMAT : ".$args["format"] ."</br>";
echo 
"MARKET : ".$args["market"] ."</br>";
echo 
"COUNT : ".$args["count"] ."</br></br>";

//echo "CONSUMER : ".$consumer ."</br></br>";
//echo "REQUEST : ".$request ."</br></br>";
echo "URL : ".$url ."</br></br>";

echo 
"</br></br>TRYING SHOW RESULTS:</br></br>";

    echo 
$results["bossresponse"]["responsecode"]["results"][0]["title"][0]; //Title
    
echo $results["bossresponse"]["responsecode"]["results"][0]["clickurl"][0]; // Click URL
    
echo $results["bossresponse"]["responsecode"]["results"][0]["abstract"][0]; // Result
    
 
echo $results->bossresponse->responsecode->results[0]->title[0];  
 echo 
$results->bossresponse->responsecode->results[1]->title[1]; 
 echo 
$results->bossresponse->responsecode->web->results[1]->title[1];
 
 echo 
$results->responsecode->web->results[1]->title[1];
 echo 
$results->bossresponse->web->results[1]->title[1];
 
 
 
 echo 
$results->bossresponse->responsecode->results[0]->title;
echo 
$results->bossresponse->responsecode->results[1]->title;
 
 
 
 
 echo 
$results->title[1];



    
?>
  #9 (permalink)  
Antiguo 04/07/2011, 14:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Obtener datos de JSON

Si, así esta bien. ¿Muestra algo?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 04/07/2011, 15:40
 
Fecha de Ingreso: marzo-2009
Mensajes: 62
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Obtener datos de JSON

Lo he intentado pero nada :S
  #11 (permalink)  
Antiguo 04/07/2011, 16:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Obtener datos de JSON

¿Pero no muestra nada por pantalla o si?

Sería bueno mostrarnos lo último que observas con los cambios del script, ¿no te parece inteligente de tu parte?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 05/07/2011, 04:22
 
Fecha de Ingreso: marzo-2009
Mensajes: 62
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Obtener datos de JSON

Sigue mostrando exactamente lo mismo :S
  #13 (permalink)  
Antiguo 05/07/2011, 08:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Obtener datos de JSON

Vamos a empezar de nuevo, ¿vale?
Código PHP:
    <?php  
    
require("OAuth.php");  
       
    
$cc_key  "your consumer key here";  
    
$cc_secret "your consumer secret here";  
    
$url "http://yboss.yahooapis.com/ysearch/news,web,images";  
    
$args = array();  
    
$args["q"] = "yahoo";  
    
$args["format"] = "json";  
       
    
$consumer = new OAuthConsumer($cc_key$cc_secret);  
    
$request OAuthRequest::from_consumer_and_token($consumerNULL,"GET"$url$args);  
    
$request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumerNULL);  
    
$url sprintf("%s?%s"$urlOAuthUtil::build_http_query($args));  
    
$ch curl_init();  
    
$headers = array($request->to_header());  
    
curl_setopt($chCURLOPT_HTTPHEADER$headers);  
    
curl_setopt($ch,CURLOPT_RETURNTRANSFER); 
    
curl_setopt($chCURLOPT_HEADER1);  
    
curl_setopt($chCURLOPT_URL$url);  
    
$rsp curl_exec($ch);  
    
$results json_decode($rsp);  

echo 
'<pre>';
print_r($results);
echo 
'</pre>';
    
?>
Ejecuta tu código así y muestranos lo que resulta.

No olvides colocar lo que haga falta, solo tu sabes.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 05/07/2011, 11:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Obtener datos de JSON

También definir RETURNTRANSFER como true:
Código PHP:
Ver original
  1. curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1 /* o true */);
  #15 (permalink)  
Antiguo 06/07/2011, 05:10
 
Fecha de Ingreso: junio-2011
Mensajes: 4
Antigüedad: 13 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Obtener datos de JSON

Al fin alguien de Y! se digno a responderme...

La solución:

Código PHP:
$headers = array($request->to_header());
curl_setopt($chCURLOPT_HTTPHEADER$headers);
curl_setopt($chCURLOPT_URL$url);
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
$rsp curl_exec($ch);
$results json_decode($rsp);


$y 1;
// here is parsing the output
foreach($results->bossresponse->web->results as $result) {
echo 
$result->clickurl."<br>";
echo 
$result->title."<br>";
echo 
$result->abstract."<br>";

Les estoy muy agradecido a ustedes por ayudarme también con esto que es muy importante para mi proyecto.

Quisiera agradecerles publicamente en los canales sociales de mi proyecto, envienme por favor un MP con sus twitter o FB para referenciarlos.

Muchas gracias.

Etiquetas: api, json, search
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:05.