#!/usr/bin/perl
# convert DI (WDB version) to RSS (RDF Site Summary)
# WDB の DI ファイルを RSS (RDF Site Summary) に変換する Perl スクリプトです.
# WDB http://na01.shonan.ne.jp/%7Egorry/wdb/
# 2003-02-13 (c) おのひろき ONO Hiroki http://onohiroki.cyling.jp/
# 漢字コードの変換を行わずに標準出力に出力します.
# なにかで UTF-8 に変換する必要があります.
# 例えば di2rss.pl | nkf -w > ../wdb.rdf とかね.
# 勝手に書き換えて,勝手に再配付して下さい.RSS を普及させよう.
# ぼくは Perl については,きちんと勉強した事がないので,動けばいいや!って
# 感じのできなので,これはいかん って思ったところがあったら,教えて下さい.
# 無保証でそのまま公開するものですから,そのつもりで利用されたし.
# 2003-02-13 最初の公開バージョン di2rss.pl ver.2003-02-13
# 2003-02-14
# - に X-WDB-Author-Name を入れるようにしました.
# - には NetNewsWire で見た時に,更新日がわかるように更新時刻情報をいれるようにしました.
# 2003-02-26 dc:date が空の場合の処理
# 2003-03-05 時刻を GMT からローカルに変換してタイトルに追加する処理
# 2003-04-03 4 月になって時刻関係で間違いがあったのに気が付いたので修正
$infile = "/home/htdocs/antenna/wdb.di";
$ubase ="http://your web site/";
$antennaname = "ANTENNA";
$antenaurl = "http://your web site/antenna/";
$rdfurl = "http://your web site/antenna/wdb.rdf";
$antenadescription ="アンテナ,それは更新時刻情報付きリンク集";
$max_items =150;
$num_items =0;
$outputstr1="";
$outputstr2="";
$rdftitle="";
$lastmodified="";
$y = 2003;
$m = 1;
$d = 1;
$t = "";
open(IN0,"$infile");
while(){
if (/(URL:[¥t¥s]*)(http:.+)/) {
$u = $2;
$u =‾ s/¥&/¥&/gi;
$u =‾ s/¥‾/¥%7E/gi;
$rdflink = $u;
}
if (/(X-WDB-Title:[¥t¥s]*)(.+)/) {
$rdftitle = $2;
$rdftitle =‾ s/¥&/¥&/gi;
}
if (/(X-WDB-Author-Name:[¥t¥s]*)(.+)/) {
$author = $2;
$author =‾ s/¥&/¥&/gi;
$dccreator = $author;
}
if (/(Last-Modified:[¥t¥s]+)(¥w+, )(¥d+)( ¥w+ )(¥d+)(.+)/) {
$y = $5;
$m = $4;
$d = $3;
$t = $6;
$m =‾ s/Jan/01/gi;
$m =‾ s/Feb/02/gi;
$m =‾ s/Mar/03/gi;
$m =‾ s/Apr/04/gi;
$m =‾ s/May/05/gi;
$m =‾ s/Jun/06/gi;
$m =‾ s/Jul/07/gi;
$m =‾ s/Aug/08/gi;
$m =‾ s/Sep/09/gi;
$m =‾ s/Oct/10/gi;
$m =‾ s/Nov/11/gi;
$m =‾ s/Dec/12/gi;
#$m =‾ s/¥ /¥-/ig;
$m =‾ s/¥ //ig;
$t =‾ s/ JST/+09:00/gi;
$t =‾ s/ GMT/+00:00/gi;
$t =‾ s/ $w$w$w//gi;
if ($d < 10) {
$d = "0".$d;
}
$t =‾ s/¥ //gi;
$dcdate = $y."-".$m."-".$d."T".$t;
#$rdfdescription = $dcdate;
$t =‾ /(¥d¥d):(¥d¥d):(¥d¥d)/;
if (($m-1) > -1) {
($ls,$lmin,$lh,$ld,$lm,$ly,$lwday,$lyday,$lisdst) = localtime(timegm($3,$2,$1,$d,($m-1),$y));
$ltime = ($ly+1900)."/".($lm+1)."/".$ld." ".$lh.":".$lmin;
}
}
if ($author && $num_items < $max_items) {
$outputstr1= $outputstr1." - ¥n";
$outputstr1= $outputstr1." ".$ltime." ".$rdftitle."¥n";
$outputstr1= $outputstr1." ".$rdflink."¥n";
#$outputstr2= $outputstr2." ¥n";
if ($rdfdescription){
$outputstr1= $outputstr1." ".$rdfdescription."¥n";
}
if ($dccreator){
$outputstr1= $outputstr1." ".$dccreator."¥n";
}
if ($dcdate){
$outputstr1= $outputstr1." ".$dcdate."¥n";
}
$outputstr1= $outputstr1."
¥n";
@outlist[$num_items]=$outputstr1;
$num_items = $num_items + 1;
#print "item: ".$num_items."¥n";
$rdftitle = "";
$rdfdescription = "";
$dccreator = "";
$dcdate ="";
$author = "";
$outputstr1 = "";
$ltime = "----/--/-- --:--";
}
if (/eof()/) {$. = 0;}
}
@outlist2 = sort { (split(/<¥/?dc:date>/,$b))[1] cmp (split(/<¥/?dc:date>/,$a))[1] } @outlist;
$num_outlist = 0;
while($num_outlist < $num_items){
$tmp = @outlist2[$num_outlist];
$tmp =‾ /(- )/;
$u = $2;
#print "u:".$u;
#print "tmp:".$tmp;
$outputstr2= $outputstr2." ¥n";
$num_outlist = $num_outlist + 1;
}
print <
$antennaname
$antenaurl
$antenadescription
$outputstr2
@outlist2
END_OF_DATA