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
ありがとうございます。
これで楽に巡回できますです;;