2011-01-18 11 views
5

Google Finance APIを使用していくつかの株価情報を収集しています。問題は、http://www.google.com/finance/info?infotype=infoquoteall&q=[$tickerSymbol]を呼び出した後、Googleが返すJSONには//が追加されているため、PHPのjson_encode()を使用して文字列をエンコードできないことです。 JSONLint JSON Validatorは、//が無効であることを確認します。明らかな回避策は、JSONの先頭からスラッシュを取り除くことです。それほど多くはありませんが、私はなぜGoogleがJSONにスラッシュを追加しているのか不思議に思っています。余分なスラッシュの後ろに目的はありますか?これはPHPのjson_encode()で他の言語が単に余分な文字を無視するような奇妙なものでしょうか?間違って何かしていますか?Google Finance APIコールからJSONの先行スラッシュ

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" 
} 
] 
+0

私もこれに遭遇しましたが、今まで何が起きているのか分かりません。私が気づいた唯一の事は、あなたが実際の会社を提供しているときにスラッシュを追加するように見えるということです(特定の会社が見つからなければ、検索結果の束とは対照的です)。非常に奇妙な。 –

+0

+1。同じことを経験し、私の人生のためには、なぜ彼らは応答に無効な文字を追加するのか理解できません。私はそれがセキュリティとは何かを持っていると推測していますが、これに関するドキュメントは見つかりません。 – dbau

答えて

5

準備ができている回答をお探しの方は、ここではPHPの使用例を示します。 JSONがクリーンアップされ、オブジェクトに変換されます。値は簡単に抽出できます。

2つ目はもっと素晴らしいことです。ページにアクセスすると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

私はあなたがそのJSONで作業したくないので、Google Data APIを使用することをおすすめします。

+1

その理由は何ですか?もし彼らがJSONを操作したくなければ、JSONをブロックするだけのようだ。 –

+1

もちろん:私はJSONの使用についてのドキュメントを見つけることができません。しかし、JS-API-docsの例では、以下のように見ることができます。*データの基になる表現はJSONですが、クライアントライブラリは抽象レイヤーを提供するので、JSONデータを直接操作する必要はありません。 –

関連する問題