2009-06-04 144 views
6

客户希望我使用PHP内置的自定义解决方案将他们的Twitter流添加到他们的网站主页。通过PHP使用Twitter API的最佳方式是什么?

Twitter API显然每小时可以拨打的电话数量有限,所以每当有人刷新我客户的主页时,我都无法自动ping通Twitter。

客户端的网站目前纯粹是HTML,所以有没有数据库可用。因此,我的解决方案只需要PHP和本地文件系统(例如保存一个本地XML文件,其中包含一些数据)。

因此,考虑到这个有限的标准,在几分钟内没有触及我的API调用限制的情况下,通过PHP访问Twitter API的最佳方式是什么?

+0

只是为了澄清:我不是要别人写我! :) 自从我做了任何PHP以来,这已经很长时间了,所以我正在努力加快解决这个非常特殊问题的最佳实践。 非常感谢任何见解或建议。 – markedup 2009-06-04 11:42:48

回答

3

这将是很容易的,一旦你可以拉下一个时间表,并显示它,再加入一些基于文件的缓存它。

check age of cache 
Is it more than 5 mins old? 
    fetch the latest information 
    regenerate the HTML for output 
    save the finished HTML to disk 
display the cached pre-prepared HTML 

PEAR's Cache_Lite将在缓存层上完成所有需要的操作。

0
  1. cron作业(不likley - 如果连有没有一个数据库,那么有没有cron作业)
  2. microtime()到一个文件中。在页面视图上比较当前时间戳和保存的时间戳。它的差异大于N分钟,拉动新的tweetfeed并将当前时间戳写入文件
  3. 如果首页是一个静态的html文件没有调用任何PHP,包括一个图像<img src="scheduler.php"/>,返回一个1px透明gif(在至少你做了这样我年轻的时候),并做你的Twitter拉默默

或你的意思是当地 - 本地文件系统,如“我/客户计算机不是服务器” -local?

在这种情况下

  1. 得到一些服务器使用cron作业或调度和PHP
  2. 编写一个脚本,读取并保存进到一个文件
  3. 将文件写入到客户服务器使用FTP
  4. 显示使用JavaScript的饲料(是的,ajax也适用于静态文件作为数据源)。 jQuery的或一些LIB是为这个伟大的
  5. 或:本地创建的鸣叫,显示HTML文件并上传它(但要小心......因为你可能会覆盖服务器上更新)

IMO:对于小无论如何,你通常不需要完全成长的sql数据库。文件系统非常棒。 scandir,preg_match和仔细选择的文件名的组合通常是足够好的。
,你实际上可以做很多前端处理(如显示XML)使用美丽的JavaScript。

0

由于我们不知道你的服务器配置,我建议你设置一个cron作业(假设你在一个Linux机器上)。如果你在共享主机环境中拥有类似cPanel的东西,那么它应该不是什么大问题。您需要编写一个由cron调用的脚本,它将获取最新的推文并将它们写入文件(xml?)。您可以安排cron每30分钟运行一次。或者你想要什么。

0

您可能想使用Tim Davies的TweetPHP。 http://lab.lostpixel.net/classes/twitter/ - 这门课有很多功能,包括你想要的功能,向你的客户展示时间线。 该页面显示了如何使用它的很好的例子。

然后,您可以将其输出放在文件或数据库中。如果您希望网站访问者每5分钟更新一次数据库或文件,则可以设置一个持有时间戳的会话变量,并在时间戳至少5分钟前允许另一次更新。

希望这有助于

0

我的建议:创建一个小的简单对象来保存缓存日期和一组推文。每次有人访问该页面时,它都会执行以下逻辑:

A)文件是否存在?

是:读入一个变量 否:进至步骤d)

B)反序列化变量(PHP的一对序列化()/反序列化()将做就好)

C)比较存储的缓存时间和当前时间(Unix时间戳会做到这一点) 它相互之间超过5分钟:

D)从Twitter获取最新的推文,更新对象,序列化并写入再次缓存。存储最新的推文用于打印。它不是:只要读取缓存中的推文即可。

E)打印鸣叫

简单和序列化对象最简单的方法是序列化()/反序列化()对。如果你不想放弃创建对象的努力,你可以使用2D数组,serialize()将工作得很好。看看http://php.net/serialize

考虑到你没有cPanel访问,它是最好的解决方案,因为你将无法访问PEAR包,cron或任何其他更简单的解决方案。

0
array(
'lastrequest' => 123, 
'tweets' => array() 
) 

现在在你的代码放在一个检查,看看是否在数据存储中的时间戳lastrequest比X秒老了。如果是时候更新你的数据。

序列化和存储在一个文件中的数组,很简单

相关问题