Rubyでロト6とナンバーズの予想番号をiPhoneに通知するコマンド作った
自宅サーバとなったRaspberry Piを有効活用できていなかったので、せっかくなら「ロト6とナンバーズの当選予想でもしてもらおう」と思い、Rubyでコマンドを作ってみました。
(現状は単にrand関数を使っているだけなので、予想というか適当に数字を出しているだけです) iPhoneへの通知には「 im.kayac.com」を使用するので、事前にim.kayac.comのアカウント登録とiPhoneアプリをインストールしておきます。
今回はCLIツールを手軽に作成できる「thor」 gemとim.kayac.comへの通知を手軽にできる「im-kayac」 gemを使わせていただきました。
- 縁起が良さそうなluckyディレクトリを作成
mkdir lucky
cd lucky
- Gemfileの作成
# Gemfile
source "https://rubygems.org"
gem 'thor'
gem 'im-kayac'
- gemのインストール
bundle install --path vendor/bundle
を実行
bundleがインストールされていない場合は
gem install bundler
でインストールを行なってください。
- luckyコマンドの作成
#!/usr/local/rvm/rubies/default/bin/ruby
# encoding: UTF-8
require 'rubygems'
require 'bundler/setup'
require 'thor'
require 'im-kayac'
class Lucky < Thor
desc "loto im-kayac-ACCOUNT [OPTIONS]", "send loto"
method_option :set, :type => :string, :aliases => '-s', :desc => 'change loto category'
def loto account
holy = HolyNumber.new
message = []
message << "loto : #{holy.loto(options[:set])}"
postImKayac(account, message)
end
desc "numbers im-kayac-ACCOUNT [OPTIONS]", "send numbers"
method_option :set, :type => :string, :aliases => '-s', :desc => 'change numbers category'
def numbers account
holy = HolyNumber.new
message = []
message << "numbers : #{holy.numbers(options[:set])}"
postImKayac(account, message)
end
private
def postImKayac(account, message)
begin
ImKayac.to(account).post(message.join("\n"))
rescue => e
STDERR.puts e
end
end
end
class HolyNumber
@@default_loto_type = 6
@@default_numbers_type = 4
def initialize
end
def numbers(set)
max_range = 9
result = []
if (set.nil?)
set = @@default_numbers_type
end
set = set.to_i
set.times do
result << (rand(max_range) + 1).to_i
end
return result.join("")
end
def loto(set)
max_range = 43
result = []
if (set.nil?)
set = @@default_loto_type
end
set = set.to_i
set.times do
result << get_loto_number(max_range, result)
end
return result.join(", ")
end
private
def get_loto_number(max, result)
number = sprintf("%02d", (rand(max) + 1).to_i)
return (result.include?(number)) ? get_loto_number(max, result) : number
end
end
Lucky.start
実行権限追加
chmod +x lucky
コマンドを実行してみるとヘルプが表示されます
./lucky
Commands:
lucky help [COMMAND] # Describe available commands or one specif...
lucky loto im-kayac-ACCOUNT [OPTIONS] # send loto
lucky numbers im-kayac-ACCOUNT [OPTIONS] # send numbers
オプションとして-sをつけると番号数を変更できるのでロト5やナンバーズ3にも対応しています。
ロト5の場合:
lucky loto im-kayac-ACCOUNT -s 5
ナンバーズ3の場合:
lucky numbers im-kayac-ACCOUNT -s 3
- cron設定
毎週水曜日のお昼に予想番号が届くように設定
crontab -e
00 12 * * 4 cd /home/apple/lucky;./lucky loto {my_account}
00 12 * * 4 cd /home/apple/lucky;./lucky numbers {my_account}
これで一週間の楽しみがひとつ増えました。
今はrand関数ですが、次は過去の結果を元に予想するように改良したいと思います。