【问题标题】:What's the best way to use the Twitter API via PHP?通过 PHP 使用 Twitter API 的最佳方式是什么?
【发布时间】:2009-06-04 11:41:14
【问题描述】:

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

Twitter API 显然每小时可以调用的次数有限,因此我无法在每次有人刷新我客户的主页时自动 ping Twitter。

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

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

【问题讨论】:

  • 只是为了澄清:我不是要人们为我写这个! :) 自从我做任何 PHP 以来已经有很长时间了,所以我正在努力了解解决这个非常特殊问题的最佳实践。非常感谢您提供任何见解或建议。
  • "本地文件系统" - 这将是服务器本身。 “服务器设置” - 除了可以通过 FTP 访问的内容(因此没有 cPanel 或 cron 等)之外,我无法触摸任何内容。
  • 对不起,“服务器设置”应该是“服务器设置”。

标签: php api twitter


【解决方案1】:

这将非常容易,一旦您可以拉下时间线并显示它,然后添加一些基于文件的缓存到它。

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 将在缓存层上满足您的所有需求。

【讨论】:

    【解决方案2】:
    1. 一个 cron 作业(不是 likley - 如果甚至没有数据库,那么就没有 cron 作业)
    2. microtime() 写入文件。在页面视图上将当前时间戳与保存的时间戳进行比较。它的差异大于 N 分钟,拉新的推文并将当前时间戳写入文件
    3. 如果首页是一个不调用任何 php 的静态 html 文件,请包含一个图像 <img src="scheduler.php"/>,它会返回一个 1px 透明 gif(至少你在我年轻的时候是这样做的)并默默地拉动你的推特

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

    在这种情况下:

    1. 使用 cron 作业或调度程序和 PHP 获取一些服务器
    2. 编写一个脚本来读取提要并将其保存到文件中
    3. 使用 FTP 将文件写入客户服务器
    4. 使用 javascript 显示提要(是的,ajax 也可以将静态文件用作数据源)。 jquery 或一些库非常适合这个
    5. 或者:在本地创建显示推文的 html 文件并上传(但要小心……因为您可能会覆盖服务器上的更新)

    imo:对于小型站点,您通常并不需要完全成熟的 sql 数据库。文件系统很棒。 scandirpreg_match 和精心挑选的文件名的组合通常就足够了。
    而且您实际上可以使用漂亮的 javascript 进行大量前端处理(例如显示 XML)。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        希望对你有帮助

        【讨论】:

          【解决方案5】:

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

          A) 文件是否存在?

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

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

          C) 将存储的缓存的年龄与当前时间进行比较(Unix 时间戳可以做到这一点) 相距超过 5 分钟:

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

          E) 打印推文

          序列化对象的最简单和最简单的方法是 serialize()/unserialize() 对。如果您不愿意推迟制作对象的努力,您可以使用 2D 数组,serialize() 就可以了。关注http://php.net/serialize

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

          【讨论】:

            【解决方案6】:
            array(
            'lastrequest' => 123,
            'tweets' => array ()
            )
            

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

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

            【讨论】:

              猜你喜欢
              • 2013-12-03
              • 2022-08-20
              • 2013-03-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-12-11
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多