2009-11-04 RubyでTwitterで動くBOTをつくる
■RubyでTwitterで動くBOTをつくる
1,Rubyをインストールする
WindowsなどでRubyがインストールされていない場合は,下記サイトからダウンロードしてインストールします.
http://rubyforge.org/projects/rubyinstaller/
MacOSXなどは最初からインストールされているので必要ありません.
2,RubyGemsのバージョンをあげる
One-ClickインストーラだとGemsが古くて遅いので,下記サイトから最新版をダウンロードします.(ただし「gem -v」をして「1.2.0」以上なら最新版にする必要はないかもしれません)
http://rubyforge.org/projects/rubygems/
落としたrubygemsのzipを解凍して,コマンドプロンプトなどから中に入っている,「setup.rb」を実行すれば数分で最新版になります.
3,twitterをインストールする
コマンドプロンプトなどで
gem install twitter
と実行して,RubyGems経由でtwitterをインストールします.
もし,コンピュータをプロキシー内で実行してるときは,環境変数にプロキシの設定をしましょう.Windowsだったらたぶん次のようにします.
set http_proxy=http://hostname:port hostnameにプロキシサーバのアドレスなどportにポート番号を入れてね!
4,もちろんTwitterアカウントをとる
http://www.google.co.jp/search?q=twitter
BOT用のTwitterアカウントをとります.ログイン用のユーザ名とパスワードはプログラム中に書く事になるのでメモっとくといいでしょう.
5,開発する
ログインして,「HelloWorld」と発言するBOTを作りましょう.
require 'rubygems' require 'twitter' User = 'ユーザ名をここに' Pass = 'パスワードをここに' t = Twitter::Base.new( Twitter::HTTPAuth.new( User, Pass ) ) t.update( 'HelloWorld' )
上記コードの定数UserとPassに「4」で取得したアカウントのユーザ名を代入してあげるといいですよ.
ログインにはTwitter::HTTPAuthを使います.ちなみにプロキシ環境下ではTwitter::Base.new()をする前に,
Twitter::HTTPAuth.http_proxy( "hostname", port ) hostnameにプロキシのアドレス,portにポート番号を入れてね!
をやるといいですよ.
6,日本語を投稿するときの注意点
Twitterは発言するときに2byte文字はUTF8である事を期待しているようです.従って,次のようなコードはWindowsXPなどでは文字化ける可能性が高い.
t.update( 'こんにちは!' )
はっきり言えば,WindowsXPの存在自体が悪いのだけど.
解決策としては次のように日本語を送るときはUTF8に変換して送ればいい.
t.update( Kconv.kconv( 'こんにちは!', Kconv::UTF8 ) または t.update( Kconv.toutf8( 'こんにちは!' )
注意してね!
7,辞書からランダムに発言させよう.
たくさん文章を登録しておいてそこから適当に発言させるにはこうする.
…省略… t = Twitter::Base.new( Twitter::HTTPAuth.new( User, Pass ) ) …これより上記は今までと同じ… s = [ '勘違いしないでよ!義理に決まってるでしょ!', 'そっそんなこと私にいう必要は無いでしょう!勝手にしなさいよ!', 'な、何!?私じゃ不満っていうの!?', '痛いじゃないのっ。きーっ。ホント痛かったのよっ、馬鹿!'] t.update( s[ rand(s.size)] )
8,まとめ
9,follow返しをする
require 'rubygems' require 'twitter' User = 'ユーザ名をここに' Pass = 'パスワードをここに' t = Twitter::Base.new( Twitter::HTTPAuth.new( User, Pass ) ) followers = t.follower_ids following = t.friend_ids newbie = followers - following newbie.each do |i| t.friendship_create(i) end
t.follower_idsでフォローしてくれてる人のidがもらえます.t.friend_idsでフォローしてる人のidがもらえます.
上記のコードではRubyは配列を集合演算できるので,二つの差分をとり,フォローしてくれてるけどまだフォローしてない人を取り出します.
フォローしてない人をeachを使って繰り返して,フォロー申請しています.
らくちんらくちん!
ちなみにこれはあんまりやるとたぶんAPI制限とかに引っかかるのでうまく回数を分けてやるなどしましょう.
10,参考にしたページ
Rubyのコード:http://d.hatena.ne.jp/takahirox/20090523/1243086497
Rubyのコード:http://d.hatena.ne.jp/kkawamura/20090821/1250815267
