東証の適時開示情報サービスの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分間隔くらいで仕込めばいいかなと思ってる。

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