Windows & ruby2.2.2でuserstreamを使ったお返事twitter botを作る。

環境

  • OSはWindows 8.1
  • ruby 2.2.2p95 (2015-04-13 revision 50295) [x64-mingw32]
  • twitter用のgemはsferik/twitter · GitHubのv5.14.0を使用する

なぜWindowsかというと、Windowsでrubyを使っている気になるあのコ向けに書いてるからです。(まあ多分見ないだろうけど。)
eventmachineと組み合わせると、気になるあのコが作りたがってる時報botもWindowsのイベントタイマを使わずに実装できるため、eventmachineの上で動いているtweetstream/tweetstream · GitHubを使用したいと思っていました。が、どう頑張ってもSSLフラグが有効の状態でeventmachineをインストールできなかったため(gem install時にwith-ssl-dirを指定してもさっぱり有効にならない)、em-twitterが動かず、Windowsのruby2.2.2でtweetstreamを動かすのは無理なんじゃないかと思っています(解決法を教えて欲しいレベルでわからないです)。

botの仕様

userstreamを監視して、自分宛てのメンションが来た場合にお返事します。
EM::PeriodicTimer.new(3600)と組み合わせて時報botとお返事botを合体させたかったのですが、うまく動いてくれなかったので今後の課題としたいです。
(私がeventmachineとsferik/twitterの仕様を理解してないからなのですが。)

実装

require 'twitter'

# Consumer key, Secretの設定
CONSUMER_KEY     = "xxx"
CONSUMER_SECRET  = "xxx"
# Access Token Key, Secretの設定
ACCESS_TOKEN_KEY = "xxx"
ACCESS_SECRET    = "xxx"

## Windowsの証明書の検証回避用設定
## 環境変数SSL_CERT_FILEを設定したくない場合下記のコメントアウトを外す
## 正攻法ではないのでおすすめしない。そもそもWindowsでRuby使うこと自体(ry
#OpenSSL::SSL.module_eval{ remove_const(:VERIFY_PEER) }
#OpenSSL::SSL.const_set( :VERIFY_PEER, OpenSSL::SSL::VERIFY_NONE )

client = Twitter::REST::Client.new do |config|
    config.consumer_key       = CONSUMER_KEY
    config.consumer_secret    = CONSUMER_SECRET
    config.access_token        = ACCESS_TOKEN_KEY
    config.access_token_secret = ACCESS_SECRET
end

stream_client = Twitter::Streaming::Client.new do |config|
    config.consumer_key        = CONSUMER_KEY
    config.consumer_secret     = CONSUMER_SECRET
    config.access_token        = ACCESS_TOKEN_KEY
    config.access_token_secret = ACCESS_SECRET
end

# userstreamを表示する
stream_client.user do |object|
    if object.is_a?(Twitter::Tweet)
        puts "#{object.user.screen_name}: #{object.text}"
        # 自分宛てのメンションがきた場合、挨拶を返す
        if object.in_reply_to_screen_name == "YOUR_SCREEN_NAME"
            client.update("@#{object.user.screen_name} リプライありがとう。", options = {in_reply_to_status_id:object.id})
        end
    end
end

コメントを残す

お手数ですが半角数字で計算結果を入力してください。 *