blogfeed(一般rss生成cgiの改良)
いい感じに挫折中。これで動くかモニターくるとうれしいです。
テストする環境が今ない……
取得するhtmlは
<div class="rss:item">
<a href=”permalink“>
</a>
<span class="rss:title">
記事のタイトル
</span>
<div class="rss:description">
本文
</div>
</div>
とゆう構造を想定。
でも多分うごかないんだろうなあ。
#!/usr/local/bin/perl -wuse strict; use Yuki::RSS; use HTML::TokeParser; use LWP::Simple;
############################## my $blog_file = “index.html"; my $blog_title = “"; my $blog_url = “"; my $blog_description =""; ##############################
my $count = 1; my $link; my $content; my $stream; my $line; my $tag; my $description; my $title;
my $rss = new Yuki::RSS( version => ‘1.0′, encoding => ‘Shift_JIS’ );
$rss->channel( title => “$blog_title", link => “$blog_url", description => “$blog_description", );
#ファイルを取得。 if ($blog_file =~ m{^http://}) { $content = LWP::Simple::get($blog_file); } else { open(BLOG, “$blog_file") or die “Can’t open blog: $!n"; undef $/; $content = <BLOG>; close BLOG; }
$stream = HTML::TokeParser->new( $content ) or die $!;
print “content-type: text/xmlnn";
# open the blog HTML file
while ( $tag = $stream->get_tag("div") ) {
if ($tag->[1]{class} and $tag->[1]{class} eq ‘rss:item’) {
if ($count <= 15) { $count++;
$tag = $stream->get_tag(’a'); $link = $tag->[1]{href} || “–";
$tag = $stream->get_tag(’span’); $title = $stream->get_trimmed_text(’/span’) if ($tag->[1]{class} eq ‘rss:title’);
$tag = $stream->get_tag(’div’); $description = $stream->get_trimmed_text(’/div’) if ($tag->[1]{class} eq ‘rss:description’);
$link =~ s/&/&/g; $link = $blog_url.$link if ($link !~ m%~http://%);
$rss->add_item( title => “$title, link => “$link", description => “$description", ); } }
}
print $rss->as_string;
http://www.perl.com/pub/a/2001/11/15/creatingrss.html
http://www.hyuki.com/techinfo/yukirss.html