【问题标题】:Call Google Finance Options API URL调用 Google Finance Options API 网址
【发布时间】:2017-05-26 23:54:55
【问题描述】:

在浏览器中输入此内容会自动下载一个 txt 文件,该文件是 AAPL 股票期权数据的 json 格式文本。

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

【问题讨论】:

  • 试试https://而不是http://
  • 我不再收到错误消息,但没有数据被拉出,控制台中也没有打印任何内容。谢谢
  • 如果要获取数据,尝试将成功函数放在Ajax对象中。 Ajax 返回后,会转到success 函数而不是done 函数。 Ajax 会先执行 done 函数,因为它是一个异步方法。

标签: javascript jquery json ajax


【解决方案1】:

我确信有更好的方法来做到这一点......但它确实有效。

首先,要解决跨域请求,您可以使用 YQL。 然后,url 答案不是有效的 json 字符串。所以我使用“eval”来执行响应文本并将其存储在 tmp 变量中。

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);
  }
})

你去。

【讨论】:

  • 您的脚本可以通过 SQL 注入轻松破解,没有必要也没有理由使用其他 api 调用另一个 api。
  • “我确信有更好的方法来做到这一点......但它确实有效。”然后提出解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
相关资源
最近更新 更多