読者です 読者をやめる 読者になる 読者になる

A little bit of everything

情報系大学院生の備忘録

RubyでTwitterのBotを作ってみた(前編)

Rubytter という RubyTwitter APIbot を作る。

※以下はrubyとgemが入っていることが前提
OS X 10.9.5 を使用


まずはRubytterのインストール

$ sudo gem install rubytter
Password:
Fetching: oauth-0.4.7.gem (100%)
Successfully installed oauth-0.4.7
Fetching: rubytter-1.5.1.gem (100%)
Successfully installed rubytter-1.5.1
Parsing documentation for oauth-0.4.7
Installing ri documentation for oauth-0.4.7
Parsing documentation for rubytter-1.5.1
Installing ri documentation for rubytter-1.5.1
2 gems installed


まず、index.rbというファイルを作って、次のようなプログラムを書いた。

require 'rubygems'
require 'rubytter'

client = Rubytter.new('username', 'passwd')  #適宜変更
client.update("test")  #こうやって書くと投稿できる

↑を実行したら怒られた。↓みたいな感じで。

$ ruby index.rb 
/Library/Ruby/Gems/2.0.0/gems/rubytter-1.5.1/lib/rubytter.rb:231:in `http_request': Rubytter::APIError (Rubytter::APIError)
    from /Library/Ruby/Gems/2.0.0/gems/rubytter-1.5.1/lib/rubytter.rb:167:in `post'
    from (eval):2:in `update_status'
    from /Library/Ruby/Gems/2.0.0/gems/rubytter-1.5.1/lib/rubytter.rb:138:in `update_status'
    from /Library/Ruby/Gems/2.0.0/gems/rubytter-1.5.1/lib/rubytter.rb:148:in `update'
    from index.rb:10:in `<main>'

今のコードはBASIC認証を使っているが、調べてみたらOAuthでやんなきゃいけないらしい。BASIC認証は廃止されたみたい。

www.itmedia.co.jp


ということで、OAuthをinstall
(ちなみに、OAuthを使うと、投稿した際に表示される投稿元クライアント名を自由に設定できるらしい。)

$ sudo gem install oauth
Successfully installed oauth-0.4.7
Parsing documentation for oauth-0.4.7
1 gem installed


次にOAuthクライアントを登録する。まずはOAuthに登録したいTwitterアカウントに、Webからログインしておく。 ログインした状態で、 Twitter Application Management にアクセスして登録。

Access level は Read and write にしておけばOK(Readだけだと投稿できない)
Keys and Access Tokes タブに移動し、"Consumer key"と"Consumer secret"をメモする。
Create My Access Tokenをクリックし、”Access Token”と"Access Token Secret"をメモする。

RubyTwitterライブラリをインストール

$ sudo gem install twitter
(以下略)

ここ rubyでtwitterのbotを実装する(第5世代のやり方) - Qiita を参考に、↓のようなプログラムを作る。

# coding: utf-8
require "twitter"
require "oauth"

client = Twitter::REST::Client.new do |config|
  config.consumer_key = "XXXXXX"
  config.consumer_secret = "YYYYYY"
  config.access_token        = "ZZZZZZ"
  config.access_token_secret = "XYZXYZ"
end

client.update("Hello World from Ruby!")


これを実行すれば、

$ ruby index.rb 

ひとまずPOSTができるプログラムはOK!

後半へ続く