Twitter竞争〜保存推文(P​​HP& MySQL)

时间:2010-08-09 16:32:26

标签: php mysql api twitter

我正在创建一个应用程序来帮助我们的团队管理Twitter竞赛。到目前为止,我已经成功地与API进行了交互,并返回了我需要的一组推文。

我很难决定处理数据库中推文存储的最佳方式,检查它们的频率以及如何确保没有重叠或间隙。

每页最多可获得100条推文。目前,我目前的想法是运行一个cron脚本说,每5分钟左右一次,并一次抓取完整的100条推文,然后循环查看数据库以查看是否可以找到它们,然后再添加它们

这有一个明显的缺点,即每5分钟对数据库运行100次查询,但也有很多INSERT。我真的不喜欢。另外,我宁愿有更多的实时内容。由于Twitter是一项实时服务,因此我们应该在进入后立即更新我们的参赛者名单。

这再次引发了一个缺点,即不得不反复轮询Twitter,虽然可能是必要的,但我不确定我是否想要像他那样锤击他们的API。

有没有人对优雅的解决方案有任何想法?我需要确保捕获所有推文,而不是让任何人离开,并保持db用户的唯一性。虽然我考虑过只添加所有内容然后按用户名对结果表进行分组,但它并不整洁。

我很乐意单独处理事物的显示方面,因为这只是来自mysql和显示器的拉动。但是后端设计让我很头疼,因为我无法看到一种有效的方法来保持它的结束而不会破坏api或数据库。

4 个答案:

答案 0 :(得分:2)

5分钟内100次查询无效。特别是因为推文基本上只有3个与之相关的数据:用户ID,时间戳,推文,推文ID - 比方说,每条推文大约有170个字符的数据。除非您在4.77MHz 8088上运行数据库,否则您的数据库甚至不会在那种“负载”下闪烁

答案 1 :(得分:1)

Twitter API提供了一个流媒体API,可能就是为了确保捕获所有内容而想要做的事情: http://dev.twitter.com/pages/streaming_api_methods

如果我了解您要查找的内容,您可能需要statuses/filter,使用track参数,以及您的任何区别特征(主题标签,字词,词组,位置和用户)寻找。

许多Twitter API库内置了这个,但基本上你保持HTTP连接打开,Twitter会不断向你发送推文。有关详细信息,请参阅streaming API overview。如果你的库没有为你做,你将不得不检查掉线和重新连接,检查错误代码等 - 这些都在概述中。但是在它们进入时添加它们将允许您首先完全消除重复项(除非您每个用户只允许一个条目 - 但这是您稍后将要处理的客户端限制)。

至于没有锤击你的数据库,一旦你有Twitter只是发送你的东西,你就可以控制你的结果 - 你可以很容易地让你的客户端在它们进来时缓存推文,然后将它们写入db在给定时间或计数间隔 - 写入每5分钟收集一次的内容,或者写入一次有100条推文,或两者都写(显然这些数字只是占位符)。这是您可以在需要时检查现有用户名的时间 - 编写一个缓存列表可以让您有最好的机会让事情变得有效,无论您想要什么。

<强>更新 如果你想获得实时结果(你似乎这样做),我上面的解决方案可能是最好的方法。但正如另一个答案中所提到的,在比赛结束后可能只需使用Search API来收集条目,而不用担心存储它们 - 您可以在要求结果时指定页面(如搜索API链接中所述,但是总体上可以获取多少结果存在限制,这可能会导致您错过某些条目。哪种解决方案最适合您的应用程序取决于您。

答案 2 :(得分:0)

我读过您的问题,在我看来,您想要复制Twitter已存储的数据。没有更多关于竞争的详细信息您的运行,用户输入的方式,例如估计的条目数量;无法知道是否将本地信息存储在数据库中是解决此问题的最佳方法。

可能是一个更好的解决方案,跳过在本地存储重复数据并直接从Twitter拖动参赛者,即当您试图找到胜利者时。 您可以在代码运行时即时消除重复的条目。一旦完成处理已经获取的100个条目,您只需要调用“下一页”。虽然,我不确定这是否可以直接通过Twitter API。

答案 3 :(得分:0)

我认为每隔X分钟运行一次cron并将其基于推文创建日期可能会有效。您可以查询数据库以查找上次记录的推文的最后日期/时间,然后仅运行选择是否存在匹配时间以防止重复。然后,当您插入数据库时​​,使用一个或两个插入语句,其中包含您要记录的所有条目以保持性能提升。

INSERT INTO `tweets` (id, date, ...) VALUES (..., ..., ...), (..., ..., ...), ...;

这似乎不太强烈......也取决于您希望记录的推文数量。还要确保正确索引表。