php - 缓存来自 Facebook 的 Open Graph 结果的最佳方式?

标签 php facebook caching curl facebook-opengraph

我的网站通过 cURL 查询 Facebook 的分享计数:

http://graph.facebook.com/?ids=MY_SITE_URL

但是,我经常发现我已经达到了 rate limit 。缓存此数据并将其显示在页面上的最佳机制是什么?我的网站不使用数据库,为此目的创建一个数据库似乎很愚蠢。

谢谢!

最佳答案

是的,memcache 或 Redis 是一个不错的选择。

另一种方法是您可以使用 Facebook 的批处理 API 功能。它将同时执行多个请求,因此您可以在一个查询中找到多个 URL 的共享计数。 https://developers.facebook.com/docs/graph-api/making-multiple-requests/

第二个选项是您可以在 php.ini 中创建全局数组。例如

$globalArray = array();

然后,您可以为每个共享计数 URL 创建 key ,然后存储从 API 获取的结果。例如

$globalArray['url'] = $resultFromAPI;

通过这种方式,您可以存储数据,直到刷新页面。

第三个选项是为每个共享计数 URL 创建 session 并将值存储在其中,并在用户注销时清除 session 。

然后每次当您获取特定 URL 的分享计数时,首先检查您是否有该 URL 的值?例如

if(isset($_SESSION['url']) && !empty($_SESSION['url']){
    $count = $_SESSION['url'];    
}else{
    // fetch through facebook graph API
}

如果您使用 Zend Framework,那么 Zend Registry 也是一个不错的选择,它的工作方式与 PHP session 相同。

如果您想要最新信息,则需要调用 Graph API。但是您可以构建仅在一小时后获取数据的逻辑。我的意思是您可以每隔一小时清除这些共享 URL 的 session ,然后再次将数据保存到这些 session 变量中。

希望有帮助。

关于php - 缓存来自 Facebook 的 Open Graph 结果的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26281618/

相关文章:

c# - 在ASP.net中使用静态变量缓存信息可以吗?

database - PostgreSQL 准备好的语句是否按语句名称缓存?

javascript - 在提交事件上调用 jQuery 重新加载页面

php - FB-Root 为空,但仅在 Firefox 和 IE 中有时为空

facebook - Stackexchange API 隐式与显式

python - Flask-Caching FileSystemCache 方法在超时时不会删除缓存项

php - 在 WordPress 结构中哪里可以找到 WP_CONTENT_DIR?

php - Amazon Scraper 脚本适用于 XAMPP Windows,但不适用于 Linux 上的 PHP5 Cli

php - 处理数组的内容

iphone - iOS 6 Facebook 登录不刷新访问 token