通过PHP使用Twitter API的最佳方法是什么?

时间:2009-06-04 11:41:15

标签: php api twitter

客户希望我使用PHP内置的自定义解决方案将他们的Twitter流添加到他们的网站主页。

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

客户的网站目前仅为HTML,因此无数据库可用。因此,我的解决方案只需要PHP和本地文件系统(例如,保存本地XML文件中包含一些数据)。

所以,鉴于这个有限的标准,我通过PHP访问Twitter API的最佳方式是什么,而不会在几分钟内达到我的API调用限制?

6 个答案:

答案 0 :(得分: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将在缓存层上执行您所需的一切。

答案 1 :(得分:0)

  1. 一个cron工作(不喜欢 - 如果甚至没有数据库,那么就没有cron工作)
  2. microtime()写入文件。在页面视图上将当前时间戳与已保存的时间戳进行比较。它的差异大于N分钟,拉新的tweetfeed并将当前时间戳写入文件
  3. 如果首页是一个不调用任何php的静态html文件,请包含一个返回1px透明gif的图像<img src="scheduler.php"/>(至少你在我年轻的时候这样做)并且你的推特 - 静静地拉着
  4. 或者您的意思是本地 - 本地文件系统,如“我/客户计算机而非服务器” - 本地?

    在这种情况下:

    1. 使用cron作业或调度程序和PHP
    2. 获取一些服务器
    3. 编写一个脚本,读取并将Feed保存到文件
    4. 使用FTP将文件写入客户服务器
    5. 使用javascript显示Feed(是的,ajax也可以使用静态文件作为数据源)。 jquery或一些lib非常适合这个
    6. 或:在本地创建推文显示html文件并上传(但要小心......因为你可能会覆盖服务器上的更新)
    7. imo:对于小型网站,您通常不需要完全成熟的SQL数据库。文件系统很棒。 scandirpreg_match和精心挑选的文件名的组合通常足够好 你可以使用漂亮的javascript实际进行大量的前端处理(比如显示XML)。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

希望这有帮助

答案 4 :(得分:0)

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

A)文件存在吗?

是:将其读入变量 否:继续执行步骤D)

B)反序列化变量(PHP对serialize()/ unserialize()就可以了。)

C)将存储的缓存时间与当前时间进行比较(Unix时间戳会这样做) 它相隔超过5分钟:

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

E)打印推文

序列化对象的最简单和最简单的方法是serialize()/ unserialize()对。如果你不愿意放弃制作对象的努力,你可以只使用2D数组,serialize()就可以了。请查看http://php.net/serialize

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

答案 5 :(得分:0)

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

现在在您的代码中进行检查,以查看lastrequest数据存储区中的时间戳是否超过X秒。如果是时候更新您的数据了。

将数组序列化并存储在一个文件中,非常简单