代码之家  ›  专栏  ›  技术社区  ›  David Yell

twitter竞赛~保存twitter(php&mysql)

  •  6
  • David Yell  · 技术社区  · 16 年前

    我正在创建一个应用程序来帮助我们的团队管理Twitter竞争。到目前为止,我已经设法与api fine交互,并返回了一组我需要的tweet。

    我正在努力确定处理数据库中tweet存储的最佳方法,检查频率,以及如何确保没有重叠或空白。

    每页最多可以收到100条推文。目前,我目前的想法是运行cron脚本,比如说,每5分钟左右运行一次,一次捕获100条tweet,并在数据库中循环浏览它们,看看我是否能找到它们,然后再添加它们。

    这有一个明显的缺点,即每5分钟对数据库运行100个查询,但是很多 INSERT 还有。我真的不喜欢。另外,我更愿意有一些更实时的东西。由于Twitter是一个实时服务,所以我们有理由在参赛者进入后立即更新我们的名单。

    这又一次带来了一个缺点,那就是必须反复对twitter进行投票,尽管这可能是必要的,但我不确定是否要像那样锤击它们的API。

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

    我很高兴单独处理显示方面的事情,因为这只是从MySQL和Display的一个拉。但是后端设计让我头疼,因为我看不到一种有效的方法可以让它在不影响API或DB的情况下运行。

    4 回复  |  直到 16 年前
        1
  •  1
  •   cincodenada    16 年前

    Twitter API提供了一个流式API,这可能是您想要做的,以确保捕获所有内容: http://dev.twitter.com/pages/streaming_api_methods

    如果我明白你在找什么,你可能会想要一个 statuses/filter ,使用 track 参数具有您要查找的任何区别特征(标签、单词、短语、位置、用户)。

    许多TwitterAPI库都内置了这个功能,但基本上你保持一个HTTP连接的开放,Twitter会不断地向你发送Twitter。见 streaming API overview 有关详细信息。如果你的库不为你做这些,你就必须检查掉的连接和重新连接,检查错误代码,等等——这些都在概述中。但是,在它们出现时添加它们将允许您首先完全消除重复项(除非您只允许每个用户一个条目——但这是稍后将要处理的客户端限制)。

    只要你不敲打你的数据库,一旦你的Twitter只是发送你的东西,你就可以控制你的终端-你可以很容易地让你的客户缓存他们进来的tweet,然后在给定的时间或计数间隔把他们写进数据库-每5分钟写一次它收集到的任何东西,或者写一次它有100条tweet,或者两者都写(很明显ese数字只是占位符)。这时,如果需要的话,您可以检查现有的用户名——编写一个缓存列表可以让您有最好的机会让事情变得高效,无论您想怎样。

    更新: 我上面的解决方案可能是最好的方法,如果你想获得现场效果(它似乎是你做的)。但正如另一个答案中所提到的,很可能只使用 Search API 在比赛结束后收集参赛作品,而不必担心如何存储它们-您可以在要求结果时指定页面(如搜索API链接中所述),但总的来说,您可以获取多少结果是有限制的,这可能会导致您错过一些参赛作品。什么解决方案最适合您的应用程序取决于您自己。

        2
  •  2
  •   Marc B    16 年前

    5分钟内的100个查询算不了什么。特别是因为一条tweet基本上只有3条相关的数据:用户ID、时间戳、tweet、tweet id——比如说,每个tweet大约有170个字符的数据。除非你在4.77MHz 8088上运行你的数据库,否则你的数据库在那种“加载”状态下都不会闪烁。

        3
  •  0
  •   user415263    16 年前

    我读过你的问题,在我看来,你想复制Twitter已经存储的数据。如果没有更多关于你的跑步比赛的细节,比如用户如何输入估计数量的条目,就不可能知道在数据库本地存储这些信息是否是解决这个问题的最佳方法。

    也许更好的解决方案是,跳过本地存储重复数据,直接从Twitter上拖动进入者,即当你试图找到一个赢家时。 您可以在代码运行时即时消除重复条目。一旦“下一页”处理完它已经提取的100个条目,就只需要调用它。不过,我不确定是否可以直接通过TwitterAPI实现。

        4
  •  0
  •   Aaron W.    16 年前

    我认为每x分钟运行一个cron,并根据tweets的创建日期进行设置可能会奏效。您可以查询数据库以查找上次录制的tweet的最后日期/时间,然后仅在有匹配时间时运行select以防止重复。然后,在数据库中执行插入操作时,使用一个或两个包含所有要记录的条目的insert语句来保持性能。

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

    这似乎不太密集…也取决于你希望记录的tweet数量。还要确保正确索引表。

    推荐文章