【问题标题】:Twitter API - How to properly sort tweets in ascending orderTwitter API - 如何按升序正确排序推文
【发布时间】:2018-04-15 15:27:33
【问题描述】:

我正在使用 user_timeline API 来访问用户的推文。我想在我的初始请求中检索最早的推文,这样我就可以开始在 API 的 3200 条推文限制内回填他们的推文。我使用的算法如下

  • 设置 since_id = 1,计数 = 200
  • 循环结束
    • 查询用户时间线
    • 接收推文
    • 处理推文
    • 设置 since_id = 最高推文 ID

假设用户有 1000 条推文。按照我们得到的算法:

  • since_id = 1,计数 = 200
  • 循环结束
    • 查询用户时间线
    • 将收到 1000 到 801 的推文,按该顺序排序
    • 处理推文
    • 设置 since_id = 1000(最高推文 ID)

但是 since_id 现在是 1000,下次执行循环时不会返回任何推文,这意味着推文 1 到 800 将永远无法访问。

我们如何让 user_timeline 按升序返回推文?还是有更好的算法?

感谢任何帮助!谢谢!

【问题讨论】:

    标签: api twitter


    【解决方案1】:

    max_idsince_id 字段用于告诉 twitter 你请求的数据集在哪里开始结束,并且对顺序没有影响该数据集是交付的,对于 Twitter 的时间线 api 来说是最新到最旧的。

    因此回答

    我们如何让 user_timeline 按升序返回推文?

    是你不能。您可以做的最好的事情是从最新到最旧的数据中获取数据,并在获得数据后以另一种方式对其进行排序。

    呃,user_timeline 似乎不支持光标,更新并道歉:

    要进行提取,您将使用基于 max_id 的算法,类似于您的 since_id one

    set count = 200
    set max_id = max_int64
    set since_id = max_previously_processed_id or 0
    loop until max_id <= since_id
      query user_timeline
      receive tweets
      process/cache tweets # whatever is possible.
      set max_id = lowest tweet id
    process/store all tweets # e.g., sort oldest to newest.
    

    注意事项:

    1. 初始回填请求不需要since_id, 但无害(since_id = 0 表示最高 3200 的所有内容 限制)并且意味着该算法也可以用于追赶。
    2. max_id 也可以初始化为已知的推文 ID,以检索 仅限较早的推文。
    3. 不考虑错误/异常/边缘情况,因为我们正在谈论高- 级算法。

    不管怎样,已经有几天了,但希望对您或其他人仍然有用。

    要进行提取,您可以使用基于 max_id 的算法,类似于您的 since_id,但更好的是使用 cursoring。基本算法是

    set since_id = max_previously_processed_id or 0
    set cursor = -1, count = 200
    loop until cursor = 0 # next_cursor = 0 sent when no more data.
        query user_timeline # cursor and *since_id* amongst the parameters.
        receive tweets
        {process tweets} # may or may not be possible without them all.
        set cursor = response next_cursor
    {process all tweets} # e.g., sort oldest to newest.
    

    注意事项: 1. 初始回填请求不需要since_id, 但无害(since_id = 0 表示最高 3200 的所有内容 限制)并且意味着该算法也可以用于追赶。 2. 比较。 1、max_id(不包括在内)可以相当类似地用于 如果会话由于某种原因重置并且您松动,则重新启动 跟踪可用的 next_cursor 值。 3. 不考虑错误/异常/边缘情况,因为我们说的是高- 级算法。

    不管怎样,已经有几天了,但希望对您或其他人仍然有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      相关资源
      最近更新 更多