2004年10月18日月曜日

MLへの新着メールのrssでの情報提供(その4)


rssを生成するスクリプト。

ほぼ頂き物そのままで、順番をいじっただけに近い(^^;



まずはテンプレート


<HTML>
[% ... %]
<TITLE>[% title %]</TITLE>
[% ... %]
<li><em>Date</em>: [% doc %]</li>
[% ... %]



perlスクリプトの方。

元の作者に敬意を表して、ttrss-multi.plと名付けた。




#!/usr/bin/perl
# ttrss-multi.pl - Generate feed from a site which is grabbable with Template::Extract.
#
# usage: perl ttrss-multi.pl example.tt http://www.example.com/ http://www.dada.com/
#
# 2004.01.11 Naoya Ito
# 2004.10.17 Hisaki Shibata
use strict;
use warnings;
use LWP::Simple;
use Template::Extract;
use XML::RSS;
use FileHandle;
use URI;
#if (@ARGV < 2) {
# print STDERR "usage: $0 <template> <url> [<url>]\n";
# exit(1);
#}
eval {
local $/; # read from file at once
my $fh = FileHandle->new( shift ) or die "cannot open template: $!";
my $template = $fh->getline;
$fh->close;
my $obj = Template::Extract->new;
my $rss = XML::RSS->new;
$rss->channel( title => "search luky.org rss service.",
link => "http://search.luky.org/index.rdf",
description => "search.luky.org Linux related New coming ML posts.");
my $count = @ARGV ;
print STDERR $count;
while($count--){
my $uri = URI->new( shift );
my $document = LWP::Simple::get($uri);
my $ext = $obj->extract( $template, $document);
$rss->add_item(
title => $ext->{title},
link => URI->new_abs($ext->{link}, $uri),
description => $ext->{doc},
);
};
print $rss->as_string;
}; if (my $err = $@) {
die;
}



上記のスクリプトをshellでくるんで


perl /hoge/ttrss-multi.pl /hoge/mhonarc.tt `cat /hoge/rdfargs.txt|xargs` > /hogehoge/index.rdf

みたいな感じで動かす。

��shell内では、もっとごそごそやってますけど。


1 件のコメント: