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を生成するコードが入っています。
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/19018/16827926
この記事へのトラックバック一覧です: InDesignの勉強部屋BBS移転したのでRSSを301転送かけたよ:





![森田 創: WEB+DB PRESS 総集編 [Vol.1~60]](http://ecx.images-amazon.com/images/I/51aE58LxWlL._SL75_.jpg)
















![: 電子ルーペ ViewPe[ビューペ] 3R-MSV35 マイクロスコープ デジタル顕微鏡 高機能 低価格 読書 植物 研究 肌チェック](http://ecx.images-amazon.com/images/I/41erkiQgAsL._SL75_.jpg)





![: Optimus bright [docomo L-07C] 対応 予備バッテリー 1500mAh BL-44JN](http://ecx.images-amazon.com/images/I/41gjqsDjq%2BL._SL75_.jpg)










![: パンツの穴 [DVD]](http://ecx.images-amazon.com/images/I/21R9SEY1HPL._SL75_.jpg)

















