我正在研究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);
}
}
}
谢谢
答案 0 :(得分:2)
为了解决Same Origin Policy所设置的跨域请求限制,您需要一个允许您执行JSONP请求或已启用CORS的端点。不幸的是,雅虎!财务终端没有。
所以,正如詹姆斯所说,你是一个中间人。
通常,我的建议是使用YQL,这样您就可以快速轻松地构建位于您和财务网站之间的服务器。事实上,他们已经拥有了雅虎!完全针对您尝试获取的数据的财务终端:link
然而,由于这可能不可靠,我还有一个网站刮板,我已经在各种项目中使用过。它托管在Heroku上,允许您从任何站点获取几乎任何内容。我不建议将它用于大批量项目,但对于occaisional数据提取它是很好的。在你的情况下,你会这样使用它:
编辑:ichart.finance.yahoo.com已被弃用,因此失败。将其保存在此处以供参考
现在您已经完成了这项工作,我建议使用jQuery和csv-to-array plugin:
jQuery.getJSON('http://websitescraper.herokuapp.com/?url=http://ichart.finance.yahoo.com/table.csv?s=RIL.BO&callback=?', function (csvdata) {
console.log(csvdata.csvToArray());
});
另外,如果你想发布自己的中间人,你可以使用我建立的网站刮刀。 source code is on GitHub并且它是在MIT许可下发布的。
答案 1 :(得分:1)
您正在尝试执行跨域请求,因此被阻止。
您需要编写服务器端脚本来为您获取数据。