読者です 読者をやめる 読者になる 読者になる

PSO2用にBOTを作ったよという話

PSO2 Ship9 緊急クエ通知BOT(@pso2_ship9_emg)というのを作ってみた。

機能としては、PSO2緊急クエ発生時間つぶやきbot (@pso2_emg_bot) のつぶやきから、
Ship9の緊急クエだけを取り出してRTするだけです。

使用言語はRubyubuntuのcronで定時実行しています。

twitterBOTを作ってみたいという人が、周りに割といたので、作り方を紹介してみます。
環境さえ整っていれば、1時間かからずに作れますよ。


◆つくりかた
1, ”twitter”をrequireできるようにします。

$ gem install twitter -v=2.1.0

  古めのバージョンを使ってるのは、説明しているページが多めだからです。

2, twitterのサイトで、BOT用アカウントを作成します。

3, Twitterの開発者用サイトを開きます。

4, BOT用アカウントでログインします。

5, 右上のアイコンから、[My applications]→[Create a new application]と押していきます。

6, アプリの名前とか説明とかを記入して、OKを押します。

7, アプリのステータス画面を開いて、[Create my access token]のボタンを押します。

8, 再読み込みされたステータス画面から、Consumer keyとConsumer secretとAccess tokenとAccess token secretを控えておきます。
  (twitterに投稿する系のアプリの場合は、Read&Writeできるように設定を変えておきます。)

9, Rubyプログラムを作成します。
  今回のPSO2 Ship9 緊急クエ通知BOTだと、こんな感じのソースコードになります。
  gemのtwitterをどうやって使うかは、ここ(http://route477.net/w/?RubyTwitterJa)を見て調べた。

(*2013.2.7 ソースコード訂正)

require 'twitter'

# ログイン
Twitter.configure do |config|
  config.consumer_key = '8, のConsumer key'
  config.consumer_secret = '8, のAccess token'
  config.oauth_token = '8, のAccess token'
  config.oauth_token_secret = '8, のAccess token secret'
end 

#タイムラインの取得
tl = Twitter.
search("pso2_emg_bot #pso2 #pso2_ship09 -rt", :lang => "ja", :count => 1)
ship9 = Twitter.
user_timeline("pso2_ship9_emg", :lang => "ja", :count => 1)

#すでにリツイートしていないかを確認
#していなければ、リツイート!
s9text = ship9.first.text
if s9text.include?("RT @pso2_emg_bot: ")
	s9text["RT @pso2_emg_bot: "] = ""
end

if(tl.statuses.first.text != s9text)
	Twitter.retweet(tl.statuses.first.id)
	p tl.statuses.first.text
	puts "retweet"
else
	puts "*****already retweeted*****"
	p s9text
end

10, 9で作ったプログラムを実行してみて、うまく動くか確認します。

11, crontab を編集して、定時実行するように設定します。
ここ(http://kazmax.zpp.jp/linux/lin_cron.html)とか、ここ(http://miya0.dyndns.org/pc/settei/crontab.html)とかがわかりやすかった。

12, 指定した時間にうまく動作してたら完成。


―――――――――

BOTをすぐに作れるWebサービスとかが普通にあって、ほんと便利です。

ただ、Webサービスだと、機能が限られてるときなんかもあると思うので、
そういうときは、BOTの自作も簡単にできそうだったなー、と思い出してもらえれば。