InDesignの勉強部屋BBS移転したのでRSSを301転送かけたよ
スポンサードリンク
http://cgi.www5c.biglobe.ne.jp/~thats/study_bbs/study.cgi?mode=find&word=12461(リファついているとあかんのでコピペでどうぞ)
[12461] BBS移転のお知らせ 投稿者:YUJI 投稿日:2007/10/21(Sun) 13:29
掲示板を以下のURLに移転させていただきました。
http://www2.rocketbbs.com/11/bbs.cgi?id=thats
大変申し訳ありませんが、以後新しい掲示板の方へ書き込みをお願い致します。
なお、この掲示板もしばらくの間は残しておきますが、
書き込みはできませんのでご了承下さい。
よろしくお願い致します。
ということで、新しい掲示板になるそうですけれども、確認したところ、RSSが付いているみたいなんで、僕がオレオレ生成しているRSS(http://dtpwiki.jp/rss/indesign.xml)でアクセスしてきたら、新しいRSSへ転送することにしました。オレオレ、ていっても、古い掲示板についているやつが、僕がお願いしてオレオレRSSをつけていただいたやつなんですけれども。
ちなみに、今どきだと301で転送しないとアメーバブログみたいにつるしあげられそうなので、できる限り301で転送するようにしたよ。
# 転送うんぬん以前に、レンタルサーバの障害が起こっていてらちあかないので急遽うちのサーバにDNSふり直したんだけども大丈夫かな。
今まで使ってたRSS生成スクリプト:
#!/usr/bin/perl use strict; use LWP::Simple; use XML::RSS; use HTML::Entities; use utf8; use Encode; #my $url = $ENV{QUERY_STRING}; my $url = 'http://cgi.www5c.biglobe.ne.jp/%7ethats/study_bbs/study.cgi'; my $html = get($url); my $length_current = length( $html ); my $length_before; { open my $fh, '<', 'indesign.bytes' or $length_before = 0; if ( $length_before ne 0 ) { $length_before = <$fh>; close $fh; } } exit 1 if $length_before eq $length_current; { open my $fh, '>', 'indesign.bytes'; print $fh $length_current; close $fh; } $html = decode('cp932', $html); $html =~tr|\x00-\x1f||d; my $rss = XML::RSS->new; $rss->add_module( prefix => 'content', uri => 'http://purl.org/rss/1.0/modules/content/' ); $rss->channel( title => 'InDesignの勉強部屋', link => $url, description => "InDesignの勉強部屋 最新RSS", language => 'ja', ); # HTML から要素抽出 (my $Regex = <<'REGEX') =~ tr/\n//d; <td .+?><font color="#006400"><b>(.+?)</b></font> / (.+?) <td.+?<blockquote>(.+?)</blockquote></font></td></tr> </table>.+?<div align='right'>No\..+? (.+?)</div></td></tr></table> REGEX while ($html =~ m/$Regex/gs) { my $title = $1; my $name = $2; my $description = $3; my $date = $4; my $temp = normalize(" $description"); my $dcdate = datecheck($date); $rss->add_item( link => encode_entities( $url . "#$dcdate" ), title => normalize(" $title"), description => normalize2(" $description"), dc => { date => $dcdate, creator => normalize2($name), }, content => { encoded => "<![CDATA[$description]]>", }, ); } # 日付ソート @{$rss->{'items'}} = sort { $b->{dc}->{date} cmp $a->{dc}->{date} } @{$rss->{'items'}}; # 表示or出力 if ( $ENV{GATEWAY_INTERFACE} ) { require CGI; print CGI::header('text/xml; charset=utf-8'); print encode('utf8', $rss->as_string() ); } else { # print encode('utf8', $rss->as_string() ); $rss->save('indesign.xml'); } exit 0; #正常終了(RSS生成済み) sub normalize { local $_ = shift; s/^ //g; tr|\x00-\x1f||d; return $_; } sub normalize2 { local $_ = shift; tr|\x00-\x1f ||d; s/<(?:[^>'"]*|(['"]).*?\1)*>//gs; return $_; } sub datecheck { local $_ = shift; tr#/#-#d; s/\(.+\) /T/g; s/$/+09:00/g; return $_; }
このまえRSSの生成が、定時に生成するタイプなんで、BBSへの書き込みがリアルタイムでRSSに反映されないのが問題、という話があったので、1分ごとにcronまわして、getしてきたhtmlの大きさで新しい書き込みがあったかどうかを確認して、そのうえでRSSを生成するコードが入っています。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2256
コメントする