2011-12-21 41 views
3

我目前要求对每个页面加载一个Twitter的饲料(我知道这是不对的)这样的正确方法:Twitter的请求 -

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

即使最小流量,微博停止前长送我的要求。所以在为我的客户启动网站之后 - 我看到永久不可用的Twitter提要。

我想象这个工作的方式是检查feed - 将它存储在一个带有时间戳的表中,并选择一个间隔 - (比如10分钟)。在每个页面加载中,检查时间戳,如果时间间隔没有超过,请从表中提取订阅源,而不是Twitter。

我知道这可行,但鉴于我最后的错误是如此愚蠢,我想确保没有另一种更好的做法。

这次我是否有权利?

回答

4

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

  1. 把日期/时间在一列,并要在其他列中显示Twitter的饲料,那么你可以做一个选择该行,并用它做。

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

  3. 在数据库或所有服务器上做所有时间比较,不要混淆两者 - 我遇到了服务器超时问题,导致我很头疼。也就是说,不要使用“INSERT ... CURTIME()...”调用,然后将它与PHP生成的日期进行比较。我的建议是生成一个PHP日期和存储,因为SQL中的时间比较可能会非常棘手。

+0

你说得很好。非常感谢,尤其是比较时间 - 我从来没有想到这一点。有没有简单的方法比较数据库中的时间?我打算让列默认为当前时间戳。 – drewwyatt 2011-12-21 03:18:02

+1

简短的回答,没有。我将存储PHP时间()的返回值,而不用担心数据库时间函数。这个值是以秒为单位的,所以在你检索时间戳后,你可以比较一下'if(time()>($ timestamp +(10 * 60)))...' – 2011-12-21 03:24:28

+1

如果你在做很多事情使用日期列类型,然后使用'strtotime()'转换为unix时间戳可能也是处理日期的好方法。不要过多交换是个好主意。还要注意,如果你需要它,你在MySQL中有'FROM_UNIXTIME()'。 PHP也有'mktime()',它给了你'time()'的同样的东西,而新版本的PHP有''DateTime'](http://us3.php.net/manual/en/book .datetime.php)对象。 – 2011-12-21 03:29:46

1

缓存不可能改变的I/O数据总是很聪明的。最佳方式取决于您获得的流量,以及您需要的数据流量。