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

300億円欲しい

メジャーリーグのデータ解析します

何を食べたらいいのかを教えてくれるbotを作りたい

Ruby

序論

お腹が空いて, 何食べようかな...と考えても, 何も思い浮かばないときってありますよね.

友達や家族と一緒にいるなら, 「何食べたい?」と尋ねればいいと思います..
しかし, 僕は基本的に1人でいます.
どうすればいいのでしょう.

こんな状況を打開したいので, botを作ります.
「何食べようかな」とつぶやくと, 適当な料理名を返してくれるようなbotが欲しいです.

作りました.

TwitterBotを作る

Rubytwitterライブラリを利用して, botを作成します.
タイムラインから「何食べよう」という言葉を見つけたら,
つぶやいた人に適当な料理名を含むメンションを飛ばす, というものです.

手順1 BotTwitterアカウントを作る

Twitterアカウントを作ります.
アカウント作成の際にメールアドレスを要求されます.

Gmailアカウント1つで無限にメールアドレスを作成できます.

http://www.tabroid.jp/news/2013/10/gmail-manyservice.html

Gmailアドレスに "."や "+hoge"をつければ新しいアドレスになります.

手順2 いろいろKeyを取得する.

ここからConsumer Key, Consumer Secret, Access token, Access Secretを取得します.

https://dev.twitter.com

よく分からなければググってください.

手順3 料理名の入ったファイルを作る

料理名がたくさん入ったファイルを作ります.
ここから料理名をサンプルして, メンションを飛ばすようにします.

豆腐丼
トマトとなすのカレー
トマトのチキンドリア
鶏雑炊
ねぎとろ丼
バターライス
ひつまぶし
ピザ
豚丼
豚の生姜焼き丼
ほうれん草のグラタン
舞茸丼
ミラノ風ドリア
ミートソースドリア
焼きおにぎり
ライスバーガー
レタス炒飯
(以下, 1000個くらい続く)

適当なWebサイトなどからコピペして整形します.
ファイルの名前はryouri.txtとして保存しておきます.

豆腐丼は美味しんぼ快楽亭ブラックさんが作っていました.
f:id:gg_hatano:20131106230719j:plain
究極メニューvs至高のメニューの豆腐対決の回で出てきました.

美味しんぼ(22) (ビッグコミックス)

美味しんぼ(22) (ビッグコミックス)

手順4 コードを書く

rubytwitterライブラリを利用します. gemとかでインストールしてください.

#!/usr/bin/ruby -Ku

# which ruby として, rubyの場所を確認して入力

require 'twitter'
require 'pp'
require 'rubygems'
require 'kconv'

# 取得したKEYなどを入力
@client = Twitter::Client.new(
  :consumer_key => "CONSUMER_KEY", 
  :consumer_secret => "CONSUMER_SECRET", 
  :oauth_token => "OAUTH_TOKEN",
  :oauth_token_secret => "OAUTH_TOKEN_SECRET
)

username = 'gg_hatnao_bot' # botの名前

loop{
  begin
    timeline = @client.home_timeline()
  rescue Timeout::Error, StandardError
    puts "タイムラインが取得できませんでした"
  else
    timeline.each{|status|
      if status[:text].include?("何食べよう") && status[:user][:screen_name] != username
        ryouri_array = open("ryouri.txt").read.split("\n").delete_if{|tweet| tweet.strip.empty?}
        ryouri = ryouri_array.sample
        str = "@#{status[:user][:screen_name]} #{ryouri}"
        pp str
        @client.update(str)
      end
    }
  end
  sleep 60  # 60秒に1回タイムラインを取得して反応
}

手順5 実行してみる

このrbファイルを実行すると...

ちゃんと反応してくれました.

f:id:gg_hatano:20131106225843p:plain

ほうれん草のグラタン食べます.

感想

これでぼっち飯が捗りますね!