2016-06-13 68 views
1

我想在其中一个较小的(少于10,000个问题)stackexchange网站中列出所有问题的当前标题。我在这里尝试了交互式实用程序:https://api.stackexchange.com/docs/questions并且它都将结果报告为底部的json,并在顶部生成请求的url。例如:如何限制stackexchange api返回的字段,并关闭分页?

https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&tagged=apples&site=cooking 

返回此JSON在我的浏览器:

{"items":[{"tags":["apples","crumble"],"owner":{ ... 
... 
...],"has_more":true,"quota_max":300,"quota_remaining":252} 

什么是配额?在一个网站上进行一次搜索时,这个数字是10,000,但突然间在这里只有300。

我不会经常这样做,我想要的是编辑该网址(或类似网址)最快捷的方式,以便我可以获取小网站上所有标题的列表。我不明白如何使用分页,我不需要任何其他字段。我不在乎我是否得到了他们,但我想如果我排除他们,我可以一次拥有更多。

如果我需要编写脚本,Python(2.7)是我的首选(唯一)语言。

回答

1

quota_max是您的申请每天允许的请求数。 300是未注册应用程序的默认值。这曾经在描述throttles的页面上直接提及,但似乎已被删除。 Here is描述默认值的历史信息。

要增加到10,000,您需要register an application然后authenticate通过在脚本中传递访问令牌。


为了获得网站上的所有标题,您可以使用Python库的帮助:


假设你已经注册了您的应用和验证,我们可以继续进行。

首先,安装StackAPI(documentation):

pip install stackapi 

这个代码就抢10,000最近的问题(max_pages * page_size)的网站hardwarerecs。每个页面都需要一个API命中,所以每页上的项目越多,几个API调用就越少。

from stackapi import StackAPI 

SITE = StackAPI('hardwarerecs') 
SITE.page_size = 100 
SITE.max_pages = 100 

# Filter to only get question title and link 
filter = '!BHMIbze0EQ*ved8LyoO6rNjkuLgHPR' 

questions = SITE.fetch('questions', filter=filter) 

questions变量是一本字典,看起来非常类似的API输出,除了图书馆做了所有的传呼你。您的数据是questions['data'],在这种情况下,包含字典看起来像这样的列表:

[ 
... 
{u'link': u'http://hardwarerecs.stackexchange.com/questions/29/sound-board-to-replace-a-gl2200-in-a-house-of-worship-foh-setting', 
u'title': u'Sound board to replace a GL2200 in a house-of-worship FOH setting?'}, 
{ u'link': u'http://hardwarerecs.stackexchange.com/questions/31/passive-gps-tracker-logger', 
    u'title': u'Passive GPS tracker/logger'} 
... 
] 

此结果集仅限于标题,我们应用,因为filter的链接。您可以通过调整Web UI中需要的字段并复制过滤器字段来找到适当的过滤器。

创建SITE参数时传递的参数hardwarerecs是网站域URL的第一部分。或者,您可以在查看/sites终点时查看您的网站的api_site_parameter

+0

好的,谢谢! - 你已经明白我需要知道什么,并给我一个我可以使用的答案!我已经看过这些链接,并且它不会立即跳出我的视线,为什么'filter'被设置为一个神秘的字符串或者我将如何到达,在安装之后,我可以使用'help( )'或'.__ doc__'('filter ='!BHMIbze0EQ * ved8LyoO6rNjkuLgHPR'') – uhoh

+0

你能解释一下这个神秘的字符串是如何工作的:'filter ='!BHMIbze0EQ * ved8LyoO6rNjkuLgHPR'',为什么它如此漫长而神秘?谢谢! – uhoh

+1

这是一个[很长的技术讨论](https://kevinmontrose.com/2012/01/11/stack-exchange-api-v2-0-implementing-filters/)。如果您只是想为您的API调用使用适当的过滤器,则可以通过导航到您在文档中使用的API端点([/questions](http://api.stackexchange.com/docs/questions)例如),并在“试用”部分调整“过滤器”以包含您想要的字段。点击保存,你会注意到“默认”改变为像上面那样神秘的字符串。将该字符串复制到应用程序中。 – Andy