キッシュ機能をつける
もしもAPIの仕様書に1認証コードにつき、1秒に1回程度のリクエストを受け付けられるとありますので、なるべく無駄なリクエストはださないように、キャッシュ機能を追加したいと思います。
PHPには、PEARライブラリにCache_Liteというクラスがありますので、これがインストールされているサーバーなら、これを使うのが簡単でいいと思います。しかし、私の使っているサーバーで使えないところがあったので、簡単なものを自分で組み込んでしましました。
前回のfunction getmoshi_basicを変更します。
ちょっと長くなってしまいましたね。
global $cache_dir, $cache_time;は、初期設定ファイルで設定したキャッシュディレクトリと有効時間をこの関数の中で利用出来るようにするおまじない。
キャッシュのファイル名はmd5()という関数でもしもAPIに出すリクエストを変換しています。md5()は暗号化とかに使うものなのですが、パラメータから一意に決まることを利用しています。
あとは、現在の時刻とファイル作成の時刻の差が有効時間内かチェック。
新たに有効な情報をもしもAPIで得た場合は、ファイルに書き込むようにします。
新たに、cleanCacheという関数を追加してます。これは、有効期限切れのキャッシュファイルを全部削除するものです。キャッシュの有効性をチェックして、無効であった場合に呼ばれます。

PHPには、PEARライブラリにCache_Liteというクラスがありますので、これがインストールされているサーバーなら、これを使うのが簡単でいいと思います。しかし、私の使っているサーバーで使えないところがあったので、簡単なものを自分で組み込んでしましました。
前回のfunction getmoshi_basicを変更します。
< php
function getmoshi_basic ($authorization_code, $options="") {
global $cache_dir, $cache_time;
$search_url = "http://api.moshimo.com/article/search";
$request = $search_url . "?authorization_code=$authorization_code" . $options;
if ($cache_dir != '') {
$cache_file = $cache_dir . '/' . md5($request);
$timedif = @(time() - filemtime($cache_file));
if ($timedif < $cache_time) {
$filename = $cache_file;
$cacheok = 0;
} else {
$filename = $request;
$cacheok = 1;
cleanCache($cache_dir, $cache_time);
}
}else {
$filename = $request;
$cacheok = 0;
}
$response = file_get_contents($filename);
$ArticleSearch = simplexml_load_string($response);
if($ArticleSearch->Rows > 0){
if($cacheok){
if ($f = @fopen($cache_file, 'w')) {
fwrite ($f, $response, strlen($response));
fclose($f);
}
}
return $ArticleSearch;
}
return false;
}
function cleanCache($directory, $cache_time) {
$handle = opendir($directory);
while ($datei = readdir($handle))
{
if (($datei != '.') && ($datei != '..'))
{
$file = $directory.'/'.$datei;
if (!is_dir($file)) {
$timedif = @(time() - filemtime($file));
if ($timedif > $cache_time) {
unlink($file);
}
}
}
}
closedir($handle);
return true;
}
?>
ちょっと長くなってしまいましたね。
global $cache_dir, $cache_time;は、初期設定ファイルで設定したキャッシュディレクトリと有効時間をこの関数の中で利用出来るようにするおまじない。
キャッシュのファイル名はmd5()という関数でもしもAPIに出すリクエストを変換しています。md5()は暗号化とかに使うものなのですが、パラメータから一意に決まることを利用しています。
あとは、現在の時刻とファイル作成の時刻の差が有効時間内かチェック。
新たに有効な情報をもしもAPIで得た場合は、ファイルに書き込むようにします。
新たに、cleanCacheという関数を追加してます。これは、有効期限切れのキャッシュファイルを全部削除するものです。キャッシュの有効性をチェックして、無効であった場合に呼ばれます。
