酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

10分でできるTwitter Bot @ Ruby

Where?Twitterボットは難しそうなイメージがありますが、作ってみるとこんなものかとビックリするくらい簡単です。ということで目標10分でTwitter Botを作ってみます。


Twitterにアプリを登録

(My applications | Twitter Developers)[https://dev.twitter.com/apps]でツイートするためのアプリを作成。

スクリーンショット 2013-01-06 22.32.59

アプリの作成(Create a new application)を実行。

スクリーンショット 2013-01-06 22.52.03

アプリの情報を記入。

Create an application   Twitter Developers

でアプリ作成されます。アプリが作成されたら、「Consumer key」と「Consumer secret」をメモして下さい。

スクリーンショット 2013-01-06 22.41.51

またアプリ画面でSetting => Application Type => Read and Writeに変更。

Access Token/Access Secretを取得

ターミナルを使って Access Token/Access Secretを取得。まずは、

1
2
3
4
5
6
7
8
9
10
11
12
# 必要なGemをインストール
gem install oauth

# irbを起動
irb
require 'rubygems'
require 'oauth'
CONSUMER_KEY = 'Consumer keyをセット'
CONSUMER_SECRET = 'Consumer Secretをセット'
consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => "https://twitter.com")
request_token = consumer.get_request_token
request_token.authorize_url #=> "https://twitter.com/oauth/authorize?oauth_token=xxxxxx" ここをブラウザで開く

"http://twitter.com/oauth/authorize?oauth_token=xxxxxx"をブラウザで開いて、連携アプリを承認を実行します。ここで認証をしたユーザーのアカウントにTwitterボットがつぶやきます。

8352313992_214493a1b7_o-1

認証後に書かれているPINをメモ。

8352313432_30f2bebeba_o-1

ここで先程のコンソール画面のirbに戻る。

1
2
3
4
5
6
access_token = request_token.get_access_token(:oauth_verifier => 'ブラウザでメモしたPINを貼り付け')
puts access_token.token
> xxxx #<= これがAccess Token、メモして下さい。
puts access_token.secret
> xxxx #<= これがAccess Secret、メモして下さい。
exit

Twitter Botプログラムを記述

ではTwitter Botを作成していきます。ここでは、Rails環境での利用を想定して、Rakeタスクとして作成していきます。

まずはGemfileに以下を追加して、bundle installを実行してください。

1
2
3
4
group :development do
  # Twitter用のライブラリ
  gem 'twitter'
end

続いてlib/tasks/twitter.rakeを作成して以下を記述。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
require 'twitter'

namespace :twitter do
    desc "ツイートする"
    task :tweet => :environment do
        ## アプリ登録時に取得したCONSUMER_KEY/CONSUMER_SECRET
        CONSUMER_KEY = 'xxxxx'
        CONSUMER_SECRET = 'xxxxx'
        ## irbで取得したAccess Token/Access Secret
        OAUTH_TOKEN = 'xxxxx'
        OAUTH_TOKEN_SECRET = 'xxxxx'

        Twitter.configure do |config|
          config.consumer_key       = CONSUMER_KEY
          config.consumer_secret    = CONSUMER_SECRET
          config.oauth_token        = OAUTH_TOKEN
          config.oauth_token_secret = OAUTH_TOKEN_SECRET
        end

        tweet = "テストツイート"
        update(tweet)
    end

    def update(tweet)
        begin
            tweet = (tweet.length > 140) ? tweet[0..139].to_s : tweet
            Twitter.update(tweet.chomp)
        rescue => e
            Rails.logger.error "<<twitter.rake::tweet.update ERROR : #{e.message}>>"
        end
    end
end

では実際に実行してみます。

1
rake twitter:tweet

Twitter画面側を確認すると「テストツイート」がつぶやかれていると思います。
もし、興味があれば是非チャレンジしてみて下さい!

おすすめの書籍