Pregunta

He estado usando la API de Google Finanzas para reunir información con éxito algunas de valores. El problema es que después de una llamada a http://www.google.com/finance/info?infotype=infoquoteall&q=[$tickerSymbol], el JSON de esa búsqueda ha añadido // antes y por lo tanto la cadena no puede ser codificado usando json_encode() de PHP. confirma la JSONLint JSON Validador que los //s no son válidos. La solución obvia es despojar las barras desde el principio de la JSON. Ninguno de los de menos, me dejó pensando por qué Google es la adición de barras a la JSON que está regresando. ¿Hay un propósito detrás de las barras adicionales? ¿Es esta una peculiaridad con json_encode() de PHP cuando otros idiomas serían simplemente ignorar los caracteres adicionales? ¿Estoy haciendo algo mal?

Este es un ejemplo del resultado de una solicitud de http://www.google.com/finance/info?infotype=infoquoteall&q=AAPL con las barras al principio.

// [ {
"id": "22144"
,"t" : "AAPL"
,"e" : "NASDAQ"
,"l" : "340.65"
,"l_cur" : "340.65"
,"ltt":"4:00PM EST"
,"lt" : "Jan 18, 4:00PM EST"
,"c" : "-7.83"
,"cp" : "-2.25"
,"ccol" : "chr"
,"el": "345.20"
,"el_cur": "345.20"
,"elt" : "Jan 18, 5:45PM EST"
,"ec" : "+4.55"
,"ecp" : "1.34"
,"eccol" : "chg"
,"div" : ""
,"yld" : ""
,"eo" : ""
,"delay": ""
,"op" : "327.05"
,"hi" : "344.76"
,"lo" : "326.00"
,"vo" : "66.34M"
,"avvo" : "11.28M"
,"hi52" : "348.48"
,"lo52" : "190.25"
,"mc" : "313.75B"
,"pe" : "22.49"
,"fwpe" : ""
,"beta" : "1.38"
,"eps" : "15.15"
,"name" : "Apple Inc."
,"type" : "Company"
}
]
¿Fue útil?

Solución

Para aquellos que buscan una respuesta preparada, aquí es un ejemplo de trabajo con PHP; El JSON se limpia y se transforma en un objeto. Los valores pueden ser fácilmente extraídos.

El segundo es sólo para hacerlo más impresionante, se envía un mensaje de inserción que un canal PubNub cuando se accede a la página (cron es su amigo). PubNub mensaje puede ser fácilmente recibido a través de JavaScript, por tanto, vivo ...

<?php

  //Obtain Quote Info
  $quote = file_get_contents('http://finance.google.com/finance/info?client=ig&q=INDEXDB:DAX');

  //Remove CR's from ouput - make it one line
    $json = str_replace("\n", "", $quote);

  //Remove //, [ and ] to build qualified string  
    $data = substr($json, 4, strlen($json) -5);

  //decode JSON data
    $json_output = json_decode(utf8_decode($data));

  // get the last price
    $last = $json_output->l;

  //Output Stock price .
  echo 'DAX: ' . $last; 


//////////////////////////////
//  send it through pubnub  //
//////////////////////////////

require_once('Pubnub.php');

// Publish and Subscribe Keys 
$publish_key   = 'demo';
$subscribe_key = 'demo';
$subscribe_key = false;

// Create Pubnub Object
$pubnub = new Pubnub( $publish_key, $subscribe_key, $secret_key );

// Publish !
$channel = 'quoteTheDax';

$timestamp = $pubnub->time();
$pubish_success = $pubnub->publish(array(
    'channel' => $channel,
    'message' => array("last" => $last2, "ts" => $timestamp)
));

//Boom its send to ppl subscribed to this channel arround the world
?>

Por supuesto, si se necesita algo de actualización en vivo todo el tiempo que hay mejores opciones. Estaba buscando para actualizar cada 30 minutos / 60 minutos.

Otros consejos

supongo que es porque Google no te quiero trabajar con JSON que, se recomienda utilizar la API de datos de Google.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top