3

我正在研究 html 和 js,在其中我以表格格式显示雅虎金融股票。数据以 csv 格式获取。我要js直接从url读取数据

网址是http://ichart.finance.yahoo.com/table.csv?s=RIL.BO

我尝试从 stackoverflow 获得的代码在 localhost url 中工作。

 var txtFile = new XMLHttpRequest();
    txtFile.open("GET", "http://ichart.finance.yahoo.com/table.csv?s=RIL.BO", true);
    txtFile.onreadystatechange = function() {
      if (txtFile.readyState === 4) {  // Makes sure the document is ready to parse.
        if (txtFile.status === 200) {  // Makes sure it's found the file.
          allText = txtFile.responseText;
          lines = txtFile.responseText.split("\n"); // Will separate each line into an array
          alert(allText);
        }
      }
    }

谢谢

4

2 回答 2

5

为了绕过由同源策略设置的跨域请求限制,您需要一个允许您执行 JSONP 请求或启用 CORS 的端点。不幸的是,雅虎!金融端点两者都没有。

所以,正如詹姆斯所说,你需要一个中间人。

通常,我对此的建议是使用YQL,它允许您快速轻松地构建一个位于您和金融站点之间的服务器。事实上,他们已经有了 Yahoo! 准确获取您要获取的数据的财务端点:链接

但是,由于这可能不可靠,我也有一个网站抓取工具,我在各种项目中都使用过。它托管在 Heroku 上,允许您从任何站点获取几乎任何内容。我不建议将它用于大容量项目,但对于偶尔获取数据来说它很棒。在你的情况下,你会像这样使用它:

http://websitescraper.herokuapp.com/?url=http://ichart.finance.yahoo.com/table.csv?s=RIL.BO&callback=jsCallback

编辑: ichart.finance.yahoo.com 已被弃用,因此失败。留在这里以供参考

既然你已经解决了这个问题,我建议使用 jQuery 和csv-to-array 插件

jQuery.getJSON('http://websitescraper.herokuapp.com/?url=http://ichart.finance.yahoo.com/table.csv?s=RIL.BO&callback=?', function (csvdata) {
  console.log(csvdata.csvToArray());
});

此外,如果您想启动自己的中间人,可以使用我构建的网站抓取工具。源代码在 GitHub 上,它是在 MIT 许可下发布的。

于 2013-08-01T05:43:50.600 回答
1

您正在尝试执行跨域请求,因此它被阻止。

您将需要编写一个服务器端脚本来为您获取数据。

于 2013-08-01T05:23:42.113 回答