[Php-avanzado] consulta cURL

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Mie Jun 5 14:16:42 ART 2013


Hola Cesar,

	Para probar, puse en un string la respuesta del servidor cuando llama a
la API:

<?php
$json =
'{"meta":{"code":200,"errorType":"deprecated","errorDetail":"Please
provide an API version to avoid future errors.See http:\/\/bit.ly
\/vywCav"},"response":{"tips":{"count":10,"items":[{"id":"514e78f4e4b025094e579032","createdAt":1364097268,"text":"Buenos precios y tienen Grog XD","canonicalUrl":"https:\/\/foursquare.com\/item\/514e78f4e4b025094e579032","likes":{"count":1,"groups":[{"type":"others","count":1,"items":[{"id":"531471","firstName":"Pol","lastName":"N.","gender":"male","photo":"https:\/\/is1.4sqi.net\/userpix_thumbs\/LTCBI4MF0TEICJSF.jpg","tips":{"count":7},"homeCity":"Buenos Aires, Argentina","bio":"Para papá banana a las brasas.","contact":{}}]}],"summary":"1 me gusta"},"todo":{"count":0},"done":{"count":1},"user":{"id":"11719940","firstName":"Varda","lastName":"E.","gender":"female","photo":"https:\/\/is0.4sqi.net\/userpix_thumbs\/KW0IIDQCRNDHDEUF.jpg","tips":{"count":27},"lists":{"groups":[{"type":"created","count":1,"items":[]}]},"homeCity":"Mar del Plata, Argentina","bio":"Geek, gamer, Blogger, Time Lady, Dark Lady of the Sith, Reina de las Estrellas, fan de Tolkien y de los juegos de rol!","contact":{}}},{"id":"510f4cbde4b07546a703c086","createdAt":1359957181,"text":"Muy recomendable buen ambiente, la onda del lugar tipo hawaiano como sirven los tragos y los precios normales","canonicalUrl":"https:\/\/foursquare.com\/item\/510f4cbde4b07546a703c086","likes":{"count":0,"groups":[]},"todo":{"count":0},"done":{"count":1},"user":{"id":"38697783","firstName":"Lucas","lastName":"M.","gender":"male","photo":"https:\/\/is1.4sqi.net\/userpix_thumbs\/K4OBOQYCUXY0A1OB.jpg","tips":{"count":11},"homeCity":"Ciudad de Buenos Aires","bio":"","contact":{}}}]}}}';

$v = json_decode($json,true);

print("<pre>");
print_r($v);
print("</pre>");
?>


	y el resultado es lo que se espera:


Array
(
    [meta] => Array
        (
            [code] => 200
            [errorType] => deprecated
            [errorDetail] => Please provide an API version to avoid
future errors.See http://bit.ly/vywCav
        )

    [response] => Array
        (
            [tips] => Array
                (
                    [count] => 10
                    [items] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 514e78f4e4b025094e579032
                                    [createdAt] => 1364097268
                                    [text] => Buenos precios y tienen
Grog XD
                                    [canonicalUrl] =>
https://foursquare.com/item/514e78f4e4b025094e579032
                                    [likes] => Array
                                        (
                                            [count] => 1
                                            [groups] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [type] =>
others
                                                            [count] => 1
                                                            [items] =>
Array
                                                                (
                                                                    [0]
=> Array

(

[id] => 531471

[firstName] => Pol

[lastName] => N.

[gender] => male

[photo] => https://is1.4sqi.net/userpix_thumbs/LTCBI4MF0TEICJSF.jpg

[tips] => Array

(

[count] => 7

)


[homeCity] => Buenos Aires, Argentina

[bio] => Para papá banana a las brasas.

[contact] => Array

(

)


)

                                                                )

                                                        )

                                                )

                                            [summary] => 1 me gusta
                                        )

                                    [todo] => Array
                                        (
                                            [count] => 0
                                        )

                                    [done] => Array
                                        (
                                            [count] => 1
                                        )

                                    [user] => Array
                                        (
                                            [id] => 11719940
                                            [firstName] => Varda
                                            [lastName] => E.
                                            [gender] => female
                                            [photo] =>
https://is0.4sqi.net/userpix_thumbs/KW0IIDQCRNDHDEUF.jpg
                                            [tips] => Array
                                                (
                                                    [count] => 27
                                                )

                                            [lists] => Array
                                                (
                                                    [groups] => Array
                                                        (
                                                            [0] => Array
                                                                (

[type] => created

[count] => 1

[items] => Array

(

)

                                                                )

                                                        )

                                                )

                                            [homeCity] => Mar del Plata,
Argentina
                                            [bio] => Geek, gamer,
Blogger, Time Lady, Dark Lady of the Sith, Reina de las Estrellas, fan
de Tolkien y de los juegos de rol!
                                            [contact] => Array
                                                (
                                                )

                                        )

                                )

                            [1] => Array
                                (
                                    [id] => 510f4cbde4b07546a703c086
                                    [createdAt] => 1359957181
                                    [text] => Muy recomendable buen
ambiente, la onda del lugar tipo hawaiano como sirven los tragos y los
precios normales
                                    [canonicalUrl] =>
https://foursquare.com/item/510f4cbde4b07546a703c086
                                    [likes] => Array
                                        (
                                            [count] => 0
                                            [groups] => Array
                                                (
                                                )

                                        )

                                    [todo] => Array
                                        (
                                            [count] => 0
                                        )

                                    [done] => Array
                                        (
                                            [count] => 1
                                        )

                                    [user] => Array
                                        (
                                            [id] => 38697783
                                            [firstName] => Lucas
                                            [lastName] => M.
                                            [gender] => male
                                            [photo] =>
https://is1.4sqi.net/userpix_thumbs/K4OBOQYCUXY0A1OB.jpg
                                            [tips] => Array
                                                (
                                                    [count] => 11
                                                )

                                            [homeCity] => Ciudad de
Buenos Aires
                                            [bio] => 
                                            [contact] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

)



El mié, 05-06-2013 a las 13:33 -0300, Cesar Gimenez Lascano escribió:
> Esta es la URL con la que me estoy comunicando con la api por si
> quieren hacer algun test (incluye mis api keys), si la pongo en el
> navegador se imprimen los datos recibidos en json. Gracias!
> 
> 
> https://api.foursquare.com/v2/venues/4ee6d4ed775ba356e007bb76/tips?sort=recent&limit=2&client_id=315YX0EUHY5VW5SFVCPIBMMVYTSNCXNML20AHEEDL1Q2TMEE&client_secret=HOJHGWETZPZYXLS2NYSPMUO0A4WO2UQCUHVWEAXQWAOWROZ2
> 
> 
> 
> El 5 de junio de 2013 10:05, Cesar Gimenez Lascano
> <cesargimenezlascano en gmail.com> escribió:
>         Gracias. me sigue imprimiendo NULL, me estará faltando algo
>         mas?
>         
>         
>         El 4 de junio de 2013 20:18, Matias Gea <matigea en gmail.com>
>         escribió:
>         
>                 Te falta un parámetro de json decode:
>                 
>                 
>                 json_decode($contents, true);
>                 
>                 
>                 Sino te devuelve un objeto, en vez de un array.
>                 
>                 
>                 Saludos!
>                 
>                 
>                 
>                 
>                 El 4 de junio de 2013 20:08, Cesar Gimenez Lascano
>                 <cesargimenezlascano en gmail.com> escribió:
>                 
>                         Lo estoy probando pero me devuelve NULL, el
>                         código:
>                         
>                         
>                         <?php
>                                 $ch = curl_init();
>                         curl_setopt($ch, CURLOPT_URL,
>                         'https://api.foursquare.com/v2/venues/VENUE_ID/tips');
>                         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
>                         $contents = curl_exec ($ch);
>                         $result = json_decode($contents);
>                         print($result['response']['tips']['text']);
>                         var_dump($result);
>                         curl_close ($ch);       
>                         ?>
>                         
>                         
>                         El 4 de junio de 2013 19:20, Matias Gea
>                         <matigea en gmail.com> escribió:
>                         
>                                 La respuesta parece json standard.
>                                 Hacé algo así:
>                                 
>                                 
>                                 $arr = json_decode($respuesta,true);
>                                 
>                                 
>                                 te va a devolver un array asociativo
>                                 en $arr, después, para ver el valor
>                                 hacés $arr['response']['tips']['text']
>                                 
>                                 
>                                 Avisanos como fue.
>                                 
>                                 
>                                 Saludos!
>                                 
>                                 
>                                 El 4 de junio de 2013 19:02, Cesar
>                                 Gimenez Lascano
>                                 <cesargimenezlascano en gmail.com>
>                                 escribió:
>                                 
>                                         me puse a probar con curl, en
>                                         el curso habíamos visto que es
>                                         un programa externo, pero
>                                         existe una biblioteca php tmb
>                                         no? me podrían dar una mano
>                                         para recuperar los datos de la
>                                         api con curl y lo que mas se
>                                         me complico, guardar el dato
>                                         "text" de la respuesta que es
>                                         una matriz. Gracias!!
>                                         
>                                         
>                                         URL: 
>                                         https://api.foursquare.com/v2/venues/VENUE_ID/tips
>                                         
>                                         
>                                         
>                                         formato de la respuesta:
>                                         
>                                         
>                                         {
>                                         
>                                         response: {
>                                               * tips: {
>                                                       * count: 305
>                                                       * items: [
>                                                               * {
>                                                                       * id: "51a762a4498e136ef3a77f2b"
>                                                                       * createdAt: 1369924260
>                                                                       * text: "I don't care if you get the beloved blueberry pancakes or not, but the must have here is the SUGAR-CURED BACON!"
>                                                                       * canonicalUrl: "https://foursquare.com/item/51a762a4498e136ef3a77f2b"
>                                                                       * likes: {
>                                                                               * count: 0
>                                                                               * groups: [ ]
>                                                                         }
>                                                                       * like: false
>                                                                       * todo: {
>                                                                               * count: 0
>                                                                         }
>                                                                       * user: {
>                                                                               * id: "13722555"
>                                                                               * firstName: "Mehmetali"
>                                                                               * lastName: "Y."
>                                                                               * gender: "male"
>                                                                               * photo: {
>                                                                                       * prefix: "https://irs3.4sqi.net/img/user/"
>                                                                                       * suffix: "/DJUPSJ43K1EJ4ZHF.jpg"
>                                                                                 }
>                                                                         }
>                                                                 }
>                                         
>                                         
>                                         El 4 de junio de 2013 16:12,
>                                         Cesar Gimenez Lascano
>                                         <cesargimenezlascano en gmail.com> escribió:
>                                                 Gracias Matias x toda
>                                                 la info!! creo lo
>                                                 mejor sera llamar a
>                                                 las apis con CURL
>                                                 desde el lado del
>                                                 servidor. Es
>                                                 importante lo que
>                                                 decís que hay que
>                                                 tratar de no depender
>                                                 de servicios externos
>                                                 y no es un buen uso de
>                                                 AJAX el que estaba
>                                                 haciendo como dijo
>                                                 Leo. Veremos como sale
>                                                 todo el sábado, dps te
>                                                 comento, saludo grande
>                                                 y gracias x la ayuda y
>                                                 el tiempo!!!
>                                                 
>                                                 
>                                                 El 4 de junio de 2013
>                                                 08:55, Matias Gea
>                                                 <matigea en gmail.com>
>                                                 escribió:
>                                                 
>                                                         Buenas!
>                                                         
>                                                         
>                                                         Exactamente a
>                                                         eso me
>                                                         refería. A
>                                                         pasar al
>                                                         server parte
>                                                         del proceso
>                                                         que ahora hace
>                                                         el cliente
>                                                         (algunas de
>                                                         las
>                                                         peticiones).
>                                                         Se puede
>                                                         llamar a las
>                                                         api fácilmente
>                                                         con curl o
>                                                         directamente
>                                                         file_get_contents o fopen.
>                                                         
>                                                         
>                                                         Igualmente
>                                                         conozco el
>                                                         paño y sé que
>                                                         algunas de las
>                                                         apis son
>                                                         bastante
>                                                         limitadas.
>                                                         
>                                                         
>                                                         Si hacés las
>                                                         peticiones
>                                                         desde el
>                                                         server, es
>                                                         necesario
>                                                         hacer caché.
>                                                         Uno de los
>                                                         parámetros que
>                                                         utilizan las
>                                                         apis para
>                                                         identificar el
>                                                         cliente es la
>                                                         ip (en
>                                                         especial las
>                                                         api que no
>                                                         requieren api
>                                                         key). Si hacés
>                                                         muchas
>                                                         peticiones
>                                                         desde la misma
>                                                         ip en un
>                                                         período corto
>                                                         de tiempo, te
>                                                         banean. Por
>                                                         ejemplo, si
>                                                         una api tiene
>                                                         un máximo de
>                                                         100 peticiones
>                                                         por hora por
>                                                         ip, si no
>                                                         cacheas y te
>                                                         entran 110
>                                                         clientes al
>                                                         sitio, te
>                                                         bloquean la
>                                                         api.
>                                                         
>                                                         
>                                                         Por esto
>                                                         también a
>                                                         veces es una
>                                                         buena opción
>                                                         que el haga la
>                                                         petición sea
>                                                         el cliente, te
>                                                         evitás los
>                                                         límites de
>                                                         algunas api,
>                                                         pero a costa
>                                                         de hacer
>                                                         muchas más
>                                                         peticiones y
>                                                         depender de la
>                                                         estabilidad de
>                                                         servicios
>                                                         externos
>                                                         (algunas apis,
>                                                         como la de
>                                                         facebook o
>                                                         twitter,
>                                                         pueden hacer
>                                                         que tu página
>                                                         cargue hasta
>                                                         10 segundos
>                                                         más tarde, lo
>                                                         que rompe
>                                                         estadísticas,
>                                                         experiencia de
>                                                         usuario,
>                                                         etc.).
>                                                         
>                                                         
>                                                         Por eso es un
>                                                         caso a
>                                                         analizar, para
>                                                         no perder
>                                                         funcionalidad,
>                                                         pero maximizar
>                                                         la experiencia
>                                                         de usuario y
>                                                         recursos.
>                                                         
>                                                         
>                                                         Saludos!
>                                                         
>                                                         
>                                                         PD: Quiero
>                                                         saber que
>                                                         resuelven el
>                                                         sábado!
>                                                         
>                                                         
>                                                         
>                                                         
>                                                         
>                                                         
>                                                         El 3 de junio
>                                                         de 2013 16:04,
>                                                         Cesar Gimenez
>                                                         Lascano
>                                                         <cesargimenezlascano en gmail.com> escribió:
>                                                         
>                                                                 Gracias Leo! voy a repensar algunas cosas y seguimos dialogando el sábado. Gracias x el tiempo, nos vemos!!
>                                                                 
>                                                                 
>                                                                 El 3
>                                                                 de
>                                                                 junio
>                                                                 de
>                                                                 2013
>                                                                 15:49,
>                                                                 Leonardo Tadei - Pegasus Tech Supply <leonardot en pegasusnet.com.ar> escribió:
>                                                                 
>                                                                         Hola Cesar,
>                                                                         
>                                                                         
>                                                                         si los datos se actualizan frecuentemente, no veo en tu código cómo se
>                                                                         cargan más de una vez luego de cargada la página.
>                                                                         
>                                                                         La llamada AJAX tiene sentido para recargar una parte de la página,
>                                                                         pero acá no hay un timer ni nada (o no lo veo) que haga que se recarguen
>                                                                         las cosas.
>                                                                         
>                                                                         No conozco la interfaz, pero por el código parece que hay botones con
>                                                                         cada categoría (alojamientos, bares, restaurantes, comercios y puntos de
>                                                                         interés) y que al clickear cada botón, mostrar esa categoría y dejás de
>                                                                         mostrar las otras.
>                                                                         
>                                                                         Al no recargarse automáticamente y al no mostrarse más de una capa a la
>                                                                         vez, la aproximación KISS sería tener una página para cada cosa y que
>                                                                         directamente se cargue la que corresponde.
>                                                                         
>                                                                         Luego en cada página ejecutás en PHP lo que sea que haga
>                                                                         json/cargarAloj.php
>                                                                         json/cargarBares.php
>                                                                         etc
>                                                                         
>                                                                         y generás por ejemplo un vector JS con los datos; en el cliente solo te
>                                                                         encargás de mostrar esos puntos.
>                                                                         
>                                                                         
>                                                                         Esto es a lo que apuntaba Matías: podrías hacer lo mismo sin usar par
>                                                                         nada AJAX y no pelearte con la race-condition que se te está generado.
>                                                                         
>                                                                         
>                                                                         Por otra parte, posiblemente debas hacer que los:
>                                                                         json/cargarAloj.php
>                                                                         json/cargarBares.php
>                                                                         etc
>                                                                         
>                                                                         guarden la respuesta y vayan a buscar cosas nuevas solo cada X minutos,
>                                                                         para no saturar la API con peticiones (y que te echen a patadas)
>                                                                         
>                                                                         
>                                                                         Supongo que como la cosa pasó de sintaxis a cuestiones del planteo del
>                                                                         algoritmo, las veremos el sábado que viene cuando te des una vuela por
>                                                                         el curso.
>                                                                         
>                                                                         
>                                                                         Saludos cordiales!
>                                                                         
>                                                                         
>                                                                         
>                                                                         El lun, 03-06-2013 a las 13:47 -0300, Cesar Gimenez Lascano escribió:
>                                                                         > Volviendo al código, si sugerís que caRgue los datos de las dos
>                                                                         > llamadas remotas (foursquare, twitter) a la BD, estos datos se
>                                                                         > actualizan frecuentemente, tmb para obtenerlos utilizo las ids
>                                                                         > guardadas en mi BD, no veo como podría hacerlo de esa forma....
>                                                                         > saludos y gracias!!!
>                                                                         >
>                                                                         >
>                                                                         > El 3 de junio de 2013 13:40, Cesar Gimenez Lascano
>                                                                         > <cesargimenezlascano en gmail.com> escribió:
>                                                                         >         Uh! perdón a mi por el error de tipeo!! creo que me traiciono
>                                                                         >         el subconciente porque esta implementacion se me complico
>                                                                         >         bastante....disculpas...
>                                                                         >
>                                                                         >
>                                                                         >         El 3 de junio de 2013 12:37, Leonardo Tadei - Pegasus Tech
>                                                                         >         Supply <leonardot en pegasusnet.com.ar> escribió:
>                                                                         >
>                                                                         >                 Hola Cesar,
>                                                                         >
>                                                                         >                         perdón por el error de tipeo.
>                                                                         >                         Debería decir "devolverlo ya caRgado desde el
>                                                                         >                 servidor"
>                                                                         >
>                                                                         >                         Salu2
>                                                                         >
>                                                                         >
>                                                                         >                 El dom, 02-06-2013 a las 11:28 -0300, Cesar Gimenez
>                                                                         >                 Lascano escribió:
>                                                                         >                 > Gracias Leo! disculpame, a que te referís con
>                                                                         >                 "devolverlo ya cagado
>                                                                         >                 > desde el servidor"? a guardar los datos recibidos de
>                                                                         >                 las llamadas a
>                                                                         >                 > las apis en la base de datos? gracias x la ayuda.
>                                                                         >                 saludos!!
>                                                                         >                 >
>                                                                         >                 >
>                                                                         >                 > El 1 de junio de 2013 19:15, Leonardo Tadei -
>                                                                         >                 Pegasus Tech Supply
>                                                                         >                 > <leonardot en pegasusnet.com.ar> escribió:
>                                                                         >                 >         Cesar:
>                                                                         >                 >
>                                                                         >                 >                 Quiero volver a una cuestión que
>                                                                         >                 Matías platea muy
>                                                                         >                 >         correctamente: no
>                                                                         >                 >         tiene sentido hacer varias llamadas AJAX en
>                                                                         >                 un bucle, porque
>                                                                         >                 >         si te hace
>                                                                         >                 >         falta todo esto, devolvelo ya cargado desde
>                                                                         >                 el servidor y
>                                                                         >                 >         listo!
>                                                                         >                 >                 Más allá del problema de sintaxis
>                                                                         >                 que haya, no es un
>                                                                         >                 >         uso razonable de
>                                                                         >                 >         AJAX, ya que es más lento todo esto que
>                                                                         >                 cargar los valores
>                                                                         >                 >         desde el
>                                                                         >                 >         principio.
>                                                                         >                 >
>                                                                         >                 >                 Acordate del "principio de
>                                                                         >                 programación KISS" !!!
>                                                                         >                 >
>                                                                         
>                                                                         
>                                                                         
>                                                                         
>                                                                         --
>                                                                         Leonardo Tadei
>                                                                         leonardot en pegasusnet.com.ar
>                                                                         Web: http://leonardo.tadei.com.ar
>                                                                         Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
>                                                                         
>                                                                         _______________________________________________
>                                                                         Php-avanzado mailing list
>                                                                         Php-avanzado en pato2.fi.mdp.edu.ar
>                                                                         http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                                                                         
>                                                                 
>                                                                 
>                                                                 
>                                                                 _______________________________________________
>                                                                 Php-avanzado mailing list
>                                                                 Php-avanzado en pato2.fi.mdp.edu.ar
>                                                                 http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                                                         
>                                                         
>                                                         
>                                                         
>                                                         -- 
>                                                         Matias
>                                                         Fernando Gea
>                                                         matigea en gmail.com
>                                                         http://www.mfgea.com.ar
>                                                         
>                                                         _______________________________________________
>                                                         Php-avanzado
>                                                         mailing list
>                                                         Php-avanzado en pato2.fi.mdp.edu.ar
>                                                         http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                                                 
>                                                 
>                                         
>                                         
>                                         
>                                         _______________________________________________
>                                         Php-avanzado mailing list
>                                         Php-avanzado en pato2.fi.mdp.edu.ar
>                                         http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                                 
>                                 
>                                 
>                                 
>                                 -- 
>                                 Matias Fernando Gea
>                                 matigea en gmail.com
>                                 http://www.mfgea.com.ar
>                                 
>                                 _______________________________________________
>                                 Php-avanzado mailing list
>                                 Php-avanzado en pato2.fi.mdp.edu.ar
>                                 http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                         
>                         
>                         
>                         _______________________________________________
>                         Php-avanzado mailing list
>                         Php-avanzado en pato2.fi.mdp.edu.ar
>                         http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                 
>                 
>                 
>                 
>                 -- 
>                 Matias Fernando Gea
>                 matigea en gmail.com
>                 http://www.mfgea.com.ar
>                 
>                 _______________________________________________
>                 Php-avanzado mailing list
>                 Php-avanzado en pato2.fi.mdp.edu.ar
>                 http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>         
>         
> 
> 
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado

-- 
Leonardo Tadei
leonardot en pegasusnet.com.ar
Web: http://leonardo.tadei.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado