駆け込み寺直してもらってRSS生成のほう直し忘れていた
スポンサードリンク
http://blog.dtpwiki.jp/dtp/2007/07/adoberss_358b.html#comments
いつも拝見しています。
ところで駆け込み寺のRSSって死んでます?
投稿者: かたやなぎ (2007/07/19 9:20:11)
ところで駆け込み寺のRSSって死んでます?
はい、さっきまで死んでました、ていうか、
M.C.P.C.: DTP駆け込み寺スレッド表示モードでモダンブラウザでトピックリンクがきかない件直してもらいました。
のエントリで、掲示板メンテナーさんに不具合直してもらったときに入った修正箇所を、RSS 生成側で抽出キーワードとして使っていたんですね。全く面目ないです。
今は直っていますので、ご利用いただけます。ご指摘ありがとうございました。
つうわけで、ソース。結構古いソースやな。
#!/usr/bin/perl -w
use strict;
use LWP;
use XML::RSS;
use HTML::Entities;
use utf8;
use Encode;
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;
my $rss = XML::RSS->new;
$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) {
# $i++;
# print "$i $3\n";
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",
}
}
}
#exit;
my @sort = sort { $b->{date} cmp $a->{date} } @items;
splice (@sort, 50);
#my $i;
foreach my $item (@sort) {
#$i++;
#print "$i\n";
$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'},
},
);
}
}
#splice (@{$rss->{'items'}}, 50);
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 $_;
}
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2147





![: 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)


コメントする