DTP駆け込み寺新BBS稼働開始! 当方生成野良更新停止/RSS自動転送
スポンサードリンク
DTP駆け込み寺の掲示板(BBS)が新BBSシステムに切り替わりました。
DTP駆け込み寺 掲示板 [www.dtptemple.org]
- ■新掲示板の主な変更点
- ・画像の張り込みができます。
- ・RSSの機能があります。
- ・URLはリンクになります。
- ・システムが変わりますので掲示板のデザインやユーザービリティは今のものと少し変わります。
- ■2009/6/14(日)に移行しました。
- 旧掲示板から新掲示板に移行しました。
新掲示板の利用方法をご覧いただいて、全体表示、ツリー表示、トピック表示などの画面からご利用ください。- ■データの引き継ぎ
- 新掲示板には旧掲示板のデータを引き継ぎました。 投稿番号のつき方のルールが違いますので、移植にあたって困りましたが、ご寛容をお願いいたします。
- ■旧掲示板
- 閲覧だけできるように残す予定ですが、新規投稿をできなくすることや、新掲示板へのリンクを付ける改修などをしようとしていますが、ちと、作業中でして、現在はエラーになってしまいます。(2009/6/14 15:00)
とのことです。RSS生成をしているとのことで、2006-04-18より3年にわたり当方で生成していたRSSの更新を停止し、301リダイレクトによる転送をかけました。
Filename: .htaccess
redirect 301 /rss/dtpkakekomidera.xml http://www.dtptemple.org/imgbbs/index.php?mode=rss1
RSSの生成をしていたスクリプトはこんな感じです。DTP駆け込み寺の掲示板の解析は非常に困難で、人のふんどしで相撲をしているようなもんではありますが、スクリプト自体にはすげえ愛着があります。確か、掲示板上では書き込み日付は年がない日付しか書かれていないのが困った記憶がある。
Filename: dtpkakekomidera.pl
#!/usr/bin/perl -w
use strict;
use LWP;
use XML::RSS;
use HTML::Entities;
use utf8;
use Encode;
use Data::Dumper;
#my $url = $ENV{QUERY_STRING};
my $url = 'http://gande.co.jp/cgi-momoco/2chview.cgi';
my @headers = (
'User-Agent' => 'DTPWiki.jp html2RSSbot(http://dtpwiki.jp/rss/dtpkakekomidera.xml)',
);
my $browser = LWP::UserAgent->new;
my $response = $browser->get($url, @headers);
exit 1 unless $response->is_success;
my $html = decode('cp932',$response->content);
$html =~ s/\x0D\x0A|\x0D|\x0A/\n/g;
$html =~ s|^.+次のページ</a>\n\t</div>\n</div>\n\n||sgo;
$html =~ s|\n\n<div class="linkmenu">.+$||sgo;
$html =~ s|\t|<tab />|g;
$html =~ tr/\x00-\x1f//d;
$html =~ s|<tab />|\t|g;
#print $html;
#exit;
my $rss = XML::RSS->new(version => '1.0', encode_output => 0);
$rss->add_module(
prefix=>'content',
uri=>'http://purl.org/rss/1.0/modules/content/',
);
$rss->add_module(
prefix=>'annotate',
uri=>'http://purl.org/rss/1.0/modules/annotate/',
);
$rss->channel(
title => 'DTP駆け込み寺 掲示板',
link => 'http://gande.co.jp/cgi-momoco/momoco.cgi?btype=pc&page=1',
description => 'DTP駆け込み寺 掲示板 最新書き込み(50件)',
language => 'ja',
dc => {
publisher => 'DTP駆け込み寺',
contributor => 'DTPWiki.jp',
},
syn => {
updatePeriod => 'hourly',
updateFrequency => '1',
},
);
my ($filesize,$link,$date,$title,$description,$platform);
my (%item,@items);
(my $Regex = <<'REGEX') =~ tr/\n//d;
<div class="comment">
\t<h4><a id="t_(..............)">(.+?)</a></h4>
\t<p>名前:<strong>(.+?)</strong>............
<span class="small"> \[(.+?)\]</span><br>
\t(.+?)
\t</p>\t(.+?)</div class="comment">
REGEX
my $i;
$html =~ s|</div><div class="comment">|</div class="comment"><div class="comment">|g;
$html =~ s|</div>$|</div class="comment">|;
while($html =~ m|$Regex|gsio) {
my $link = $1;
my $title = $2;
my $name = $3;
my $ua = $4;
my $description = $5;
my $html2 = $6;
$name =~ s|<a href=".+?">(.+?)</a>|$1|;
$ua = normalize2( $ua );
$date = datecheck2($link);
push @items ,{
title => normalize2("$title"),
description => normalize2("$description --$name\[$ua\]"),
link => "http://gande.co.jp/cgi-momoco/momoco.cgi?btype=pc&mode=tp&ord=new&page=1&file=$link",
date => $date,
creator => normalize2($name),
content => "<![CDATA[<p>$description</p><p>$name\[$ua\]</p>]]>",
annotate => '',
};
# (my $year = $link) =~ s|(....).*|$1|;
(my $Regex2 = <<'REGEX') =~ tr/\n//d;
<hr>
\t<p>(...) 名前:<strong>(.+?)</strong> (../.. ..:..)
<span class="small"> \[(.+?)\]</span><br>
\t(.+?)\t</p>
REGEX
my $date_before = $date;
while ($html2 =~ m/$Regex2/gsio) {
my $number = $1;
$name = $2;
$date = $3;
$ua = $4;
$description = $5;
(my $year = $date_before) =~ s|(....).*|$1|;
my $date2 = "$year-$date:00";
$date2 =~ s|(..) (..)|$1T$2|;
$date2 = datecheck($date2);
if ($date2 lt $date_before) {
#$year++;
$date2 = "$year-$date:00";
$date2 =~ s|(..) (..)|$1T$2|;
$date2 = datecheck($date2);
}
$date_before = $date2;
$name =~ s|<a href=".+?">(.+?)</a>|$1|;
$ua = normalize2( $ua );
push @items ,{
title => normalize2("re\[$number\]:$title"),
description => normalize2("$description --$name\[$ua\]"),
link => "http://gande.co.jp/cgi-momoco/momoco.cgi?btype=pc&mode=tp&ord=new&page=1&file=$link#$number",
date => $date2,
creator => normalize2($name),
content => "<![CDATA[<p>$description</p><p>$name\[$ua\]</p>]]>",
annotate => "http://gande.co.jp/cgi-momoco/momoco.cgi?btype=pc&mode=tp&ord=new&page=1&file=$link",
}
}
}
my @sort = sort { $b->{date} cmp $a->{date} } @items;
splice (@sort, 50);
foreach my $item (@sort) {
$description = $item->{'description'};
if ($item->{'annotate'} eq '') {
$rss->add_item(
link => $item->{'link'},
title => $item->{'title'},
description => $item->{'description'},
dc => {
date => $item->{'date'},
creator => $item->{'creator'},
},
content => {
encoded => $item->{'content'},
},
);
}
else {
$rss->add_item(
link => $item->{'link'},
title => $item->{'title'},
description => $item->{'description'},
dc => {
date => $item->{'date'},
creator => $item->{'creator'},
},
content => {
encoded => $item->{'content'},
},
annotate => {
reference => $item->{'annotate'},
},
);
}
}
if ($ENV{GATEWAY_INTERFACE}) {
require CGI;
print CGI::header(
-type => 'text/xml',
-charset => 'utf-8',
);
}
print encode('utf8', $rss->as_string() );
sub normalize {
local $_ = shift;
tr/ \r\n//d;
return $_;
}
sub normalize2 {
local $_ = shift;
tr|\x00-\x1f ||d;
s/<(?:[^>'"]*|(['"]).*?\1)*>//gs;
return $_;
}
sub datecheck {
local $_ = shift;
tr#/#-#d;
s/\(.+\) /T/g;
s/^: //g;
s/$/+09:00/g;
return $_;
}
sub datecheck2 {
local $_ = shift;
s/^(....)(..)(..)(..)(..)(..)/$1-$2-$3*$4:$5:$6+09:00/;
tr/*/T/;
return $_;
}
新しい掲示板になって、もっとDTP関連の人の情報交換が進むといいなあと思っています。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2882





![: Amazon.co.jp: プラスティック・メモリーズ 1【完全生産限定版】(イベントチケット優先販売申込券付) [Blu-ray]](/lists/_9/B00VWX66E8.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 2【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66K2.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 3【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6MV0.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 4【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66IO.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 5【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6Y0E.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 6【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX69D6.jpg)


コメントする