__END__以下に記述されたタブ区切りのサイト名とURLから各サイトを訪れ、htmlファイルを取得する。そのページに含まれる最新ニュースのタイトル、リンク、サマリーを取り出してリストアップする。その際にリンクに省略されているURLの最初の部分を補完する。各サイト毎に一覧にまとめてHTMLファイルを作成し、FTPでWebサイトにアップロードする。JISで書かれているページはjcode.plを使用してsjisに変換してからパターンマッチにより加工している。Perlは5.6.0、jcode.plは2.13を使用した。[5/13/2001]
use LWP::Simple;
use Net::FTP;
require 'jcode.pl';
# Setup your configuration.
$ftpsite = '';
$ftpaccount = '';
$ftppassword = '';
$yourdir = '';
$newsfile = 'mynews.html';
($scriptfilename = $0) =~ s/^([^.]+)\.pl$/$1/i;
$| = 1;
while(<DATA>){
($site,$target)=split(/\t+/,$_);
print "Accessing to $target.....\n";
if($site =~ /Linux Report/){
@lines = split(/\n/, (get $target));
foreach $line (@lines){
if($line =~ s|^<!-- ep-LIN-LINK\d+ -->(<A HREF=")\.\.(.+)$|<BR><FONT COLOR="#EBAB02">■$1http://www.idg.co.jp/report/linux$2|){
$link = $line;
}elsif($line =~ s|^<!-- ep-LIN-TITLE\d+ -->(.+)$|</FONT><FONT COLOR="#1D20AF">$1</FONT></A> |){
$title = $line;
}elsif($line =~ s/^<!-- ep-LIN-DATE\d+ -->(.+)$/$1<BR>/){
$date = $line;
}elsif($line =~ s/^<!-- ep-LIN-GAIYOU\d+ -->(.+)$/$1<BR><BR>/){
$sitedata{"$site\t$target"} .= join("\n", $link, $title, $date, $line);
}
}
}elsif($site =~ /ZDNN:AnchorDesk/){
$body = (get $target);
if($body =~ m|(\d{2})(\d{2})年(\d{1,2})月(\d{1,2})日(.+)更新|s){
$newspattern = "/news/$2";
$month = (length($3) == 2) ? "$3/" : "0$3/";
$day = (length($4) == 2) ? "$4/\\w+\.html" : "0$4/\\w+\.html";
$newspattern .= $month . $day;
print $newspattern,"\n";
$sitedata{"$site\t$target"} = "<P>更新時刻: $1$2/$3/$4 $5</P>\n";
}
if(@newslist = ($body =~ m|<p>\s*.?\s*<a href="$newspattern">[^\n]+.?[^\n]+<br clear="left"></p>|gis)){
print scalar(@newslist),"\n";
foreach $news (@newslist){
$news =~ s|($newspattern)|http://www.zdnet.co.jp$1|gis;
$sitedata{"$site\t$target"} .= $news . "\n";
}
}
}elsif($site =~ /CNET/){
@lines = split(/\n/, (get $target));
$sitedata{"$site\t$target"} = "<ul>\n";
foreach $line (@lines){
if($line =~ /\d{4}年\s+\d{1,2}月\s+\d{1,2}日\s+.+曜日/){
$count++;
if($count == 2){
$sitedata{"$site\t$target"} .= "</ul>\n";
last;
}
}
if($count == 1){
$line =~ s|(<a href=")(/[^>]+>)|$1http://japan.cnet.com$2|i;
$sitedata{"$site\t$target"} .= "$line\n";
}
}
}elsif($site =~ /BizTech/){
$sitedata{"$site\t$target"} = "<BR>\n";
@lines = split(/\n/, (get $target));
foreach $line (@lines){
jcode::convert(\$line, 'sjis');
if($line =~ m|<!-- ▼▼▼▼▼NEWS\(\w+\)挿入▼▼▼▼▼ -->|){
$line =~ s|(<a href=")(/[^>]+>)|$1http://biztech.nikkeibp.co.jp$2|i;
$sitedata{"$site\t$target"} .= "$line\n";
}
}
}
undef @lines;
}
open(OUT,"> $newsfile");
print OUT <<EOB;
<HTML>
<HEAD>
<TITLE>My News</TITLE>
<META HTTP-EQUIV="Content-Type" content="text/html; charset="Shift_JIS">
<style type="text/css">
<!--
BODY{background:#FFFFF0}
.title{font-size:16pt;color:#336666;font-weight:bold}
.item{font-size:14pt;color:#FFFFFF;font-weight:bold;background:#FF9900;text-indent:15px}
.content{font-size:12pt;color:#336666;font-weight:bold}
.header{font-size:12pt;color:#CC0000;font-weight:bold;text-indent:5px}
.footer{font-size:10pt;color:#336666;font-weight:bold}
//-->
</style>
</HEAD>
<BODY>
<div class="title">My News</div>
EOB
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$thisday = (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$wday];
$thismonth = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[$mon];
print OUT "<div class=\"header\">Last updated : $hour:$min:$sec $thismonth $mday ($thisday) ", $year+1900,"\n</div>\n";
foreach $key (keys %sitedata){
($site, $target) = split('\t', $key);
print OUT "<P><div class=\"item\">Source:$site <A HREF=\"$target\">$target</A></div>\n$sitedata{$key}\n";
}
print OUT <<"EOE";
<HR>
<div class=\"footer\">
This table is generated by <A HREF=\"${scriptfilename}.html\">$0</A><BR>
This HTML is transported by Net::FTP module.<BR>
<I><A HREF=\"index.html\">TS Network</A></I>
\ <FONT COLOR=\"ORANGERED\">\>\></FONT>
</div>
</BODY>
</HTML>
EOE
close(OUT);
print "Connecting to $ftpsite ...\n";
$ftp = Net::FTP->new($ftpsite);
print "Just login ...\n";
$ftp->login($ftpaccount, $ftppassword);
print "Moving to $yourdir ...\n";
$ftp->cwd($yourdir);
print "Changing to ascii mode ...\n";
$ftp->ascii();
print "Transporting $newsfile ...\n";
$ftp->put($newsfile, $newsfile);
$ftp->quit();
print "FTP finished.\n";
__END__
Linux Report http://www.idg.co.jp/report/linux/top/index.html?navi
ZDNN:AnchorDesk http://www.zdnet.co.jp/news/anchordesk/index.html
CNET Japan Tech News: US CNET発 http://japan.cnet.com/News/us.html
BizTech ニュース Top News http://biztech.nikkeibp.co.jp/biztech/topics.shtml