ga city 泉和人の世界の印刷ニュースのRSSを用意しました(野良feed)
スポンサードリンク
http://blog.dtpwiki.jp/dtp/2007/12/post_7909.html#c16739440のコメントで要望があったga city [www.ga-city.com] の中のコンテンツ、泉和人の世界の印刷ニュース [www.ga-city.com] をRSSにしました。
http://dtpwiki.jp/rss/gacitynews.xml
今回のフィードの生成スクリプトはこちら。仕事でWeb::Scraper使ったのでその流れで使ってみました。
Filename: gacitynews.pl
#!/usr/bin/perl
use strict;
use warnings;
use Encode;
use LWP::UserAgent;
use utf8;
use URI;
use Web::Scraper;
binmode STDOUT => ':utf8';
# main routine
#
my $urls = get_urls();
my $entries;
foreach my $url ( @$urls ) {
my $result = get_page($url);
$result->{'link'} = $url;
push @$entries, $result;
}
my $xml = make_rss($entries);
print $xml;
exit;
# get_url: ニューストップページから個別ニュースページへのURLを取得
# (cp932->utf8: via http://subtech.g.hatena.ne.jp/miyagawa/20070921/1190358092)
#
sub get_urls {
my $uri = 'http://www.ga-city.com/showkazuto.php';
my $scraper = scraper {
process 'a.bluejtext',
'entries_new[]' => {
link => '@href',
description=> 'TEXT',
};
process 'a.pinktext',
'entries_old[]' => {
link => '@href',
description=> 'TEXT',
};
result
qw ( entries_new entries_old);
};
my $content = LWP::UserAgent->new->get($uri)->content;
$content = decode('cp932', $content);
my $items = $scraper->scrape(\$content, $uri);
my $list;
foreach my $item (@{$items->{'entries_new'}}) {
push @$list, $item->{'link'};
}
foreach my $item (@{$items->{'entries_old'}}) {
push @$list, $item->{'link'};
}
return $list;
}
# get_page: 個別ニュースページからFeed用データ取得
# (cp932->utf8: via http://subtech.g.hatena.ne.jp/miyagawa/20070921/1190358092)
# 平方メートル単位記号などが化けるので、ShiftJISではなくてcp932から変換した
#
sub get_page {
my $uri = shift;
my $scraper = scraper {
process 'tr>td.prepresstopbg1>span.whitebold',
'title' => 'TEXT';
process 'tr>td.redtext',
'date' => sub{
dateconv($_->content_list())
# 時刻文字列変換
};
process 'tr>td.graytext',
'description' => 'TEXT',
'content' => 'RAW', # 表組などHTML組版生かすため
;
result
qw ( title date description content );
};
my $content = LWP::UserAgent->new->get($uri)->content;
$content = decode('cp932', $content);
my $items = $scraper->scrape(\$content, $uri);
return $items;
}
# 日本語日付文字列(y年m月n日)からW3CDTF文字列に変換
# (via http://iandeth.dyndns.org/mt/ian/archives/000619.html)
#
sub dateconv {
use DateTime::Format::Strptime;
my $date = shift;
my $strp = DateTime::Format::Strptime->new(
pattern => '%Y年%m月%d日'# 文字列のパターンを指定
);
my $dt = $strp->parse_datetime($date);
return "$dt";
}
# RSSを生成する
#
sub make_rss {
use XML::RSS;
my $entries = shift;
my $rss = XML::RSS->new;
$rss->add_module(
prefix =>'content',
uri =>'http://purl.org/rss/1.0/modules/content/',
);
$rss->channel(
title => 'ga city:泉和人の世界の印刷ニュース',
link => 'http://www.ga-city.com/showkazuto.php',
description => 'ga city:泉和人の世界の印刷ニュース 最新ニュース',
language => 'ja',
dc => {
publisher => 'ga city',
contributor => 'DTPWiki.jp',
},
syn => {
updatePeriod => 'monthly',
updateFrequency => '2',
updateBase => '2007-12-01T17:00+09:00',
},
);
foreach my $item (@$entries) {
$rss->add_item(
link => $item->{'link'},
title => $item->{'title'},
description => $item->{'description'},
dc => {
date => $item->{'date'},
creator => $item->{'creator'},
},
content => {
encoded => "<![CDATA[$item->{'content'}]]>",
},
);
}
return $rss->as_string();
}
さて問題は、このスクリプトどの頻度で回転させるか、ということです。WatchDogもつくらなきゃいかんか。
(2008-9-20 13:21追記)
peacepact : 泉和人の世界の印刷ニュースの,泉和人氏が死去
ご冥福をお祈りします。
上記RSSの更新も停止いたします。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2320





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


ありがとうございます。
これで楽に巡回できますです;;