2009年11月03日

東京工科大学のスクールバスBot取扱説明書

■アカウント
Bus_bot

■使用方法
    * 工科大学のスクールバスの時刻を教えてくれます。
* 現在時間より3件分をお知らせします。
* みなみ野、八王子、寮全てに対応しています。また、土曜日の運行にも対応しています。
* フォロー&フォロアー状態で「@Bus_bot」で投稿すると1分後に返信がきます。
* 1分経過しても何もレスポンスがない場合は、何らかの理由でスルーしちゃってます。もう一度聞いてみてください。
* 現在、自動でフォロー返しをします。
* 時間検索も検討中。気長にお待ちください。
* 登録言語は今後増やしていく予定です。


■登録単語

みなみ野発
みなみ野→キャンパスの時刻を返します。
みなみ野行
キャンパス→みなみ野の時刻を返します。
寮発
寮→キャンパスの時刻を返します。
寮行
キャンパス→寮の時刻を返します。
八王子発
八王子→キャンパスの時刻を返します。
八王子行
キャンパス→八王子の時刻を返します。
時刻表
時刻表があるページのURLを返します。
モバイル時刻表
携帯用の時刻表ページのURLを返します。


■連絡先
不具合や追加機能などありましたらお気軽に連絡ください。
コメントやメールで受け付けます。
ainakimono+bot☆gmail.com
posted by shio_chan at 16:09| Comment(0) | twitter | このブログの読者になる | 更新情報をチェックする

2009年10月22日

twitterのbotを作る その3

エラー処理などはしていないもののbotとしては最低限機能するものを作ってみた。
リプレイに対しては、「おはよう」のみ反応して言葉を返してくれる。
それ以外でも反応はしてくれるが「辞書にない」と言われてしまう。
また、30分ごとに現在時刻を返してくれる。

main.rb



#!/usr/bin/ruby

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



USERNAME = 'tes_21'
PASSWORD = 'aoi1229' # <- dummy password
messeg = nil
friend = nil
replay_messeg = []
morning_messeg = []
morning_word = []
io = nil
SLEEP_TIME=60

# ログイン
httpauth = Twitter::HTTPAuth.new( USERNAME , PASSWORD )
client = Twitter::Base.new(httpauth)

# ファイルを読み込むメソッド
def file_open(text)
mesbox = []
io = File.read(text)
io.each do |s|
mesbox << s
end
return mesbox
end

# 返信ファイルを選ぶ
def messeg_select(mes, word, text)
word.each do |f|
puts f.chomp!
if text.index(f)
messeg = mes[rand(mes.size)]
return messeg
end
end
return nil
end

# ファイルの読み込み
replay_messeg = file_open("text.txt")
morning_messeg = file_open("morning")
morning_word = file_open("mo-word")

while true
# タイムラインを取得
client.friends_timeline.each do |s|
messeg = nil

# 文字列を時間に変換
ary = ParseDate::parsedate(s.created_at)
t = Time::local(*ary[0..-3])

# 1分以内のリプレイに対して返信
if s.text.index('@tes_21') && Time.now.to_i - t.to_i < 32460
# おはよう
messeg = messeg_select(morning_messeg,morning_word,s.text)

# 辞書にありません
if messeg == nil
messeg = replay_messeg[rand(replay_messeg.size)]
end

# twitterに投稿
friend = "@#{s.user.screen_name} #{messeg}"
client.update(friend)
end
end

if Time.now.to_i % 1800 < 60
client.update( Time.now )
end

sleep SLEEP_TIME
end





後は、エラー処理をつければ完璧だー、と思う。
もっと効率の良いやり方があれば教えてほしいかも。
今後、これを拡張していきます。
posted by shio_chan at 17:42| Comment(0) | twitter | このブログの読者になる | 更新情報をチェックする

2009年10月20日

twitterのbotを作る その2

今日は、main.rbにいろいろと追加をしてみた。


まず、タイムラインの表示




# タイムラインを表示
client.friends_timeline.each do |s|
print s.user.name,":",s.text,"\n"
end



*説明*
ターミナル上に1ページ分のタイムラインを表示させる。
サイトによっては「client.timeline(:public).each」などと表記されているところもあるが、現在は使えないので注意。
「user.name」では、アカウント名ではなく、登録されている名前が表示される。


発言ファイル



REPLAY_MESSEG = []

# 発言ファイルを読み込む
io = File.read("text.txt")
io.each { |s|
REPLAY_MESSEG << s
}


*説明*
「@○○」に関する発言に返信するための発言ファイルを読み込む。
「text.txt」には適当な言葉(こんにちは など)が書かれている。
それを、一行ずつ「REPLAY_MESSEG」に入れていく。

返信する



# @に対し返信をする
client.replies.each do |s|
MESSEG = REPLAY_MESSEG[rand(REPLAY_MESSEG.size)]
FRIEND = "@#{s.user.screen_name} #{MESSEG}"
client.update( FRIEND )
end


*説明*
ランダムにメッセージを選び、@で呼びかけてくれた人に返信を行う。
しかし、5分後にまた返信をしてしまう可能性がある。



どうすれば発言の時間を取って来れるかが問題点。
これさえ解決すれば何度も返信することがないのに・・・
posted by shio_chan at 03:02| Comment(0) | twitter | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。