0

所以,我正在尝试编译一个包含某个单词的 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 个回复,而且我想不出一种方法来扩大我得到的问题的范围。有任何想法吗?

4

1 回答 1

2

Pynswers似乎是Yahoo API 本身的一个非常松散的包装器。API 文档显示在请求中使用“开始”和“结果”字段:

因此,也许您可​​以执行以下操作:

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 的身份验证,则公共 YQL Web 服务 URL (/v1/public/ ) 的调用次数/小时/IP 限制为 2,000 次,或者私有 YQL Web 服务 URL (/v1) 的调用次数/小时/IP 限制为 20,000 次/yql/ ) 需要 OAuth 授权。有关公共和私有 URL,请参阅 YQL Web 服务 URL。应用程序(由访问密钥标识)限制为 100,000 次呼叫/天/密钥*。但是,为了确保每个人都可以使用该服务,我们要求您调用 YQL 的次数不要超过 0.2 次/秒或 1,000 次/小时(对于 IP 身份验证用户)和 2.7 次/秒或 10,000 次/小时。

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

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

于 2013-03-07T18:08:49.263 回答