【问题标题】:Interpreting StackExchange API batch requests解释 StackExchange API 批处理请求
【发布时间】:2014-08-10 15:54:44
【问题描述】:

我的目的是检索输入问题的链接问题 ID 列表。为此,StackExchange API 提供了linked API,它将分号分隔的问题 ID 列表作为参数。

我需要计算链接的问题总数约为 100 万。但是,StackExchange API 允许的最大配额仅为 10,000 个请求。因此,对于我来说,一次发送 100 个批处理请求(用分号分隔)对我来说是理想的。因此,一天之内我就可以访问 100*10,000 = 100 万个链接。

不幸的是,对于此类批处理请求,StackExchange API 返回一个平面 JSON 响应数组,并且无法判断哪些链接对应于哪些输入问题。例如,ID 为 14266328 的问题与 ID 为 5598291 和 1917935 的两个问题相关联。而问题 14266325 与 3270680 相关联。

现在,当我向 StackExchange 服务器发送以下请求时,

http://api.stackexchange.com/2.2/questions/14266328%3B14266325/linked?order=desc&sort=activity&site=stackoverflow&filter=!--KJA8bUDfrh   

我收到了以下回复。

{
  "items": [
    {
      "question_id": 3270680
    },
    {
      "question_id": 5598291
    },
    {
      "question_id": 1917935
    }
  ],
  "has_more": false,
  "quota_max": 10000,
  "quota_remaining": 9988
} 

问题是:从这个回复中无法判断哪些问题与 14266328 相关,哪些问题与另一个相关。

我尝试了一次只发送一个 question_id 参数的简单方法,但我的请求在 10,000 个请求后按预期被阻止。

【问题讨论】:

    标签: json stackexchange-api


    【解决方案1】:

    您的目标是创建一个堆栈溢出网络图,其中节点作为问题,边作为问题之间的超链接。 API 是一种更简单的方法,但有速率限制,不幸的是,批处理请求会要求您使用已经稀缺的速率限制发出更多经过身份验证的请求。有创造性的方法可以规避此限制,但您可能会面临违反堆栈溢出 T&C 的风险。

    也就是说,我将使用Stack Exchange Data Dump 自己生成这个网络图。您可以查看问题的文本内容并提取超链接。然后,您可以查看 Stack Overflow 中的超链接(因为 /questions/linked 端点只为您提供网站内的超链接)并生成图表。所有这一切都可以使用re(提取超链接)、networkx/igraph(生成图形并以 GraphML 格式导出以供将来使用)和lxml(数据转储 XML 的迭代解析)在 Python 等编程语言中轻松完成文件)。

    编辑

    原来数据转储通过postlinks XML 文件提供了这样的链接结构。这实际上意味着您不再需要抓取帖子的文本内容来查找超链接。

    【讨论】:

    • 好吧,我不想尝试数据转储,因为我想使用整个 stackovverflow 数据的一小部分样本......但是似乎我只能将 postlinks 数据转储用于我的情况...感谢您的建议...
    • however it seems that i can only use the postlinks data dump for my case. 这正是你应该做的,即使你想处理一个小样本。 API 请求对您的任务不值得,IMO。
    • 是的,我的意思是我不需要实际的帖子...我只能使用 postlinks 数据转储...
    猜你喜欢
    • 2023-02-09
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2018-08-10
    • 1970-01-01
    • 2022-06-11
    相关资源
    最近更新 更多