RubyでTwitterにStreaming接続してbotを作ってるお話
Twitterでリマインダをするのが一番楽なのではないかと思いRubyのTwitterGemを使いbotを作りはじめました。
とりあえず今回はRubyでTwitterに接続するお話を、前回の短すぎる内容ではなく、調べながら理解したことを踏まえて書いていきます。
# twitter-reminder.rb require 'twitter' require 'yaml' def connect_twitter keys = YAML.load_file('./config.yml') @client = Twitter::Streaming::Client.new do |config| config.consumer_key = keys['twitter']['consumer_key'] config.consumer_secret = keys['twitter']['consumer_secret'] config.access_token = keys['twitter']['access_token'] config.access_token_secret = keys['twitter']['access_token_secret'] end @rest_client = Twitter::REST::Client.new do |config| config.consumer_key = keys['twitter']['consumer_key'] config.consumer_secret = keys['twitter']['consumer_secret'] config.access_token = keys['twitter']['access_token'] config.access_token_secret = keys['twitter']['access_token_secret'] end @user_screen_name = @rest_client.user.name end def stream @client.user do |status| if status.is_a?(Twitter::Tweet) puts "#{status.user.name} (#{status.user.screen_name})" puts status.text puts '---' end end end def tweet @rest_client.update(ARGV[0]) end connect_twitter unless ARVG[0] stream else update end
consumer_key等の情報は利便性を考え別ファイルにyamlとして記述します。
# config.yml twitter: consumer_key: "YOUR_CONSUMER_KEY" consumer_secret: "YOUR_CONSUMER_SECRET" access_token: "YOUR_ACCESS_TOKEN" access_token: "YOUR_ACCESS_TOKEN_SECRET"
consumer_key等の取得は、Twitter Developersから新規アプリを登録し、その中のAPI keysにある情報を記述してください。また投稿やDMを使用するため、Permissions内のRead, Write and Access direct messagesにチェックを入れてください。
まず最初にconnect_twitterでTwitterに接続します。ここでは自分自身のアクセストークンを記録し、自分自身のアカウントの情報にアクセスできるようにします。
Twitter::Streaming::ClientクラスではStreaming APIを操作できるのですが、こちらからは投稿やユーザ情報の取得ができないため、REST API操作用のTwitter::REST::Clientクラスのインスタンスも生成します。
引数がある場合はtweetメソッドを呼び引数の値をツイート、ない場合は自分のタイムラインをストリーミングする、というコードにしています。
Twitter::REST::Clientクラスのupdateメソッドでは引数をそのままツイートします。
Twitter::Streaming::Clientのuserメソッドでは、Streaming APIと繋ぎっぱなしにし、認証ユーザのタイムラインをストリーミングします。
流れてきたstatusがTwitter::Tweet型である場合のみそのツイートを表示するようにしました。ここではuserメソッドtextメソッドを使ってツイートの詳細を取得しています。
ここからリマインダとしては、ツイートの発言者(status.user.screen_name)とリプライ先(status.in_reply_to_screen_name)が自分(@user_screen_name)と同じだった場合にリマインダであると判断し、細かい条件分けにかけていく感じです。(多分status.textに対して正規表現使うより処理が早そう。)
という感じでTwitterでbotを作るのはこんな感じです。すぐ出来ると思うので試してみてください。(なかなかしっくりくる記事がなかった(updateだけどかstreamingだけとか)のでがんばって書いたつもりです。)
リマインダの部分は長いのとまだコードをきれいにしているところなので2回に分けて次回書きます。