#!/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