東証の適時開示情報サービスのRSSをpraggerで作ってみた
既に作ってる人はいるけど、いつなくなるかわからないのとpraggerの勉強を兼ねて自作してみた。
RSS1.0
RSS2.0
praggerのインストール
最初はplaggerにしようとしたんだけど、cpanでどうやってもtest Plaggerが成功せずに挫折…praggerのほうはsvn coするだけ。超簡単。
svn co http://pragger.ikejisoft.com/svn/pragger/trunk/ pragger
pragger/plugin/Feed/tdnet_feed.rbを自作
いけてないけど晒してみる…。mechanizeに依存してるのでgem install mechanizeが必要。
require 'rss/maker' require 'rubygems' require 'mechanize' require 'kconv' def tdnet_feed(config, data) items = [] date = Time.now.strftime("%Y%m%d") base_url = "https://www.release.tdnet.info/inbs/" found = true count = 1 agent = WWW::Mechanize.new while found begin access_url = "#{base_url}I_list_00#{count}_#{date}.html" puts "get #{access_url}" page = agent.get(access_url) count += 1 doc = page.root doc.search("/html/body/form/div[4]/center/table/tbody/tr").each_with_index do |tr, index| next if index == 0 hhmm = tr.search("/td[1]").inner_text id = tr.search("/td[2]").inner_text name = tr.search("/td[3]").inner_text link_elm = tr.search("/td[4]").at(:a) link = base_url + link_elm[:href] description = link_elm.inner_text market = tr.search("/td[5]").inner_text hhmm = Kconv.kconv(hhmm, Kconv::UTF8) id = Kconv.kconv(id, Kconv::UTF8) name = Kconv.kconv(name, Kconv::UTF8) link = Kconv.kconv(link, Kconv::UTF8) description = Kconv.kconv(description, Kconv::UTF8) market = Kconv.kconv(market, Kconv::UTF8) item = RSS::RDF::Item.new item.title = "[#{id}][#{name}]#{description}" item.link = link item.description = description item.date = Time.parse("#{date} #{hhmm}") items.push(item) end rescue WWW::Mechanize::ResponseCodeError => ex puts ex.message found = false end end return items end
pragger/plugin/RSS/save.rb はちょっと変更した…
Index: plugin/RSS/save.rb =================================================================== --- plugin/RSS/save.rb (revision 87) +++ plugin/RSS/save.rb (working copy) @@ -6,6 +6,7 @@ ## ## - module: RSS::save ## config: +## version: 1.0 or 2.0 or atom ## title: An Title ## link: http://www.example.com/hoge.rdf ## description: sample rdf @@ -15,11 +16,13 @@ @count = Time.now.to_i def save(config,data) - rss = RSS::Maker.make("1.0") do |maker| + version = config['version'] || "1.0" + rss = RSS::Maker.make("#{version}") do |maker| maker.channel.about = config['about'] || config['link'] || "http://example.net/" maker.channel.title = config['title'] || "Pragger output" maker.channel.description = config['description'] || "" maker.channel.link = config['link'] || "http://example.net/" + maker.channel.lastBuildDate = Time.now data.each do |i| if(i.instance_of?(RSS::RDF::Item))
設定ファイル
pragger/tdnet_feed_rss1.0.yaml
- module: Feed::tdnet_feed - module: RSS::save config: version: 1.0 about: http://ikoan.org/ title: 適時開示情報(RSS1.0) link: http://ikoan.org/feeds/tdnet/index.rdf filename: /home/username/ikoan.org/feeds/tdnet/index.rdf
pragger/tdnet_feed_rss2.0.yaml
- module: Feed::tdnet_feed - module: RSS::save config: version: 2.0 about: http://ikoan.org/ title: 適時開示情報(RSS2.0) link: http://ikoan.org/feeds/tdnet/index.xml filename: /home/username/ikoan.org/feeds/tdnet/index.xml
実行方法
./pragger.rb -c tdnet_feed_rss1.0.yaml ./pragger.rb -c tdnet_feed_rss2.0.yaml
あとはこれをcronで5分間隔くらいで仕込めばいいかなと思ってる。
既に作ってた人
http://blog.bresson.biz/2007/01/rss_fff5.html
http://satoasak.seesaa.net/article/23070742.html
7/28 追記 5分間隔でcron仕込んだ
今のところ順調に動いてる模様。cron仕掛けるときにちょっとはまった。
- cron実行時は環境変数設定無視されることを知らなかった。
- $HOME みたいに書いても/home/usernameに展開されないらしい。
最終的に以下のような感じにしてうまくいった。
RUBYLIB=/home/username/root/local/lib/site_ruby/1.8 GEM_HOME=/home/username/.gems GEM_PATH=/usr/lib/ruby/gems/1.8:/home/username/.gems TZ=Asia/Tokyo */5 * * * * ~/root/pragger/pragger.rb -c ~/root/pragger/tdnet_feed_rss1.0.yaml >> ~/mylogs/create_tdnet_feed.log */5 * * * * ~/root/pragger/pragger.rb -c ~/root/pragger/tdnet_feed_rss2.0.yaml >> ~/mylogs/create_tdnet_feed.log