Twitter API中的'since_id'和'max_id'具体是什么意思?

39

我已经花了很长时间研究 Twitter 的文档,但现在卡在如何获取关注者增长率和一段时间内的推文数量上了...

我想从社区了解 Twitter API 中的 since_id、max_id 和 count 分别是什么意思。

我一直在关注这个页面https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-user_timeline

我正在尝试获取用户的统计数据:

  • 特定时间段内的推文数量
  • 特定时间段内的关注者数量
  • 转推数

我希望能得到帮助,制定上述内容的查询字符串。

谢谢。

3个回答

40

since_idmax_id都是非常简单的参数,您可以使用它们来限制从API获得的内容。根据文档

since_id - 返回ID大于(即更近的)指定ID的结果。通过API只能访问有限数量的推文。如果自since_id以来已经超过了推文限制,则since_id将被强制为可用的最旧ID。 max_id - 返回ID小于(即更旧的)或等于指定的ID的结果。

因此,如果您拥有给定的推文ID,可以使用这两个参数搜索较新或较旧的推文。

count更加简单——它指定您希望获取的推文的最大数量,最多为200条。

不幸的是,当查询user_timeline时,API不会精确地返回您想要的内容-尽管在使用搜索API时可以指定日期/时间。无论如何,如果需要使用user_timeline,则需要轮询API、收集推文、确定它们是否与所需参数匹配,然后相应地计算统计数据。


1
谢谢你的回答。如果我想将某个日期转换为相应的since_id,以用于user_timeline查询,那你的建议是先使用search API函数来确定可用于给定日期的正确ID吗? - cboettig
那肯定是一种方法,我暂时想不到其他的方法。 - muffinista
@muffinista:如何知道我们是否已经达到了max_id的最大可能/允许值?我的意思是,假设我设置count = 100,然后每次获取推文并将max_id设置为上次接收到的推文的最后一个id。在这种情况下,我如何知道何时达到了限制? - user1599964
1
@user1599964 如果你这样做,最终你会得到少于100个结果,那时你可能已经到达推文的末尾了。 - muffinista
@muffinista:非常感谢您的帮助。没错,我理解了您关于1000条推文的观点。但是Twitter API不允许您一次获取1000条推文。因此,我使用max_id进行迭代以获取旧推文。过了一段时间(您无法超过一周),我想检查是否有新的推文,所以我使用since_id。所以我想知道是否可以在一个调用中进行该检查?另外,据我所知,max_id是旧推文的ID,而since_id是最新的,对吗? - Daisy
显示剩余6条评论

13

max_id = 推文 ID 列表的顶部。 since_id = 推文 ID 列表的底部。

更多信息:深入了解上一个图表... 这里


你需要在什么时候更新since_id值以获取最新的数据? - Petar
@pe60t0 我认为这里有两种情况。第一种情况是当你最后执行的请求没有返回任何数据时,这意味着你达到了搜索查询的时间轴的开头(“底部”)。第二种情况将根据你的服务/应用逻辑大不相同:a)你可以限制整体搜索的深度(例如按日期); 或b)如果你需要快速反应新推文的出现,你可以基于某种定时器从头开始搜索(例如每5分钟重置查询的since_id值到一个新值)。 - Igor Soloydenko

3

max_id和since_id用于防止Twitter API调用中的冗余。将到来的推文可视化为堆叠在一起。一个API调用必须指定要处理的推文数量(count)。但是,当进行此调用时,可能会添加新的推文。在这种情况下,如果您绘制一个堆栈并运行该过程,您会注意到可能存在一些“碎片化”或未处理的推文部分被卡在已处理的推文之间。这在下面的图片中也可见。

enter image description here

为了解决这个问题,使用了两个参数来跟踪先前处理过的最新/最大ID推文(since_id)和最近处理过的最旧/最低ID推文(max_id)。since_id指向'片段'底部,而(max_id-1)指向'片段'顶部。(请注意,与since_id不同,max_id是包含的)因此,这些参数一起跟踪哪些推文堆栈仍需要进行处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接