hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

Twitterの簡単なbotを作ろう!!!!

この記事はめちゃくちゃ古いです.別の方法で,oAuthに対応したbotを作ってください.google:twitter bot oAuth


今日はTwitterの簡単なbotを作ってみます。

作るもの

現在のUNIXタイムを配信する、unixtimebotを作ります。
既に完成したものが以下のURLで動いています(飽きたら配信が止まるかもしれません)。

あなたはこのbotをfollowすることによって、常にUNIXタイムを意識しながら暮らすことができます。

方針

Rubyを使います。
直接TwitterAPIを叩くのではなく、RubyGemsからライブラリを取ってきてそれを使ってアクセスします。

Twitterにアクセスできるgem

Twitterにアクセスするためのgemは、ちょっと探しただけで、これだけありました。

他にもたくさんありそうですが、今回は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


http://gyazo.com/7af35c707f53bb8d30d0789269b1cbf0.png


動きました。これは便利です。

細かいこと

今回は1000秒ごとに表示してみましたが、調子に乗って10秒ごととかにすると、タイムラインがbotの発言で埋め尽くされてたいへんうっとおしいし、貴重なネットワーク資源を浪費してしまうので、気をつけてください。


また、このままではTwitterとうまく通信できずに例外が起きるとプログラムが勝手に終了してしまうので、対応する必要があります。

% while [ 1 ]; do; ./unixtimebot.rb ID PASSWORD;sleep 10; done

こうやって起動しておくと、何か例外が起きて終了してもまた勝手に立ち上がります。
やりたい人はちゃんと例外処理しましょう。

まとめ

今回はとても簡単なものを作りましたが、どのようにbotを作っていくのか、分かっていただけたかと思います。
これで終わりだとひどい感じなので、次回は、botと会話してみたいと思います。
次回「Twitterbotを作って友達を増やそう!!!」をお楽しみに!!!!!

追記

id:tsupoさんに記述が分かりにくいとの指摘を頂いたので一部修正しました。
ありがとうございました。

*1:追記: twitter gemでもBASIC認証を使えるようになったようです。 [http://d.hatena.ne.jp/shokai/20090418/1240057250:title]