从几百个Twitter配置文件中有效地获取和存储推文?

时间:2010-05-05 18:26:47

标签: php mysql twitter

我正在处理的网站需要从150-300人那里获取推文,将其存储在本地,然后在首页上列出。配置文件分组。

页面将显示

  • 最后20条推文(或21-40等)按日期,个人资料组,单个个人资料,搜索或“主题”(这是一个不同的组......我认为......)
  • 实时的上下文感知标记云(基于当前搜索的最后300条推文,配置文件组或显示的单个配置文件)
  • 各种统计数据(群组内容,最活跃的等等),这取决于所显示的页面类型。

我们期待相当多的流量。最后一个类似的网站每天访问量达到近40,000次,并且在我开始将页面缓存为静态文件并禁用某些功能(有些,意外地......)之前会遇到故障。造成这种情况的主要原因是页面加载从3-6个配置文件中获取最后x个推文,这些配置文件的更新时间最长。

有了这个新网站,我可以幸运地使用cron来获取推文,这样做有所帮助。我还将对db进行非规范化,因此需要更少的连接,优化它以获得更快的选择而不是大小。

现在,主要问题:如何确定哪些配置文件能够以有效的方式检查新推文?有些人会比其他人更频繁地发推文,有些人会连发推文(这种情况会发生很多)。我想尽可能保持网站的首页为“最新”。如果涉及300个配置文件,我每分钟检查5个,一些推文只会在事后一小时出现。我可以更频繁地检查(最多20K),但希望尽可能地优化它,既不会达到速率限制也不会耗尽本地服务器上的资源(它会触及mysql的连接与其他网站的限制) 问题2:因为cron每分钟“运行”一次,我想我必须每分钟检查多个配置文件 - 如上所述,至少5个,可能更多。为了尝试在那一分钟内展开它,我可以让它在批次甚至单个配置文件之间睡几秒钟。但是如果它总共耗时超过60秒,脚本就会自动运行。这是一个问题吗?如果是这样,我该如何避免呢? 问题3:其他任何提示?自述文件?网址?

2 个答案:

答案 0 :(得分:1)

我不会使用cron,只需使用twitter streaming API with a filter为您的150-300 Twitter用户。

  

<强>状态/过滤

     

返回与一个或多个过滤谓词匹配的公共状态。必须至少指定一个谓词参数,follow,locations或track。可以指定多个参数,允许大多数客户端使用与Streaming API的单个连接。在URL中放置长参数可能会导致请求因URL长度过长而被拒绝。使用POST请求标头参数来避免长URL。

     

默认访问级别最多允许200个跟踪关键字,400个跟随用户ID和10个1度位置框。增加的访问级别允许80,000个跟随用户标识(“影子”角色),400,000个跟踪用户标识(“鸟类”角色),10,000个跟踪关键字(“限制跟踪”角色),200,000个跟踪关键字(“合作伙伴跟踪”角色)和200个10-度位置框(“locRestricted”角色)。在限制流之前,增加的轨道访问级别也会传递更高比例的状态。

我相信在指定用户ID时,你可以从流式api获取所有推文:

  

未通过用户ID选择的所有流都会删除低质量用户的状态。用户ID选择的结果(目前仅来自跟随谓词)允许来自低质量用户的状态通过。

这样可以让您获得实时结果,而无需担心速率限制。您只需要确保您能够足够快地接受数据。但有300名用户不应该成为问题。

更新 - 如何使用API​​ :不幸的是,我从未有机会使用流API。然而,我之前已经守护过PHP脚本(是的,我知道这不是一个PHP的强项,但如果你正在做的其他事情都在php中,那么就可以完成)。

我设置了一个简单的php脚本来使用状态,然后将它们(原始JSON)转储到消息队列中。然后,我会在消息队列中指向另一个脚本以获取状态并将其放入数据库中。这种方式和数据库连接和处理时间不会干扰简单地接受流数据。

从外观上看phirehose是否适合该解决方案的第一部分。像beanstalkd(带pheanstalk)之类的东西可以用作消息队列。

答案 1 :(得分:0)

我看一下http://corp.topsy.com/developers/api/

我与他们没有任何关系,除了我一直在玩api。我认为它会给你你想要的东西,具有更高的api限制。