2017-01-12 7 views
0

をブラウザに入力すると、json形式のAAPLストックオプションデータのテキストであるtxtファイルが自動的にダウンロードされます。GoogleファイナンスオプションAPIのURL

http://www.google.com/finance/option_chain?q=AAPL&output=json

私はので、私は結果を解析し、ブラウザにデータを表示することができ、直接かかわらず、Javascriptの変数には、このデータを取得したいと思います。

は、私が試した:

$.getJSON('http://www.google.com/finance/option_chain?q=AAPL&output=json', function(json) { 
     console.log(json); 
    }); 

が、他の記事に見られるように、私は、No 'Access-Control-Allow-Origin' header is present on the requested resource.エラーが発生します。

私もAjaxで試してみました:

$.ajax({ 
    dataType: "json", 
    url: "http://www.google.com/finance/option_chain?q=AAPL&output=json", 
}).done(function (data) { 
    console.log(data); 
}); 

が、同じエラーを取得します。

URLでjsonp(&output=jsonp)を試しましたが、Uncaught SyntaxError: Unexpected token)というエラーが表示され、Chromeのインスペクタで();が返されます。

このjsonデータをGoogleから直接JSにプルするにはどうすればよいですか?

+0

'http:// 'ではなく' https:// 'を試してください –

+0

エラーは表示されなくなりましたが、データが取得されず、コンソールに何も印刷されません。ありがとう – brno792

+0

データを取得する場合は、Ajaxオブジェクトに成功関数を入れてみてください。 Ajaxの復帰後、done関数ではなくsuccess関数に移ります。 Ajaxは非同期メソッドであるため、done関数を最初に実行します。 –

答えて

0

私は確かにそれを行う良い方法があります...しかし、それは動作します。

まず、クロスドメインリクエストを解決するには、YQLを使用できます。 それから、urlの答えは有効なjson文字列ではありません。だから私は応答テキストを実行し、それをtmp変数に格納するために "eval"を使用しています。

function toYQL(site){ 
    return 'http://query.yahooapis.com/v1/public/yql?q=' + 
     encodeURIComponent('select * from html where url="' + site + '"') + 
     '&format=json&callback=?'; 
} 
$.ajax({ 
    dataType: "json", 
    url: toYQL("http://www.google.com/finance/option_chain?q=AAPL&output=json"), 
    success: function(response){ 
     eval("var tmp=" + response.query.results.body); 
     console.log(tmp); 
    } 
}) 

お試しください。

+0

あなたのスクリプトはSQLインジェクションで簡単にハックすることができ、別のAPIを使用して別のAPIを呼び出す必要はありません。 –

+0

"もっと良い方法があると確信していますが、うまくいきます。" 次に、 – EteriuS

関連する問題