如何在Python (Django)中访问YQL?
嘿,我需要一个简单的例子来完成以下任务:
向YQL发送查询并接收响应。
我是在我的Django应用的Python后台访问公共数据。
如果我只是复制粘贴YQL的例子,它会说“请提供有效的凭证”。
我想,我需要OAuth授权才能做到这一点。
所以我得到了一个API密钥和一个共享密钥。
那么,我该怎么用它们呢?
我应该使用Python的OAuth库吗?是这个吗?
http://oauth.googlecode.com/svn/code/python/oauth/
但是代码是什么呢?我怎么把我的密钥/API密钥和我的YQL查询一起传递呢?
我想,很多Django程序员都会想知道这个。
3 个回答
好的,我大致解决了这个问题。
在YQL控制台的示例中,给出了一个用于数据/html的示例网址:
http://query.yahooapis.com/v1/yql?q=select+*+from+html+where+url%3D%22http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3Dyhoo%22+and%0A++++++xpath%3D%27%2F%2Fdiv%5B%40id%3D%22yfi_headlines%22%5D%2Fdiv%5B2%5D%2Ful%2Fli%2Fa%27
这个链接是不能用的!
但是如果你在“v1/”后面加上“/public”,它就神奇地开始工作了!
http://query.yahooapis.com/v1/public/yql?q=select+*+from+html+where+url%3D%22http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3Dyhoo%22+and%0A++++++xpath%3D%27%2F%2Fdiv%5B%40id%3D%22yfi_headlines%22%5D%2Fdiv%5B2%5D%2Ful%2Fli%2Fa%27
不过,关于如何传递我的API密钥(用于v1/yql访问)的问题仍然没有答案。有什么建议吗?
如果你只是想访问公开的数据,可以直接用Python发一个请求。
>>> import urllib2
>>> result = urllib2.urlopen("http://query.yahooapis.com/v1/public/yql?q=select%20title%2Cabstract%20from%20search.web%20where%20query%3D%22paul%20tarjan%22&format=json").read()
>>> print result[:100]
{"query":{"count":"10","created":"2009-11-03T04:47:01Z","lang":"en-US","updated":"2009-11-03T04:47:0
然后你可以用simplejson来处理这个结果。
>>> import simplejson
>>> data = simplejson.loads(result)
>>> data['query']['results']['result'][0]['title']
u'<b>Paul</b> <b>Tarjan</b> - Silicon Valley, CA | Facebook'
我刚刚发布了一个叫做 python-yql 的工具,它也可以在 pypi 上找到。这个工具可以进行公共的、两步验证的 oauth,也就是签名请求,同时也能支持三步验证的 oauth。
这个工具是全新的,所以可能会有一些小问题,我会继续努力改进测试覆盖率,但希望它能满足你的需求。你可以查看源代码,了解如何使用它。
如果你想试用,可以按照以下步骤安装:
sudo easy_install yql
如果你有bug或者功能请求,可以在这里提交: https://bugs.launchpad.net/python-yql