この記事はめちゃくちゃ古いです.別の方法で,oAuthに対応したbotを作ってください.google:twitter bot oAuth
今日はTwitterの簡単なbotを作ってみます。
作るもの
現在のUNIXタイムを配信する、unixtimebotを作ります。
既に完成したものが以下のURLで動いています(飽きたら配信が止まるかもしれません)。
Twitterにアクセスできるgem
Twitterにアクセスするためのgemは、ちょっと探しただけで、これだけありました。
- Twitter4R
- Rubytter
他にもたくさんありそうですが、今回はRubytterを使います。
gemのTwitterは認証にOAuthのみサポートされていて、使いにくいのでやめました。*1
Twitter4Rは名前がぱっとしない感じだったので、Rubytterを使います。
Rubytterをインストールします。
sudo gem install rubytter
ついでに、bot用のアカウントを取ります。
Gmailのアカウントを持っている人は、エイリアスを使って登録すると便利です。
foo@gmail.comの人は、foo+bar@gmail.comとかで登録しておくと、いつも使っているアドレスでbot宛のメールも受信できます。
アカウントが取れたら、プロフィールを入れておきましょう。
これで準備できました。
あとは作るだけです。
その前にドキュメントを読もう
gemでインストールしたライブラリのドキュメントをブラウザで読むと便利です。
% gem server Starting gem server on http://localhost:8808/
これで、http://localhost:8808/にブラウザでアクセスすると、ドキュメントを読めます。
今回は大したことをしないので必要ないかもしれませんが、そのうち必要になるはずです。
作りましょう
unixtimebotの仕様は以下のようにします。
- 一定時間ごとにunixタイムを配信する
- replyとかは特に見ない
作りました。
#! /usr/bin/env ruby require 'rubygems' require 'rubytter' raise "usage: ./unixtimebot.rb ID PASSWORD" unless ARGV.size == 2 client = Rubytter.new(*ARGV) loop do now = Time.now.to_i if now % 1000 == 0 puts now client.update now end sleep 1 end
起動すると、Twitterにログインして、きりのいい時間になると時報を投稿します。
現在のUNIXタイムが1000で割り切れるときに時報を出すようにしてみました。
動かしてみます(ID, PASSWORDにはさっき取ったアカウントのIDとパスワードを入れます)。
% ./unixtimebot ID PASSWORD 1239033000
動きました。これは便利です。
細かいこと
今回は1000秒ごとに表示してみましたが、調子に乗って10秒ごととかにすると、タイムラインがbotの発言で埋め尽くされてたいへんうっとおしいし、貴重なネットワーク資源を浪費してしまうので、気をつけてください。
また、このままではTwitterとうまく通信できずに例外が起きるとプログラムが勝手に終了してしまうので、対応する必要があります。
% while [ 1 ]; do; ./unixtimebot.rb ID PASSWORD;sleep 10; done
こうやって起動しておくと、何か例外が起きて終了してもまた勝手に立ち上がります。
やりたい人はちゃんと例外処理しましょう。
まとめ
今回はとても簡単なものを作りましたが、どのようにbotを作っていくのか、分かっていただけたかと思います。
これで終わりだとひどい感じなので、次回は、botと会話してみたいと思います。
次回「Twitterのbotを作って友達を増やそう!!!」をお楽しみに!!!!!
追記
id:tsupoさんに記述が分かりにくいとの指摘を頂いたので一部修正しました。
ありがとうございました。