work.log

元エンジニアの備忘録的ブログ

PerlのLWPでCacheを使う

投稿:2014-03-26 18:29  更新:

Perl の LWP::UserAgent と XML::FeedPP を使って何かする時に、毎回フレッシュなデータを取ってきてたのですが、場合によっては一定期間は同じデータを使いまわしたいという事が出てきたのでキャッシュ機能を付けてみることにしました。

キャッシュ部分には Cache::File モジュールを使います。

キャッシュ機能をこんな感じにつけてみました。

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use XML::FeedPP;
use Cache::File;

    my $url = 'https://worklog.be/feed';

    my $params = {
           cache_root => '/tmp/mycache',
           default_expires => '600sec'
       };

    my $c = new Cache::File($params);

    $c->purge();

    my $cache = $c->get($url);

    if (!$cache) {

        my $res = &lwp_get($url);

        if ($res) {

            $c->set($url, $res->content);
            $cache = $c->get($url);

            print "get: $url\n\n";

        } else {

            print "error: $url\n\n";
            exit;

        }

    } else {

        print "cache: $url\n\n";

    }

    my $feed = XML::FeedPP->new($cache);

    foreach ($feed->get_item()) {

        print $_->title(), "\n";

    }

sub lwp_get {

    my $url = shift || return(0);
    my $lwp = '';
    my $res = 0;

    $lwp = LWP::UserAgent->new(
        timeout => 30
    );

    $res = $lwp->get($url);

    if (!$res->is_success) {
        $res = 0;
    }

    return($res);

}
exit;

キャッシュがなければ LWP::UserAgent で取得して $res->content でコンテンツデータのみをキャッシュに保存。

後は XML::FeedPP がそのキャッシュデータを読み込むという具合です。

XML::FeedPP で作成されるオブジェクト毎キャッシュした方が便利かとも思ったのですがそうでも無かったのでこんな感じに。

実行結果は以下。

Cache なし

$ perl feed_cache.pl
get: https://worklog.be/feed

PerlからWordPressを操作する
WordPressのwp_optionsテーブルって結構便利
PerlとかPHPで外部コマンドを実行した時の戻り値を判定する
WordPressのstyle.cssに任意のバージョンを設定する
WordPressで利用するファイルのExpiresヘッダを見直す
WordPressで作ったコンテンツを最適化する試み
WP Super Cache の手動インストールメモ
WordPressでMinified化したstyle.min.cssを使う
TwentyFourteenに関連記事を表示する機能を追加する
TwentyFourteenにリッチスニペット対応のパンくずリストを追加

Cache あり

$ perl feed_cache.pl
cache: https://worklog.be/feed

PerlからWordPressを操作する
WordPressのwp_optionsテーブルって結構便利
PerlとかPHPで外部コマンドを実行した時の戻り値を判定する
WordPressのstyle.cssに任意のバージョンを設定する
WordPressで利用するファイルのExpiresヘッダを見直す
WordPressで作ったコンテンツを最適化する試み
WP Super Cache の手動インストールメモ
WordPressでMinified化したstyle.min.cssを使う
TwentyFourteenに関連記事を表示する機能を追加する
TwentyFourteenにリッチスニペット対応のパンくずリストを追加

LWP でキャッシュを使うには他にもモジュールがあるのですが、試した感じ Cache::File が個人的には使いやすいと思いました。

簡単ですが PerlのLWPでCacheを使う は以上です。

おすすめのVPSサーバ

  • OSが選べる
  • VPS同士でLANが組める
  • 複数台構成向き

このブログで使っています。

  • 転送量が多いサービスに
  • 借りてるのは3年間一度もdown無し!

よく見られている記事

  • 本日
  • 週間
  • 月間