work.log

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

PerlのXML::FeedPP使い方のメモ(補完)

投稿:2014-05-06 02:15  更新:

Perl モジュールの XML::FeedPP の使い方を補完したメモ書きです。

以前に、下記で大体の取得系メソッドをまとめたのですが、「カテゴリ・タグ」の取得がよくわからないままだったのでちょっと補完します。

この記事で詰まってたのは下記のような事です。

ただ、「category」が複数の場合の取り方がイマイチ理解出来てないのでこれは後で調べる。これも get() で取れなくはないけど一つだけだし、category() で取ると取り出し方が良くわからず。

この部分ですが、何気なくやったらこんな感じに出来た。

foreach my $terms ($_->category()) {

    if (ref($terms) eq 'ARRAY') {

        foreach my $term (@$terms) {
            print "$term\n";
        }

    } else {
        print "$terms\n";
    }

}

Data::Dumper で category() を覗くとタダの配列のような気もするけど、複数の「カテゴリ・タグ」が設定されている場合はこんな感じにネストして取り出す。

ただ、xml で 「<category><![CDATA[Perl]]></category>」 のように出力されるので、カテゴリ、タグはこれだけでは区別が出来ないです。

とりあえず、前回のコードに今回を補完したのが下記。

#!/usr/bin/perl
 
use strict;
use warnings;
use XML::FeedPP;
 
    my $rss  = 'https://worklog.be/feed';
    my $feed = XML::FeedPP->new($rss);
 
    print "blog name  : " . $feed->title() . "\n";
    print "blog desc  : " . $feed->description() . "\n";
    print "blog url   : " . $feed->link() . "\n";
    print "blog lang  : " . $feed->language() . "\n";
    print "generator  : " . $feed->get("generator") . "\n";
 
    foreach ($feed->get_item()) {
 
        print "entry date  : " . $_->pubDate() . "\n";
        print "entry title : " . $_->title() . "\n";
        print "entry desc  : " . $_->description() . "\n";
        print "entry url   : " . $_->link() . "\n";
        print "entry author: " . $_->get("dc:creator") . "\n";
        print "entry terms :";

        foreach my $terms ($_->category()) {

            if (ref($terms) eq 'ARRAY') {

                foreach my $term (@$terms) {
                    print " $term";
                }

            } else {

                print " $terms";

            }

            print "\n";
        }
    }
 
exit;

実行結果はこんな感じになります。

blog name  : work.log
blog desc  : エンジニアの備忘録的ブログ
blog url   : https://worklog.be
blog lang  : ja
generator  : http://wordpress.org/?v=3.9

entry date  : 2014-04-30T10:09:39+00:00
entry title : ドメイン名の引っ越し
entry desc  : 本日、WordPress で書いている work.log を新しい (ry
entry url   : https://worklog.be/archives/3046
entry author: miura
entry terms : その他

entry date  : 2014-04-28T09:03:23+00:00
entry title : ユニバーサルアナリティクスでもクリックイベントを記録
entry desc  : Google Analytics のユニバーサルアナリティクス用 (ry
entry url   : https://worklog.be/archives/3042
entry author: miura
entry terms : jQuery SEO対策

WordPress の RSS から情報を取得するのはこれで OK なはず。xml のフォーマットが微妙に異なる場合は get->() 等で代用していけば OK。

簡単ですが、XML::FeedPP 使い方のメモは以上です。

おすすめのVPSサーバ

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

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

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

よく見られている記事

  • 本日
  • 週間
  • 月間