« なんとか通勤をはじめた | トップページ | 紙の書籍に最初から“自炊”データ付けて売っちゃえよ »

2010.08.19

XML::FeedPP で複数のカテゴリがあるときはネスト対応する

なんか、また技術的メモ。

JapanLocal.info のトップページ右側に、このエントリが表示されるようにしているんだけど、これは tafworks.com (実はココログ) にポストしたエントリが自動表示されるようにしているだけ。エントリに「JapanLocal」というカテゴリがセットしてあったら、エントリデータを取得して JapanLocal.info の中に組み込む、という具合にしてある。

これまではカテゴリが単独の「JapanLocal」だったら取得できたが、別のカテゴリが同時にセットしてあると取ってこなかった( ていうより、そこまで頭が回らなかった )。が、複数カテゴリでも対応できるようにしてやろうということで、プログラムを少々改良した。

@niftyのココログにポストしたエントリのフィードを、さくらインターネットで perl使って取得している。ポイントは次のとおり( 必要なところだけ )。

  my $feed = XML::FeedPP->new( $source ) or die;
  foreach my $item ( $feed->get_item() ) {
    my @i_category = $item->category();
    my $chk_categ;

    if(@{$i_category[0]} == 0){
      $chk_categ = @i_category[0];
    }else{
      $chk_categ = join("\t",@{$i_category[0]});
    }
    
    if(index($chk_categ, '何かキーワード')>-1){
      # 何か処理
    }
  }

( JapanLocal.info で読んでいる人は上記コードが読みにくいと思います。ごめんなさい。リンクをたどってオリジナルのエントリをご覧ください )

カテゴリが一つのときは @i_category[0] のように配列先頭をスカラで取ればいいんだけど、カテゴリが複数になるとここが多次元配列になる――と、書いてみるとあまりにも当然すぎるんだけど。

ただし、ここで単純に @i_category[0] を join しようとしても ARRAY(0x…) のようにリファレンスが戻ってきてしまうので、 @{……} のようにして要素を呼び出してやる必要があるらしい。面倒だな~。

これで複数カテゴリをセットしても、目的とするカテゴリがセットしてあれば識別できるようになった。

【参考】 リファレンスについては次のページなんかが役に立った

・Perlのリファレンスの話 - ケーズメモ
http://d.hatena.ne.jp/ksmemo/20071214/p1

・リファレンス | Perl講座 [Smart]
http://rfs.jp/sb/perl/02/10.html

« なんとか通勤をはじめた | トップページ | 紙の書籍に最初から“自炊”データ付けて売っちゃえよ »

ウェブページ

フォト

hide module-header

redirect to tafworks.com

GglAnlytcs