如何在单个请求中查询Stack Exchange站点上所有标记的计数

时间:2014-08-29 12:25:03

标签: python stackexchange-api

我正在尝试一些机器学习技巧。 在这种情况下PSO-KMean用于群集。

我以为我可以通过点击Stack Exchange API来测试它 获取标签列表和每个标签的计数, 然后将其转换为表示“tag-space”

中每个站点位置的浮点数组

我正在使用Py-Stack-Exchange

from stackauth import StackAuth
import stackexchange 

site_data = {}
n_sites= 20
for site_auth in StackAuth().sites()[3:n_sites+3]: #Skip big 3
    site=site_auth.get_site()
    site_tags = {}
    for tag in site.all_tags():
        site_tags[(tag.name)]=tag.count
    site_data[site.domain] = site_tags

现在这个必须有gone over the 10,000 requests limit之后我几次搞砸了几次因为 我得到了StackExchangeError: 502 [throttle_violation]: too many requests from this IP, more requests available in 81719 seconds

所以我猜它正在请求网站上的每个标签来计算它。 这对任何人都没有好处, 它对我来说比较慢,而且对Stack Exchange Infrastructure的工作也更多。 我觉得必须有一种方法来获取每个站点1个点击的信息, 但是我不熟悉API来解决它。

1 个答案:

答案 0 :(得分:0)

您只能使用1个API调用来提取所有标记。在Stack Overflow上,仅此答案就有38,484个标签。每页100个标签,这意味着您必须进行385次单独呼叫。

此问题的API的替代方法可能是使用数据资源管理器。如果没有更多细节,我可以指向一个非常simple query来提取Stack Overflow的所有标记信息:

select * from tags

此信息每周更新一次,因此不是实时数据。

最后,您可以使用data dump进行离线分析。这是Stack Exchange每季度(大约)提供的大型存档。幸运的是,最新的转储是从2014年9月开始的,因此它是最新的。