一尘不染

在PHP中缓存JSON输出

json

有一点问题。一直在使用facebook和twitter
API并获取状态搜索查询的JSON输出没有问题,但是我进一步阅读并意识到,最终可能会受到文档中引用的“速率限制”。

我想知道每小时缓存JSON输出是否容易,以便至少可以尝试防止这种情况发生?如果是这样,怎么做?当我尝试一个youtube视频时,它并没有真正提供太多信息,只是如何将目录列表的内容写入到cache.php文件中,但是并没有真正指出这是否可以通过JSON输出完成,当然没有说如何使用60分钟的时间间隔,或者如何获取信息然后从缓存文件中退出。

任何帮助或代码都将不胜感激,因为关于此类问题的教程似乎很少。


阅读 278

收藏
2020-07-27

共1个答案

一尘不染

这是一个简单的函数,它添加了缓存以获取一些URL内容:

function getJson($url) {
    // cache files are created like cache/abcdef123456...
    $cacheFile = 'cache' . DIRECTORY_SEPARATOR . md5($url);

    if (file_exists($cacheFile)) {
        $fh = fopen($cacheFile, 'r');
        $cacheTime = trim(fgets($fh));

        // if data was cached recently, return cached data
        if ($cacheTime > strtotime('-60 minutes')) {
            return fread($fh);
        }

        // else delete cache file
        fclose($fh);
        unlink($cacheFile);
    }

    $json = /* get from Twitter as usual */;

    $fh = fopen($cacheFile, 'w');
    fwrite($fh, time() . "\n");
    fwrite($fh, $json);
    fclose($fh);

    return $json;
}

它使用URL标识高速缓存文件,下一次将从高速缓存中读取对相同URL的重复请求。它将时间戳记写入高速缓存文件的第一行,并且丢弃早于一个小时的高速缓存数据。这只是一个简单的示例,您可能需要自定义它。

2020-07-27