如何限制stackexchange返回的字段api,关闭分页?
How to restrict fields returned by stackexchange api, and turn off paging?
我想列出一个较小(少于 10,000 个问题)stackexchange 站点中所有问题的当前标题。我在这里尝试了交互式实用程序:https://api.stackexchange.com/docs/questions,它都在底部将结果报告为 json,并在顶部生成请求 url。例如:
https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&tagged=apples&site=cooking
returns 这个 JSON 在我的浏览器中:
{"items":[{"tags":["apples","crumble"],"owner":{ ...
...
...],"has_more":true,"quota_max":300,"quota_remaining":252}
什么是配额?某站一搜10000,这里一下子只有300
我不会经常这样做,我想要的是最快的编辑方法(当然也可以是类似的方法)url 这样我就可以得到所有标题的列表一个小网站。我不明白如何使用分页,我不需要任何其他字段。我不在乎我是否得到它们,但我在想如果我排除它们我可以一次拥有更多。
如果我需要编写脚本,python (2.7) 是我的首选(唯一)语言。
quota_max
是您的应用程序每天允许的请求数。 300 是未注册应用程序的默认值。这曾经在描述默认值的 throttles, but seems to have been removed. Here is 历史信息的页面上直接提及。
要将其增加到 10,000,您需要 register an application and then authenticate 通过在脚本中传递访问令牌。
要获取站点上的所有标题,您可以使用 Python 库来帮助:
- StackAPI。下面的答案将使用这个库。 免责声明: 这个库是我写的
- Py-StackExchange
- SEAPI
- StackPy
假设您已经注册了您的应用程序并通过了身份验证,我们就可以继续了。
首先,安装StackAPI (documentation):
pip install stackapi
此代码随后将获取网站 hardwarerecs
的 10,000 个最新问题 (max_pages
* page_size
)。每页花费您一次 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
,此结果集仅限于标题和 link。您可以通过在 Web UI 中调整所需的字段并复制过滤字段来找到合适的过滤器。
创建 SITE
参数时传递的 hardwarerecs
参数是网站域的第一部分 URL。或者,您可以在查看 /sites
端点时查看您网站的 api_site_parameter
来找到它。
我想列出一个较小(少于 10,000 个问题)stackexchange 站点中所有问题的当前标题。我在这里尝试了交互式实用程序:https://api.stackexchange.com/docs/questions,它都在底部将结果报告为 json,并在顶部生成请求 url。例如:
https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&tagged=apples&site=cooking
returns 这个 JSON 在我的浏览器中:
{"items":[{"tags":["apples","crumble"],"owner":{ ...
...
...],"has_more":true,"quota_max":300,"quota_remaining":252}
什么是配额?某站一搜10000,这里一下子只有300
我不会经常这样做,我想要的是最快的编辑方法(当然也可以是类似的方法)url 这样我就可以得到所有标题的列表一个小网站。我不明白如何使用分页,我不需要任何其他字段。我不在乎我是否得到它们,但我在想如果我排除它们我可以一次拥有更多。
如果我需要编写脚本,python (2.7) 是我的首选(唯一)语言。
quota_max
是您的应用程序每天允许的请求数。 300 是未注册应用程序的默认值。这曾经在描述默认值的 throttles, but seems to have been removed. Here is 历史信息的页面上直接提及。
要将其增加到 10,000,您需要 register an application and then authenticate 通过在脚本中传递访问令牌。
要获取站点上的所有标题,您可以使用 Python 库来帮助:
- StackAPI。下面的答案将使用这个库。 免责声明: 这个库是我写的
- Py-StackExchange
- SEAPI
- StackPy
假设您已经注册了您的应用程序并通过了身份验证,我们就可以继续了。
首先,安装StackAPI (documentation):
pip install stackapi
此代码随后将获取网站 hardwarerecs
的 10,000 个最新问题 (max_pages
* page_size
)。每页花费您一次 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
,此结果集仅限于标题和 link。您可以通过在 Web UI 中调整所需的字段并复制过滤字段来找到合适的过滤器。
创建 SITE
参数时传递的 hardwarerecs
参数是网站域的第一部分 URL。或者,您可以在查看 /sites
端点时查看您网站的 api_site_parameter
来找到它。