リニューアル後のラフィアンの近況をメールで送信するrubyスクリプト

condition.rb

require 'rubygems'
require 'mechanize'
require 'action_mailer'
$KCODE = 'utf8'

module Ruffian
  module Condition



class HorseCondition
  attr_accessor :club
  attr_accessor :title
  attr_accessor :date
  attr_accessor :text
  attr_accessor :uri
  attr_accessor :id

  def md5
    Digest::MD5.hexdigest @title+@date+@text
  end

  def ==(other)
    md5 == other.md5
  end
    
end

class Conditions < Array
  def crawl uri
    agent = WWW::Mechanize.new
    agent.user_agent_alias = 'Mac Safari'
    read_page agent.get(uri)
  end

  def read_html html
    uri = URI.parse('http://www.ruffian.co.jp/')
    response_header = { 'content-type' => 'text/html' }
    page = WWW::Mechanize::Page.new uri,response_header,html,'200'
    read_page page
  end
  def read_page page
    page.search("//div[@class='condition_title']") {|condition_title|
      condition_date_box = condition_title.next_sibling
      condition_text = condition_date_box.next_node

      condition = HorseCondition.new
      condition.club = "ruffian"
      /.*愛馬番号:(\d+)/ =~ condition_title.inner_text.to_s
      condition.id = $1.to_i
      #TODO:set uri
      condition.uri = ""
      condition.title = condition_title.inner_text.to_s
      condition.date = condition_date_box.inner_text.to_s
      condition.text = condition_text.to_s
      push condition
    }
  end

  def load filename
    clear
    yaml = File.open filename ,"r"
    conditions = YAML.load yaml
    conditions.each  {|condition|
      push condition
    }
  end

  def store filename
    File.open( filename ,"w") { |file|
      file.write to_yaml
    }
  end

  def select_changed compared
    if compared.kind_of?(String)
      filename = compared
      compared = Conditions.new
      compared.load filename
    end
    result = self.clone
    result.delete_if {|e|
      compared.include? e
    }
    result
  end

  
end

class Mailer < ActionMailer::Base
  @@default_charset = 'iso-2022-jp'
  def ruffianMail(recipient, condition)
    require 'nkf'
    from 'FROMアドレス'
    recipients recipient
    subject NKF.nkf('-Uj','ruffian mail')
    body NKF.nkf('-Uj',<<EOM)
#{condition.title}
#{condition.date}
#{condition.text}
EOM
  end
  def Mailer.pop_auth pop3
    require 'net/pop'
    pop = Net::POP3.new( pop3[:address], pop3[:port] )
    pop.start( pop3[:user_name], pop3[:password] )
    pop.finish
  end
end



  end
end

ruffian_mail.rb

require 'condition.rb'

condition_filename = "ruffian_condition.yaml"

conditions = Ruffian::Condition::Conditions.new
conditions.crawl "http://www.ruffian.co.jp/pc/condition?age=0&type=1&recruit=falsei&start=0&num=10000&prev=0"

owner = {
  102121=> [ "to_address@example.com" ],
}

ActionMailer::Base.smtp_settings = {
  :address => 'SMTPサーバのアドレス',
  :port    => 25,
  :domain => 'SMTPサーバのアドレス',
  :user_name => 'ユーザアカウント',
  :password =>'パスワード',
}

# pop before smtp authentication
pop3 = {
  :address => 'popサーバのアドレス',
  :port    => 110,
  :user_name => 'ユーザアカウント',
  :password =>'パスワード',
}  
Ruffian::Condition::Mailer.pop_auth pop3

#conditions.select_changed(condition_filename).each {|c|
conditions.each {|c|
  if owner.key? c.id
    owner[c.id].each {|to|
      Ruffian::Condition::Mailer.deliver_ruffianMail(to,c)
    }
  end
}

conditions.store condition_filename

で、

ruby ruffian_mail.rb

とかやると、ownerに突っ込んだ番号の馬の近況がそれぞれ指定したアドレス達に送られます。
conditions.eachのところをconditions.select.....に入れ替えると前回実行した時から近況が変わっている馬だけがメール送信されるはず。

popでアクセスしてるのは、メールサーバがpop before smtpで認証をしていたから。

恥ずかしいコードだけど、晒しておく。

マイネトゥインクル

中団から動いて4角では先団の外。直線突き放して3馬身差圧勝。

某出資者の人に次の1000万で勝てれば、秋は大きいところでは?と電話で話したら、いやいや、そんな大きな期待はしないといっていた。でも、それを当て込んで週明け馬を買ってしまうくらいの気持ちだと思う。

orz

クラッチは8番手の内から伸びず9着。外から人気のない馬が何頭も飛んできていたから、内を回ったのが良くなかったのかなあ、とか思ったけど、何にしろ間違いないのは僕がすごく力が抜けたこと。ちくしょう。

屈腱炎の新治療法

これに対し同研究所の治療法は、馬の胸骨から採取した幹細胞を万能細胞として培養して患部に移植し、壊死した腱繊維を再生させる。二〇〇二年に米英で研究が始まり、同研究所は〇四年に着手。これまで十三頭に新治療法を施してきた。

フラムドパシオンに施された新しい治療法。考えてみれば当たり前だけど、馬にも万能細胞って使えるんですね。復帰までは時間がかかったけど、これということは再発のおそれが低かったりするのかな。

研究所のこういう成果って、もうちょっと大きく取り上げても良いと思う。読み物的にしか取り上げられないことが多いんで。