我正在使用user_timeline API来访问用户的推文。我想在我的初始请求中检索最早的推文,这样我就可以在API的3200推文限制内开始回填他们的推文了。我正在使用的算法如下
假设用户有1000条推文。按照我们得到的算法:
但是,下次执行循环时,since_id现在为1000,不会返回任何推文,这意味着推文1到800将永远无法访问。
我们怎样才能让user_timeline按升序返回推文?还是有更好的算法?
任何帮助表示赞赏!谢谢!
答案 0 :(得分:1)
max_id
和since_id
字段用于告知Twitter您要求的数据集开始或结束,并且没有任何影响关于数据集的交付顺序,对于twitters时间轴apis最新到最旧。
这样的答案
我们怎样才能让user_timeline按升序返回推文?
是你无法做到的。您可以做的最好的事情是获取最新到最旧的数据,并在获得数据后以其他方式对其进行排序。
要进行提取,您可以使用基于max_id
的算法{/ 1}}
since_id
注意:
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.
,
但是无害(since_id
意味着一切都达到了3200
限制)并且意味着该算法也可以用于追赶。since_id = 0
也可以初始化为已知的推文ID,以便检索
仅限早期推文。无论如何,它已经过了几天,但希望仍然对你或其他人有用。
要进行提取,您可以使用 max_id
基于max_id
的算法,但更好的方法是使用cursoring。其基本算法是
since_id
注意:
1.初始回填请求不需要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.
,
但是无害(since_id
意味着一切都达到了3200
限制)并且意味着该算法也可以用于追赶。
参考1,since_id = 0
(不包括在内)可以非常类似地使用
如果会话由于某种原因重置而您松开,则重新启动
跟踪可用的next_cursor值。
3.考虑到我们高谈的错误/异常/边缘情况
等级算法。
无论如何,它已经过了几天,但希望仍然对你或其他人有用。