Лидирующая косая черта в JSON из вызова Google Finance API - PullRequest
5 голосов
/ 19 января 2011

Я использую Google Finance API для успешного сбора некоторой информации об акциях. Проблема заключается в том, что после вызова http://www.google.com/finance/info?infotype=infoquoteall&q=[$tickerSymbol] в JSON, который возвращает Google, добавляется // перед ним, и поэтому строку нельзя закодировать с использованием PHP json_encode(). JSONLint JSON Validator подтверждает, что // недопустимы. Очевидный обходной путь - убрать косые черты с начала JSON. Тем не менее, мне остается удивляться, почему Google добавляет косые черты в JSON, который он возвращает. Есть ли цель за дополнительными слешами? Это странная вещь с PHP json_encode(), когда другие языки просто игнорируют дополнительные символы? Я что-то делаю неправильно?

Вот пример результата запроса для http://www.google.com/finance/info?infotype=infoquoteall&q=AAPL с начальными слешами.

// [ {
"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"
}
]

Ответы [ 2 ]

5 голосов
/ 29 марта 2012

Для тех, кто ищет готовый ответ, вот рабочий пример с PHP;JSON очищается и превращается в объект.Значения могут быть легко извлечены.

Во-вторых, просто чтобы сделать его более удивительным, он отправляет push-сообщение вам на канал PubNub при доступе к странице (cron - ваш друг).Сообщение PubNub может быть легко получено через javascript, следовательно, в режиме реального времени ...

<?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
?>

конечно, если вам нужно что-то живое обновление все время, есть лучшие варианты.Я просто искал обновления каждые 30 минут / 60 минут.

2 голосов
/ 19 января 2011

Я думаю, это потому, что Google не хочет, чтобы вы работали с этим JSON, они рекомендуют использовать API данных Google.

...