back_to_index

Drifting Antigone Frontline

blogfeed(一般rss生成cgiの改良)

2003/04/20 15:39 JST

いい感じに挫折中。これで動くかモニターくるとうれしいです。
テストする環境が今ない……

取得するhtmlは

<div class="rss:item">

<a href=”permalink“>
</a>

<span class="rss:title">
記事のタイトル
</span>

<div class="rss:description">
本文
</div>

</div>

とゆう構造を想定。
でも多分うごかないんだろうなあ。

#!/usr/local/bin/perl -w

use 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/&/&amp;/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