アニメイトTVのATVニュース一覧を取得するPRaggerプラグイン
アニメイトTVがRSSを配信してくれないのでニュース一覧を取得するプラグインを書いてみました.役に立つかどうかは不明です.需要ないだろうし.あと全文配信です.たぶん.
ニュース速報の方はまだ書いてないですけど正規表現パターン変えるだけで済むんでないかと思うのでそのうち.まーそれを言ったら他のニュースサイトもURLとパターン変えるだけなんですが.*1
以下ソースです.ファイル名は"atv_news.rb",文字コードはUTF-8で保存してください.
(追記10/25):スーパーpre記法のバグ?の所為か,個別記事のURL(http://d.hatena.ne.jp/nana_mai2/20070923/1190553845)で見ると,ソース中の正規表現で使っているHTMLのコメント部分(<!-- 〜 -->)が見えなくなっています.(参考:http://i.hatena.ne.jp/idea/16978)
個別記事で見ている方は,次のURLで見てください:
http://d.hatena.ne.jp/nana_mai2/20070923
- atv_news.rb
require 'open-uri' require 'rss/maker' require 'kconv' class RSS::Maker::RSS10::Items::Item def get_description(url) capture = /<!-- ===== ニュース詳細 \/ メイン記事 ===== -->(.+?)<!-- ===== 拡張記事/通販枠部分 ===== -->/m if open(url).read.toutf8 =~ capture return $1.gsub(/src="(?:\.\.)?(.+?)"/){"src=\"http://www.animate.tv#{$1}\""} else nil end end def parse(split_text) if split_text =~ /<a href="(.+?)">/ self.link = "http://www.animate.tv/news/"+$1 self.description = get_description(self.link) end if split_text =~ /<a.+?>(.+?)<\/a>/m self.title = $1.gsub(/[\t\r\n]|(<.+?>)/,"") end end end def atv_news(config,data) url = 'http://www.animate.tv/news/index2.php?type=none' capture = /<!-- ########## ニュース ############################## -->(.+?)<!-- ########## ニュース一覧 ############################## -->/m split = /(<a href="detail\.php\?id=.+?">.+?<\/a>)/m rss = RSS::Maker.make("1.0") do |maker| maker.channel.about = "http://www.animate.tv/news/index.php" maker.channel.title = "ATVニュース" maker.channel.description = "" maker.channel.link = "http://www.animate.tv/news/index.php" body = "" if open(url).read.toutf8 =~ capture body = $1 else return [] end count = 0 body.gsub(split) do break if config['size'] && count == config['size'].to_i count += 1 maker.items.new_item.parse($1) end end return rss.items end
続いてconfigのサンプル.
一覧ページの記事全部取ってくるとどえらい量(60本!)になるので,記事を何本取ってくるかsizeで指定しています.
sizeは省略可能で,省略したときは全部取ってきます.全部取ってくると結構時間かかります.
- module: Feed::atv_news config: size: 10 - module: RSS::save config: filename: ./hoge.rdf
*1:そのためのcustom_feed.rbなんでしょうが,あれはどうも使いづらくて・・・