rubygems の twitter を使って、簡単な bot を作ってみた

ふと twitterbot を作ってみたくなったので作ってみた。そのときのメモ

動作しているもの

http://twitter.com/supertimebot

特徴は以下

  • 5 分ごとに現在時刻をポストする bot
  • ローカルで動作させているので、PC の電源を切っているときは動かない

bot 入門用に、と思ったものなのでとってもシンプル

方針決め

さて bot を作る、とは言ったものの、どう実現すればいいのか。恐らく必要となるものは次だろう

  1. twitter にアクセスするソフト ( スクリプト )
  2. そのスクリプトを定期的に自動で実行してくれる環境
1. twitter にアクセスするソフト ( スクリプト )

以前の記事を参考にスクリプトを用意すれば OK だろう。

2. そのスクリプトを定期的に自動で実行してくれる環境

crontab が使えるサーバがあれば実現できる……のだけれど、自分が持っている XREA の無料アカウントでは crontab が使えない。というか、無料レンタル web サーバで crontab が使えるところはなさそう ( ? )。いずれ XREA で有料アカウント取る予定だけど、とりあえずはフリーで環境を構築したいので方針転換。
ローカルで実行させる。当然その PC の電源を切っているときは動作しないけど、とりあえずということで。

twitterbot 用アカウントを取得

http://twitter.com/signup より bot 用にアカウントを取得する。
もちろん、今使っているアカウントを使ってもできなくはないけど、新たに取得したほうが何かと便利。

5 分ごとに現在時刻をポストする bot の作成

まずは現在時刻をポストする rubyスクリプトを書いた。
rubygemstwitter を使用しているので、本当に簡単。

main.rb

#!/usr/local/bin/ruby

require 'rubygems'
require 'twitter'
require 'time'

USERNAME = 'supertimebot'
PASSWORD = 'password'     # <- dummy password

client = Twitter::Base.new( Twitter::HTTPAuth.new( USERNAME, PASSWORD ) )
client.update( Time.now )

んで、あとはこれを定期的に実行すればいいのでこんなシェルスクリプトを書いてみた。

loop.sh

#!/usr/local/bin/bash

SLEEP_TIME=300  # 5 minutes

while true
do
  ./main.rb
  sleep $SLEEP_TIME
done

んで実行。

% loop.sh

はい、完成。

http://twitter.com/supertimebot

ちゃんとポストされている模様。簡単すぎ

その他

機能の拡張

このスクリプトを基本に、ポストするだけでなく、timeline, replies を読み込んだり、search から取得したりして、それに反応させるようなものを書けばそれなりのものになりそう。あとは rails と絡めたり、外部の RSSAPI と連携させたり、とか色々できそう。

crontab の使えない環境で似たようなことをさせるには ( 案 )

  • それようにずっと電源をつけておく PC を用意する
  • カウンタ CGI の考え方を使って、自分のサイトとかに bot を起動させるプログラムへのリンクを IMG タグとして埋め込む
    • そのサイトにアクセスした人に bot を実行させる、という考え
    • ○分に 1 回実行させる、みたいな細かい設定は実現が難しい
    • そもそもそのサイトにそれなりのお客さんがいないと無理