M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2007年7月19日 22:51

駆け込み寺直してもらってRSS生成のほう直し忘れていた

このエントリーをはてなブックマークに追加 mixiチェック

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 $_;
}

投稿 大野 義貴 [RSS] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2147

コメントする