[pod] [xml]

名前

XML::RSS - RSSファイルを作成し更新します

概要

 # RSS 1.0ファイル(http://purl.org/rss/1.0/)を作成します
 use XML::RSS;
 my $rss = new XML::RSS (version => '1.0');
 $rss->channel(
   title        => "freshmeat.net",
   link         => "http://freshmeat.net",
   description  => "the one-stop-shop for all your Linux software needs",
   dc => {
     date       => '2000-08-23T07:00+00:00',
     subject    => "Linux Software",
     creator    => 'scoop@freshmeat.net',
     publisher  => 'scoop@freshmeat.net',
     rights     => 'Copyright 1999, Freshmeat.net',
     language   => 'en-us',
   },
   syn => {
     updatePeriod     => "hourly",
     updateFrequency  => "1",
     updateBase       => "1901-01-01T00:00+00:00",
   },
   taxo => [
     'http://dmoz.org/Computers/Internet',
     'http://dmoz.org/Computers/PC'
   ]
 );
 $rss->image(
   title  => "freshmeat.net",
   url    => "http://freshmeat.net/images/fm.mini.jpg",
   link   => "http://freshmeat.net",
   dc => {
     creator  => "G. Raphics (graphics at freshmeat.net)",
   },
 );
 $rss->add_item(
   title       => "GTKeyboard 0.85",
   link        => "http://freshmeat.net/news/1999/06/21/930003829.html",
   description => "GTKeyboard is a graphical keyboard that ...",
   dc => {
     subject  => "X11/Utilities",
     creator  => "David Allen (s2mdalle at titan.vcu.edu)",
   },
   taxo => [
     'http://dmoz.org/Computers/Internet',
     'http://dmoz.org/Computers/PC'
   ]
 );
 $rss->textinput(
   title        => "quick finder",
   description  => "Use the text input below to search freshmeat",
   name         => "query",
   link         => "http://core.freshmeat.net/search.php3",
 );
 # オプションで標準ではないmodule/namespaceの要素の混在
 $rss->add_module(prefix=>'my', uri=>'http://purl.org/my/rss/module/');
 $rss->add_item(
   title       => "xIrc 2.4pre2"
   link        => "http://freshmeat.net/projects/xirc/",
   description => "xIrc is an X11-based IRC client which ...",
   my => {
     rating    => "A+",
     category  => "X11/IRC",
   },
 );
  $rss->add_item (title=>$title, link=>$link, slash=>{ topic=>$topic });
 # RSS 0.91ファイルの作成
 use XML::RSS;
 my $rss = new XML::RSS (version => '0.91');
 $rss->channel(title          => 'freshmeat.net',
               link           => 'http://freshmeat.net',
               language       => 'en',
               description    => 'the one-stop-shop for all your Linux software needs',
               rating         => '(PICS-1.1 "http://www.classify.org/safesurf/" 1 r (SS~~000 1))',
               copyright      => 'Copyright 1999, Freshmeat.net',
               pubDate        => 'Thu, 23 Aug 1999 07:00:00 GMT',
               lastBuildDate  => 'Thu, 23 Aug 1999 16:20:26 GMT',
               docs           => 'http://www.blahblah.org/fm.cdf',
               managingEditor => 'scoop@freshmeat.net',
               webMaster      => 'scoop@freshmeat.net'
               );
 $rss->image(title       => 'freshmeat.net',
             url         => 'http://freshmeat.net/images/fm.mini.jpg',
             link        => 'http://freshmeat.net',
             width       => 88,
             height      => 31,
             description => 'This is the Freshmeat image stupid'
             );
 $rss->add_item(title => "GTKeyboard 0.85",
                link  => "http://freshmeat.net/news/1999/06/21/930003829.html",
                description => 'blah blah'
                );
 $rss->skipHours(hour => 2);
 $rss->skipDays(day => 1);
 $rss->textinput(title => "quick finder",
                 description => "Use the text input below to search freshmeat",
                 name  => "query",
                 link  => "http://core.freshmeat.net/search.php3"
                 );
 # RSS 0.9ファイルの作成
 use XML::RSS;
 my $rss = new XML::RSS (version => '0.9');
 $rss->channel(title => "freshmeat.net",
               link  => "http://freshmeat.net",
               description => "the one-stop-shop for all your Linux software needs",
               );
 $rss->image(title => "freshmeat.net",
             url   => "http://freshmeat.net/images/fm.mini.jpg",
             link  => "http://freshmeat.net"
             );
 $rss->add_item(title => "GTKeyboard 0.85",
                link  => "http://freshmeat.net/news/1999/06/21/930003829.html"
                );
 $rss->textinput(title => "quick finder",
                 description => "Use the text input below to search freshmeat",
                 name  => "query",
                 link  => "http://core.freshmeat.net/search.php3"
                 );
 # RSSを文字列で出力
 print $rss->as_string;
 # それをファイルに保存
 $rss->save("fm.rdf");
 # RSSファイルに要素を挿入し、既に15個の要素があるならば、
 # 最も古い要素を削除します
 my $rss = new XML::RSS;
 $rss->parsefile("fm.rdf");
 pop(@{$rss->{'items'}}) if (@{$rss->{'items'}} == 15);
 $rss->add_item(title => "MpegTV Player (mtv) 1.0.9.7",
                link  => "http://freshmeat.net/news/1999/06/21/930003958.html",
                mode  => 'insert'
                );
 # ファイルの代わりに文字列を解析します
 $rss->parse($string);
 # 各RSS要素のtitleとlinkを出力します
 foreach my $item (@{$rss->{'items'}}) {
     print "title: $item->{'title'}\n";
     print "link: $item->{'link'}\n\n";
 }
 # RSS 0.9あるいは0.91ファイルをRSS 1.0で出力します
 $rss->{output} = '1.0';
 print $rss->as_string;

説明

このモジュールはRDF Site Summary(RSS)の作成と管理のための基本的な フレームワークを提供します。このディストリビューションにはさまざまな 例が入っています。それによりRSSからのHTMLの生成、0.9、0.91、1.0の間の 変換、その他の気の利いたことを可能にしてくれます。 これは、あなたのWebサイトにSlashdotやFreshmeatのような情報源からの ニュースの提供をいれたいのであれば、あるいはあなた自身のコンテンツを 配信したいのであれば便利でしょう。

XML::RSSは現在、RSSの0.9、0.91、そして1.0バージョンをサポートしています。 RSS 0.91についての情報は http://my.netscape.com/publish/help/mnn20/quickstart.html をご覧ください。RSS 0.90 については http://my.netscape.com/publish/help/ を ご覧ください。RSS 1.0については http://purl.org/rss/1.0/

RSSは初めはNetscapeによってNetscape Netcenterチャンネルのために開発されました。 しかし多くのWebサイトが、それ以来、簡単な配信フォーマットとして それを採用してきました。RSS 1.0ができてからは、ユーザは今では ニュースの見出し、スレッド化されたメッセージ、製品カタログなどを含めた 多くの異なる種類の配信が可能になりました。

メソッド

RSS 1.0 モジュール

XML名前空間をベースとしたモジュール化によりRSS1.0に区画に仕切られた 拡張性を与えています。RSS 1.0で"あらかじめ"備えているモジュールは Dublin Core (http://purl.org/rss/1.0/modules/dc/)、 Syndication (http://purl.org/rss/1.0/modules/syndication/)、 そして Taxonomy (http://purl.org/rss/1.0/modules/taxonomy/)だけです。更なる情報については 適切なモジュールのドキュメントにあたってください。

これらのモジュールからXML::RSSに要素を追加することは、title、link、そして descriptionのような他の属性を追加することと同じくらい簡単です。違いは、 第2レベルのハッシュでそれらのキー/値のペアの区画分けだけです。

  $rss->add_item (title=>$title, link=>$link, dc=>{ subject=>$subject, creator=>$creator });

Dublin Coreモジュールの要素には、キー 'dc'を、 Syndicationモジュールの要素には'syn'、Taxonomyモジュールの要素には'taxo'を 使ってください。これらはRSS XML それ自身で使われる接頭辞です。 これらは適切なURIをベースとした名前空間で関連付けられます:

  syn:  http://purl.org/rss/1.0/modules/syndication/
  dc:   http://purl.org/dc/elements/1.1/
  taxo: http://purl.org/rss/1.0/modules/taxonomy/

Dublin Core 要素はchannel、item、textinputで発生するかもしれません -- 例えimageやtextinputの下で見つけることがあまりなかったとしても。 Syndication要素はchannel要素に限られています。Taxonomyはchannelあるいは item要素で発生することができます。

XML::RSSを使ってRSS 1.0ドキュメントを解析した後、モジュール要素への アクセスは、あなたの都合に合わせて接頭辞あるいは名前空間URIのどちらかを 通してください。

  print $rss->{items}->[0]->{dc}->{subject};
  または
  print $rss->{items}->[0]->{'http://purl.org/dc/elements/1.1/'}->{subject};

XML::RSSは、channel、image、item、そしてtextinputレベルでの"標準ではない" RSS 1.0 モジュール化もサポートしています。RSSドキュメントの解析は、出現するかもしれない 他の名前空間の要素をすべて捕らえます。XML::RSSは、RSSドキュメントを構築するとき 任意の名前空間と関連付けられた要素を入れることも許しています。

例えば、作られた"My"モジュールの要素を追加するためには、まず接頭辞をURIに 関連付けることにより名前空間を宣言します:

  $rss->add_module(prefix=>'my', uri=>'http://purl.org/my/rss/module/');

それから通常通り続けていきます:

  $rss->add_item (title=>$title, link=>$link, my=>{ rating=>$rating });

しかし標準では名前空間は、現在のところ簡単な接頭辞を通してアクセスすることは できません;それらの名前空間URLを通してアクセスしてください。そのため以下の ようになります:

  print $rss->{items}->[0]->{'http://purl.org/my/rss/module/'}->{rating};

XML::RSSはそれらが現れたように標準のRSS 1.0 モジュールの組込みサポートを 提供し続けます。

ソースの取得場所(=SOURCE AVAILABILITY)

このソースはSourceForgeプロジェクトの一部となっており、そこでは CVSに最新のソースが前のリリースと同様に入っています。

        https://sourceforge.net/projects/perl-rss/
        http://perl-rss.sourceforge.net

もし、私がこの世からいなくなっても、プロジェクトの他のメンバーの だれかが、このモジュールを適切に導くことができます。

作者(=AUTHOR)

        元のコード: Jonathan Eisenzopf <eisen@pobox.com>
        さらなる変更: Rael Dornfest <rael@oreilly.com>
        
        現在: perl-rss project (http://perl-rss.sourceforge.net)

著作権(=COPYRIGHT)

Copyright (c) 2001 Jonathan Eisenzopf <eisen@pobox.com> and Rael Dornfest <rael@oreilly.com>

XML::RSS is free software. You can redistribute it and/or modify it under the same terms as Perl itself.

クレジット(=CREDITS)

 Wojciech Zwiefka <wojtekz@cnt.pl>
 Chris Nandor <pudge@pobox.com>
 Jim Hebert <jim@cosource.com>
 Randal Schwartz <merlyn@stonehenge.com>
 rjp@browser.org
 Kellan <kellan@protest.net>
 Rafe Colburn <rafe@rafe.us>
 Adam Trickett <adam.trickett@btinternet.com>
 Aaron Straup Cope <asc@vineyard.net>
 Ian Davis <iand@internetalchemy.org>

参考資料

perl(1), XML::Parser(3).