ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

WWW::MixiコミュのWWW::Mixiで使えるPerlテクニック

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Perlを上手に使って、上手にWWW::Mixiを使う。をテーマに。

ってCPANダウンロードのWWW::Mixiじゃ動かないか。

コメント(2)

キャッシュする!
あるユーザのマイミク一覧や、コミュニティ一覧をキャッシュするテクニック。

普通は、
my @items;
my $next;
my $url = "http://mixi.jp/list_friend.pl?id=${id}";
while( $url ne '' ){
  my $res = $mixi->get( $url );
  push( @items, $mixi->parse_list_friend( $res ) );
  $next = $mixi->parse_standard_history_next( $res );
  $url = $next->{'link'};
}
@items; ←これにマイミク一覧が入る。

なんてやってマイミク一覧を取ります。でもこれじゃ毎回取るので、結構時間がかかるし、下手すると「間隔をあけない〜」なんてなって、mixiが見れなくなります。
そこで、ファイルを作成してキャッシュします。

■まず保存部分。
use Data::Dumper;

my $dat;
@{$dat->{'data'}} = @items;
open( my $f, "> ${id}.dat" );
print $f Dumper( $dat );
close( $f );
これで、${id}.datにファイル保存されます。

■次、読み込み。
my $VAR1;
my $cmd = '';
open( my $f, "${id}.dat" );
while( <$f> ){
  $cmd .= $_;
}
close( $f );
eval( $cmd );
@items = @{$VAR1->{'data'}};
これで、@itemsに読み込まれます。

■キャッシュにする判断。
ファイルの更新日時を見て、例えば1時間以内にキャッシュが作成されたのならば、キャッシュを使えばいいじゃない。

my $fname = "${id}.dat";
my $lastmodified = (stat $fname)[9];
if( $lastmodified > time - 60*60 ){
  # キャッシュを使う
} else {
  # キャッシュが古いから、mixiから読む
}
実際のソースは以下のような感じ。
my @items;
my $fname = "${datadir}/friend/${id}.dat";
my $lastmodified = (stat $fname)[9];
if( $lastmodified > time - $friend_timeout ){
  my $VAR1;
  my $cmd = '';
  open( my $f, "${fname}" );
  while( <$f> ){
    $cmd .= $_;
  }
  close( $f );
  eval( $cmd );
  @items = @{$VAR1->{'data'}};
} else {
  my $url = "http://mixi.jp/list_friend.pl?id=${id}";
  my $next;
  while( $url ne '' ){
    my $res = $mixi->get( $url );
    push( @items, $mixi->parse_list_friend( $res ) );
    $next = $mixi->parse_standard_history_next( $res );
    $url = $next->{'link'};
  }
  my $dat;
  @{$dat->{'data'}} = @items;
  open( my $f, "> ${fname}" );
  print $f Dumper( $dat );
  close( $f );
}
return @items;

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

WWW::Mixi 更新情報

WWW::Mixiのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。