2016-08-11 20 views
0

Google Finance APIからSTOCK情報を取得するJavaScriptアプリケーションを構築しています。Google Finance JSON返信はChrome、Firefoxでは機能しませんがIE 11で動作します

私は、ブラウザでリンクをコピー&ペーストした場合finance.google.com/finance/info?q=nasdaq:AAPL

が、その後私はヤフーファイナンスを試してみました正しく

// [ { "id": "22144" ,"t" : "AAPL" ,"e" : "NASDAQ" ,"l" : "108.51" ,"l_fix" : "108.51" ,"l_cur" : "108.51" ,"s": "0" ,"ltt":"10:48AM EDT" ,"lt" : "Aug 11, 10:48AM EDT" ,"lt_dts" : "2016-08-11T10:48:42Z" ,"c" : "+0.51" ,"c_fix" : "0.51" ,"cp" : "0.47" ,"cp_fix" : "0.47" ,"ccol" : "chg" ,"pcls_fix" : "108" } ] 

JSON応答を受け取りますurlも同様です。同じ問題もあります。これは私のURL

https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22AAPL%22)%0A%09%09&format=json&diagnostics=true&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=

これは私のJSコードでいました。

var url = "http://finance.google.com/finance/info?q=nasdaq:"; 

function getJSONReply() 
{ 
    var url_req = url.concat(arguments[0]); 
    alert(url_req); 
    var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function() 
{ 
    if (xhr.readyState == 4 && xhr.status == 200) 
    { 
     alert(xhr.responseText.length); 
    } 
} 
    xhr.open('GET', url_req, true); 
    xhr.setRequestHeader('Access-Control-Allow-Headers', '*'); 
    xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); 
    xhr.setRequestHeader('Access-Control-Allow-Methods', 'GET'); 
    xhr.addEventListener("load", reqListener); 
    xhr.send(); 
} 


function reqListener() 
{ 
    var sub1 = this.responseText.substring(5,this.responseText.length); 
    var sub2 = sub1.substring(0, sub1.length - 2); 
    parse_JSON(sub2); 
} 

PS:代わりにVAR要求の は、私はちょうどコードをテストするために直接httpリクエスト文字列を追加しても、まだresponseTextは空です。

xhr.open( 'GET'、 "http://ipinfo.io/json"、true);

何が問題なのかよく分かりません。 また、私はreadStaeを4、ステータスを200としてreadyStateを1とし、ステータスを0として とします。*

+0

に動作しますか?サーバーからAPIをクエリしてみてください。クライアント側のjsの代わりに 'curl'を使用し、応答が異なるかどうかを確認します。 P.S.このAPIは推奨されていませんか? http://googlecode.blogspot.com/2011/05/spring-cleaning-for-some-of-our-apis.html –

+0

これはほぼ有効なJSONですが、すべてのJSONをコメント化する '//'があります。ファイナンスにはAPIがない(https://developers.google.com/finance/?hl=es)のでGoogleの一種の保護だと思います。 – yuriy636

+0

また、 'XMLHttpRequestはhttps://finance.google.com/finance/info?q=nasdaq:AAPLを読み込めません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。 Origin 'https://fiddle.jshell.net'はアクセスが許可されていません。別のAPIを見つけることをお勧めします。http://stackoverflow.com/questions/10040954/alternative-to-google-finance-api – yuriy636

答えて

1

このプロセスには複数の問題があります。最初の問題は、XMLHttpRequestで非同期にデータを要求しようとしているが、そのように処理していないことです。 2つ目の問題は、実際にリクエストを行うときに、ブラウザ内のクライアント側でこれを実行しようとしている場合、同じ起源のポリシーに問題があることです。返されたJSONが無効なので、もう1つの問題があります。 2つのスラッシュが追加されているため、返されるJSONデータの解析に誤りがあります。

function getJSONReply(stock) { 
 
    var url = "https://finance.google.com/finance/info?q=nasdaq:"; 
 
    var request = url.concat(stock); 
 
    window.alert(request); 
 
    var xhr = new XMLHttpRequest(); 
 
    xhr.addEventListener("load", reqListener); 
 
    xhr.open('GET', request, true); 
 
    xhr.send(); 
 
} 
 

 
function reqListener() { 
 
    console.log(this.responseText); 
 
} 
 

 
console.log(getJSONReply("AAPL"));

ソリューション:another Stackoverflow postで述べたようにGoogle Finance API is no longer availableので、あなたが他のAPIを試してみることができます。

の作業例:

function getJSONReply() { 
 
    var url = "http://ipinfo.io/json"; 
 
    var xhr = new XMLHttpRequest(); 
 
    xhr.addEventListener("load", reqListener); 
 
    xhr.open('GET', url, true); 
 
    xhr.send(); 
 
} 
 

 
function reqListener() { 
 
    console.log(this.responseText); 
 
} 
 

 
getJSONReply();

+0

'this.responseText'をwindow.alertに入れると、出力は表示されますが、関数getJSONReplyではxhr.responseTextは表示されません。何故ですか ? –

+0

また、コードはIEでは完全に動作していますが、Chromeでは正しく動作していません。 –

+0

this.responseTextは 'reqListener'コールバック関数が' this'値として 'XMLHttpRequest'オブジェクトで呼び出されるために機能します。 xhrの値は 'reqListener'関数のスコープ内に存在しないため、未定義です。 – 10100111001

0

は、なぜあなたはデータの取得を担当するPHPスクリプトを作るいけませんか?

あなたのAjaxは引数GET['qparams'] で、このページを呼び出しますヤフーからの結果がフォーマットさ悪いので、私はそれをクリアし、それがされますおそらく同一生成元ポリシー

$homepage = file_get_contents('http://finance.google.com/finance/info?q=nasdaq:'.GET['qparams']); 
$homepage = str_replace(array("//"," ","\r","\n"), "", $homepage); 
return $homepage; 
+0

JSコードも投稿できますか? –

関連する問題