获取所有包含特定词的“雅虎问答”问题。关于速率限制的问题
我正在尝试整理一个数据库,里面包含所有在Yahoo Answers上提到某个特定词汇的问题。目前,我是用我写的一个脚本来实现这个目标,使用了Pynswers这个工具类来调用Yahoo的API。
from Answers import Answers
app = Answers()
wbk = xlwt.Workbook()
sheet = wbk.add_sheet('sheet 1')
app.appid = '...'
questions = app.questionSearch({'query':'tornado',})
#Write all column headings
sheet.write(0,0, 'Question')
sheet.write(0,1,'Answer')
sheet.write(0,2, 'Date')
sheet.write(0,3,'Number of Answers')
for i, value in enumerate(questions):
content = value['Content'].strip()
chosenAnswer = value['ChosenAnswer'].strip()
date = value['Date'].strip()
numAnswers = value['NumAnswers'].strip()
#Write values into respect columns, (row, column)
sheet.write(i+1,0,content)
sheet.write(i+1,1,chosenAnswer)
sheet.write(i+1,2,date)
sheet.write(i+1,3,numAnswers)
wbk.save('C://test.xls')
问题是,我从这个查询中只得到了大约10个回复,我不知道怎么才能扩大我能获取到的问题范围。有没有什么建议?
1 个回答
2
Pynswers 看起来是对 Yahoo API 的一个比较松散的封装。API 的文档里提到,在请求中需要使用“start”和“results”这两个字段:
所以,也许你可以这样做:
first_50 = app.questionSearch({'query':'tornado', 'start' : 0, 'results' : 50})
next_50 = app.questionSearch({'query':'tornado', 'start' : 50, 'results' : 50})
编辑
另外,关于“速率限制”,Yahoo 在他们的 API 中提到(这段内容摘自2013年3月7日):
我每分钟/小时/天可以调用 YQL 几次?
YQL 的速率限制是基于你的认证方式。如果你使用基于 IP 的认证,那么你每小时每个 IP 对公共 YQL 网络服务 URL (/v1/public/) 的调用限制为 2000 次,或者对需要 OAuth 授权的私有 YQL 网络服务 URL (/v1/yql/) 的调用限制为 20000 次。有关公共和私有 URL 的更多信息,请查看 YQL 网络服务 URL。应用程序(通过访问密钥识别)每天的调用限制为 100000 次。不过,为了确保服务对每个人都可用,我们要求 IP 认证用户每秒调用不超过 0.2 次,或者每小时不超过 1000 次,而其他用户则为每秒 2.7 次或每小时 10000 次。
*请不要创建多个密钥来“规避”速率限制。如果你希望我们提高你的限制,请联系并提供你的项目详细信息,我们会尽力满足你的需求。
显然,你需要小心编写代码,以确保在不超过速率限制的情况下获取所需的信息。因此,想要获取“所有”答案可能并不实际。