【问题标题】:Twitter requests - the right wayTwitter 请求 - 正确的方式
【发布时间】:2023-04-03 16:26:01
【问题描述】:

我目前在每个页面加载时都请求一个 twitter 提要(我知道这是错误的),如下所示:

json_decode(file_get_contents("http://api.twitter.com/1/statuses/user_timeline/{$username}.{$format}")); 

即使流量很少,Twitter 也会很快停止向我发送请求。因此,在为我的客户启动网站后 - 我看到永远不可用的 Twitter 提要。

我想象这项工作的方式是检查提要 - 将其存储在带有时间戳的表格中,并选择一个时间间隔 - (比如 10 分钟)。在每次页面加载时,检查时间戳,如果未超过时间间隔,则从表中提取提要,而不是从 twitter 中提取。

我知道这会奏效,但考虑到我上一个错误是如此愚蠢,我想确保没有其他更好的做法。

这次我做对了吗?

【问题讨论】:

    标签: php twitter


    【解决方案1】:

    这听起来完全正确。三个注意事项:

    1. 将日期/时间放在一列中,将要显示的 twitter 提要放在另一列中,然后您只需对该行进行一次选择即可完成。

    2. 将呈现的 HTML 存储在数据库中,而不是从 Twitter 返回的 JSON。然后,您只需每十分钟进行一次转换,而不是针对每个页面请求。

    3. 全部在数据库中或全部在服务器上进行时间比较,不要将两者混为一谈 - 我遇到了服务器时间不同步的问题,这让我很头疼。也就是说,不要使用“INSERT ... CURTIME() ...”调用,然后将其与 PHP 生成的日期进行比较。我的建议是生成一个 PHP 日期并存储它,因为 SQL 中的时间比较可能很棘手。

    【讨论】:

    • 你的观点很好。非常感谢,尤其是比较时间 - 我从来没有想过这一点。有没有一种简单的方法来比较数据库中的时间?我打算让一列默认为当前时间戳。
    • 简答,不。我会存储 PHP 的 time() 的返回值,而根本不关心数据库时间函数。该值以秒为单位,因此在您检索时间戳后,您可以与 if (time() > ($timestamp + (10 * 60))) ... 之类的内容进行比较
    • 如果您要进行大量的表内日期比较,使用日期列类型,然后使用strtotime() 转换为 unix 时间戳也可能是处理日期的好方法。最好不要互换太多。另请注意,如果需要,您在 MySQL 中有 FROM_UNIXTIME()。 PHP 也有 mktime(),它提供了与 time() 相同的东西,并且较新版本的 PHP 有 DateTime 对象。
    【解决方案2】:

    缓存不太可能发生变化的 I/O 数据总是很明智的。最佳方式取决于您获得的流量以及您对数据的最新需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      相关资源
      最近更新 更多