获取所有包含特定词的“雅虎问答”问题。关于速率限制的问题

0 投票
1 回答
814 浏览
提问于 2025-04-17 18:18

我正在尝试整理一个数据库,里面包含所有在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 次。

*请不要创建多个密钥来“规避”速率限制。如果你希望我们提高你的限制,请联系并提供你的项目详细信息,我们会尽力满足你的需求。

显然,你需要小心编写代码,以确保在不超过速率限制的情况下获取所需的信息。因此,想要获取“所有”答案可能并不实际。

撰写回答