我正在处理的网站需要从150-300人那里获取推文,将其存储在本地,然后在首页上列出。配置文件分组。
页面将显示
我们期待相当多的流量。最后一个类似的网站每天访问量达到近40,000次,并且在我开始将页面缓存为静态文件并禁用某些功能(有些,意外地......)之前会遇到故障。造成这种情况的主要原因是页面加载还从3-6个配置文件中获取最后x个推文,这些配置文件的更新时间最长。
有了这个新网站,我可以幸运地使用cron来获取推文,这样做有所帮助。我还将对db进行非规范化,因此需要更少的连接,优化它以获得更快的选择而不是大小。
现在,主要问题:如何确定哪些配置文件能够以有效的方式检查新推文?有些人会比其他人更频繁地发推文,有些人会连发推文(这种情况会发生很多)。我想尽可能保持网站的首页为“最新”。如果涉及300个配置文件,我每分钟检查5个,一些推文只会在事后一小时出现。我可以更频繁地检查(最多20K),但希望尽可能地优化它,既不会达到速率限制和也不会耗尽本地服务器上的资源(它会触及mysql的连接与其他网站的限制) 问题2:因为cron每分钟“运行”一次,我想我必须每分钟检查多个配置文件 - 如上所述,至少5个,可能更多。为了尝试在那一分钟内展开它,我可以让它在批次甚至单个配置文件之间睡几秒钟。但是如果它总共耗时超过60秒,脚本就会自动运行。这是一个问题吗?如果是这样,我该如何避免呢? 问题3:其他任何提示?自述文件?网址?
答案 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限制。