2011年1月10日月曜日

RubyでTwitterのbotを作成。ある単語を検索し、ヒットしたらリツイートするbot

Rubyで、ある単語にマッチしたツイートを公式リツイートするbotを作ってみました。
"twitter"モジュールを使用しています。
※"twitter"モジュールの仕様については、こちらのサイトが参考になりました。

●事前準備
・gemでtwitterモジュールをインストールする。
※参考:「さくらレンタルサーバにruby,gemをインストールする」
・TwitterでOauth認証(Twitterの外部アプリケーション認証)を済ませておく。
※参考:「Ruby Twitter Gem簡易リファレンス」

●注意点
・現時点(2011年1月)のTwitterでは、日本語検索が万全ではありません。例えば「焼酎」を検索する場合、「焼酎」で検索してもヒットしないツイートが、「焼 酎」と1文字ずつスペースで区切って検索するとヒットしたりします。
以下、サンプルコードではそういった現象にも対応しています。
※さくらレンタルサーバ上で動作確認済み。
#!/usr/local/bin/ruby -Ku

#焼酎を検索し、リツイートするTwitterのbot

require "rubygems"
require 'twitter'
require 'oauth'


CONSUMER_KEY = "~~~"       #取得した"Consumer key"
CONSUMER_SECRET = "~~~"    #取得した"Consumer secret"

ACCESS_TOKEN = '~~~'       #取得した"Access token"
ACCESS_TOKEN_SECRET = '~~~'#取得した"Access token secret"

exc=""
begin
token = Twitter::OAuth.new(CONSUMER_KEY, CONSUMER_SECRET)
token.authorize_from_access(
ACCESS_TOKEN,
ACCESS_TOKEN_SECRET
)
tw = Twitter::Base.new(token)
rescue=>exc
p exc; exit
end

#1、焼 酎で検索
Twitter::Search.new('焼 酎').each do |r|
#リツイートする
if r.class == Hashie::Mash then
#再度ツイートの文字列が「焼酎」を含むかチェック
if r["text"] =~ /焼酎/
exc=""
begin
p r["id"].to_s
tw.retweet(r["id"].to_s)
rescue=>exc
p "err::焼 酎::"+exc
end
end
end
end

#負荷軽減のため、5秒スリープする
sleep(5)

#2、「焼酎」で検索
Twitter::Search.new('焼酎').each do |r|
#リツイートする
if r.class == Hashie::Mash then
exc=""
begin
p r["id"].to_s
tw.retweet(r["id"].to_s)
rescue=>exc
p "err::焼酎::"+exc
end
end
end

p "finish!"

Rubyについてやりたいことのほとんどが網羅されている逆引き本。これ一冊手元にあればネットで調べるより断然作業がはかどります。ネット上でまだ情報が少ない1.9系についてのサンプルコードも載っているので便利です。



0 件のコメント :

コメントを投稿