RubyデーモンでTwitterバルス!

はじめに

今日はラピュタの日。
Rubystならバルスを手でTwitter投稿するなど面倒くさいことはありえないですよね!

前準備:バルスのスペル

Balus」らしい

前準備:バルスの投稿時間

  • 番組情報を見ると、本日12/9 21:00〜23:34で放送
  • おそらくノーカット放送
  • バルスコピペ「本編開始から1時間55分5秒後に宣言」される
  • バルス直後が理想だがバルス前の誤投稿だけは避けたい
  • バルスの後は 「目がー」→「エピローグ」→「君をのせて」→次の番組間のCM でおそらく12〜15分ぐらいだろう。

以上の情報から予測して「2011/12/9 23:22」に投稿することに決定

前準備:Twitterライブラリインストール

Twitter用ライブラリインスコ

$ gem install twitter 

前準備:Twitter認証情報取得

https://dev.twitter.com/apps/newhttp://atoken4me.heroku.com/ を利用して
consumer_key、consumer_secret、oauth_token、oauth_token_secret を取得しておきます。

参考:http://route477.net/w/?RubyTwitterJa

ソースコード

ruby1.9.2前提で書いてます。

balus.rb

# coding: utf-8
require "rubygems"
require "twitter"
require "date"

# デーモン化
Process.daemon

class Balus

  BALUS_TIME = DateTime.new(2011, 12, 9, 23, 22, 00, Rational(9, 24))

  # 取得したTwitter用各データを設定
  Twitter.configure do |config|
    config.consumer_key = YOUR_CONSUMER_KEY
    config.consumer_secret = YOUR_CONSUMER_SECRET
    config.oauth_token = YOUR_OAUTH_TOKEN
    config.oauth_token_secret = YOUR_OAUTH_TOKEN_SECRET
  end
  
  while true
    if BALUS_TIME < DateTime.now
      Twitter.update("バルス!")
      exit
    end
    sleep(10)
  end

end

起動

$ ruby balus.rb
$ ps -ef | grep ruby
hoge 361 1 0 20:00 ? 00:00:00 ruby balus.rb

結果

バルスは予想した23:22より10数秒遅れて発生したのですが、
Twitterへの大量アクセスのおかげでAPI遅延が起こりほぼ完璧な投稿時刻となりました。
ちょっと驚くぐらい大成功!


バルス時刻(推定):23:22:15
投稿完了時刻 :23:22:30