当前位置: 首页 > 知识库问答 >
问题:

循环浏览用户时间线 - Twitter API

戚飞雨
2023-03-14

我目前正在编写一个通过Twitter API穿越用户时间线的web应用程序。我在获取或处理数据方面没有问题。我的问题是速度。Twitter API将每页可以检索的推文数量限制为200条。分页是通过在(max_ID)中传递一个参数来完成的,该参数是您在上一页上阅读的最后一条推文。有没有人能想到提高我收到这些推特的速度?我用的是亚伯拉罕·奥古斯利卜。我的代码如下:

$twitteroauth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $oauth['oauth_token'],     $oauth['oauth_token_secret']);
            $tweets = $twitteroauth->get('statuses/user_timeline', array ( 'screen_name' => 'user_name', 'count' => 200));

            // get first batch of tweets from api
            foreach($tweets as $t)
            {
                $tweets_to_process[] = $t;
            }

            // get last id of tweet and set prev_id to 0
            $last_id = $tweets_to_process[count($tweets_to_process)-1]->id_str;
            $prev_id = 0;
            $loop_num = 0;

            // loop through pages whilst last page returned of api result does not equal last of last result
            while($last_id != $prev_id && $loop_num < 4)
            {
                // get tweets
                $tweets = $twitteroauth->get('statuses/user_timeline', array ( 'screen_name' => 'user_name', 'count' => 200, 'max_id' => $last_id));

                // loop through tweets and add to array
                foreach($tweets as $t)
                {
                    $tweets_to_process[] = $t;
                }

                // set prev and last id
                $prev_id = $last_id;
                $last_id = $tweets_to_process[count($tweets_to_process)-1]->id_str;
                $loop_num ++;
            }

如你所见,目前我在while循环中放置了一个中断计数器,因为从UX的角度来看,循环max 3200 tweets花费的时间太长了。

共有3个答案

潘佐
2023-03-14

在这种情况下,似乎不是一个更精简的解决方案。关闭

终逸仙
2023-03-14

为了扩展BAwebimax的建议…您可以定期下载并在本地缓存推文,然后在用户登录时调用以获取超出“since_id/max_id”的新推文。旧推文不会改变,因此您可以提前预处理这些推文。这将导致用户登录您的应用时更少的调用和更少的新推文处理。

....

刚刚注意到您的评论..如果方案涉及一次性使用并且没有重复用户,则上述内容将没有用。在这种情况下,您没有太多选择。

麹繁
2023-03-14

Twitter API的最新版本似乎是专门为减少每次从服务器上下载内容的持续压力而设计的。我建议您扩展您的代码来基于时间(通过cron/调度任务)获取twitter feeds,并在本地缓存时间轴条目。这样,你执行的操作可以更快地完成。

 类似资料:
  • 我正在制作一个以Firebase为后端的React web应用程序。在web应用程序中,健身教练可以记录客户的进展情况。每周,培训师提交一份包含一些进度指标(体重、血压等)的表格。 在Firestore,我与培训师的所有客户都有一个收藏。每个客户文档中都有一个每周进度指标集合,如下所示。 我想将每个客户机的所有进度指标设置为单个useState,以便培训师可以将其导出为csv文档。我的计划是使用u

  • 本文向大家介绍JavaScript Web浏览器中的事件循环,包括了JavaScript Web浏览器中的事件循环的使用技巧和注意事项,需要的朋友参考一下 示例 绝大多数现代JavaScript环境都是根据事件循环工作的。这是计算机编程中的一个常见概念,从本质上讲意味着您的程序不断等待新事物发生,并且当新事物发生时对其做出反应。在主机环境调用到你的程序,在产卵事件循环,然后一个“转”或“嘀”或“任

  • 本文向大家介绍在Bash中循环浏览文件内容,包括了在Bash中循环浏览文件内容的使用技巧和注意事项,需要的朋友参考一下 通常,需要使用bash脚本从文件中读取每一行。有多种方法可以读取文件中的行。在下面的示例中,我们首先描述了如何创建示例文件,然后运行读取该示例文件的脚本。 创建一个要读取的文件 运行上面的代码给我们以下结果- 使用做时 在这种方法中,我们使用do-while循环读取文件。我们在文

  • 我想在Excel 2010中使用vba循环浏览目录的文件。 在循环中,我需要: 文件名和 我已经编写了以下代码,如果文件夹中的文件不超过50个,它就可以正常工作,否则速度会慢得离谱(我需要它来处理带有 工作但速度太慢的代码(每100个文件15秒): 问题解决: 我的问题已通过以下解决方案得到解决:以特定方式使用(15000个文件为20秒),并使用命令检查时间戳 考虑到下面的另一个答案,20秒缩短为

  • 实现 UIWebView 的离线浏览(缓存)功能。 作者说: 原理:将get请求的数据缓存在本地cache目录中,以后访问的时候直接从cache中获取数据。 备注:在初始化缓存的时候可以指定缓存的有效期时间长度,具体参看代码。在访问大数据网站(例如:cnbeta.com)的时候可能会导致闪退(个人猜想的原因是内存不足造成的),这个没有详细去追查原因,这里给出代码的目的是让大家明白离线原理。 [Code4App.com]

  • 问题内容: 有没有一种方法可以轻松地在一定时间内进行for循环?(无需使用System.currentTimeMillis()自己测量时间?) 即我想在Java中执行以下操作: 谢谢 问题答案: 不,没有内置的结构可以做到这一点。 我想指出,您不应使用System.currentTimeMillis()在指定时间段内执行或延迟任务。而是使用System.nanoTime()。前一种方法在Windo