目前,我可以通过使用YQL console
返回xml和json来获取股票报价选择符号,价格来自csv,其中url ='http://download.finance.yahoo.com/d/quotes.csv?s = IBM,YHOO,GOOG,MSFT& f = sl1d1t1c1ohgv& e = .csv'和columns ='符号,价格,日期,时间,更改,col1,高,低,col2'
我想从
获取完整的组件列表http://download.finance.yahoo.com/d/quotes.csv?s=@^HSI&f=sl1d1t1c1ohgv&e=.csv
使用YQL控制台,所以我在YQL控制台中输入以下语句
从csv中选择符号,价格,其中url ='http://download.finance.yahoo.com/d/quotes.csv?s = @ ^ HSI& f = sl1d1t1c1ohgv& e = .csv'和columns ='符号,价格,日期,时间,变化,COL1,高,低,COL2'
但它说我的链接无效。任何想法和替代解决方案?
答案 0 :(得分:3)
您的查询非常接近正确,但您注意到该网址被视为“无效”。解决方案是正确转义查询字符串值。
http://download.finance.yahoo.com/d/quotes.csv?s=@^HSI&f=sl1d1t1c1ohgv&e=.csv
变为
http://download.finance.yahoo.com/d/quotes.csv?s=%40%5EHSI&f=sl1d1t1c1ohgv&e=.csv
将这两个字符更改为其%编码值允许YQL撤回CSV数据。
select * from csv where url='http://download.finance.yahoo.com/d/quotes.csv?s=%40%5EHSI&f=sl1d1t1c1ohgv&e=.csv'
除了:YQL不喜欢CSV在文件末尾有空行,这会在您尝试使用columns
where子句时导致问题。如果您可以使用名为col<number>
的列并希望跳过最后一行(空),则在查询结束时使用and col8 is not null
。
答案 1 :(得分:0)
这是正确的网址:
http://quote.yahoo.com/d/quotes.csv?s=<symbol>&f=sl1d1t1c1ohgv&e=.csv
可口可乐:
http://quote.yahoo.com/d/quotes.csv?s=KO&f=sl1d1t1c1ohgv&e=.csv
结果:“KO”,69.74,“9/2/2011”,“下午4:00”, - 0.71,69.7201,69.99,69.50,8765529
对于HSI:
http://quote.yahoo.com/d/quotes.csv?s= ^ HSI&安培; F = sl1d1t1c1ohgv急症=的.csv
“^ HSI”,19616.40, “2011年9月5日”, “上午04时01”, - 596.51,19830.50,19830.50,19567.77,0
这是一个API文档:
答案 2 :(得分:0)
上述解决方案并不能完全回答这个问题,不幸的是,你只会获得前51-52个结果(第一页),而不是完整的索引。
我不认为在原始YQL中这是可能的,但是您需要编写一些代码来获取HTML,然后遍历每个组件页面并从中构建自己的数据表。
我已经尝试了几种方法并且有一个C#脚本可以做到这一点,在Python中执行此操作也是微不足道的,只需将其加载到pandas数据帧中,或者只是一个普通的列表/元组(如果全部)你想要的是构建用于测试投资组合的组件列表的符号。
如果人们仍然对此解决方案感兴趣,我可以发布链接。