(旧姓)タケルンバ卿日記避難所

はてなダイアリーからの避難所

何とかbotができました

以前に、唐突に「botをつくりてー」と書いたわけですが。

昨日、ギークハウス2にて、以下のメンバーと勉強会を実施。

様々な方のご協力、ご支援、ご指導のもと、何とか形になりましたよ。まだまだ改善する点はあるし、botと言い切れない部分もあるけどね。
どういう流れで作ったか、記録のためにも残しておきたいと思います。

1.どういうbotにするか決める

コンセプトは「botを作りたい」で決めていた通り。

  • 食べもの写真をTwitterに投稿するbot
botを作りたい - (旧姓)タケルンバ卿日記
  • できることなら「生で食いてー」「焼いて食いてー」「煮て食いてー」なんかのセリフを本文に入れたい
  • さらにできることなら、超レアに「メシよりオマエが食いたい」みたいな萌えセリフも出現させるようにしたい
botを作りたい - (旧姓)タケルンバ卿日記

食べものに関する一言と、画像のURLを表示させる感じ。
比較的コンセプトは明確。完成形はわかってた。問題は、それを実現するプロセスがわからなかったこと。すべてはそこだな。

2.TwitterのIDを取得する

次に、botとして発言を投稿する主体を確保。IDをとる。
最初は「Twitter」だけに「itter」がつく方がいいかなと、「quitter(食いったー)」という名前を考えていたのだけれど、先約がいる。

誰だ、オマエ。
そこで「i」を削ってみたところ、たまたま空きIDだし、「qutter(食ったー)」となって問題ない感じなので取得した。

3.Rubyをインストールする

PHPでは既にオレのアイデアを実現されてしまったので、同じ方法は避けたいというどうでもいい意地。そしてid:dominion525さんから「Rubyで簡単にできるよ!」というアドバイスをいただいたので、Rubyでやってみることにする。
手始めに、まずはプログラムをインストール。

こちらの説明を読みつつ、

ここん家からインストール。結構インストールに時間がかかる。
でもって入れたら確認。コマンドプロンプトを開く。……こんなの使うのいつぶりだ……。MS-DOS時代以来かも知れん。

ruby -v

と入れてリターン。あ、Enterキーをリターンと呼ぶのは古い世代だから許せ。

ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

と、これでちゃんと入っていることがわかる。rubyの1.8.6がきちんと入ってますよ!

4.「hello world」とか

昨日の勉強会以前に、ちょっとは流れを理解しておこうと、これを読みつつ、「hello world」を表示させたりなんだりをしてみた。ま、とにもかくにもメモ帳とかで打って、それを「.rb」というファイル名で保存して、それをコマンドプロンプトで走らせれば動くわけだ。乱暴だが、そういう理解。
一応、ここまではやって昨日の勉強会となる。

5.ノートパソコン持ってない

問題はここ。オレは自宅でデスクトップで作業しとる。ノートパソコンがない。ふむう。
ありがたいことに、昨日はギークハウス2の総帥であるid:NA_geekに、空いたノートパソコンをお借りすることができたので、それで作業。ありがたいことだねえ。自宅でしたのと同様に環境を整える。
ま、でもここは今後の展開を考えるに、何とかせんとなあ。金はかかるが、どこかのタイミングで1台買わねばなあ。

6.端緒を得る

いずれにせよ、最低限の理解がないと何もできない。というわけで、勉強会でもこれの続きをしたり、随時わからんことがあったらid:dominion525さんやへだちくんに聞くという形式で進めたわけだけど、やっているうちに「お、これを使えばいいんでね?」というひらめきを得た。

puts 'じゃんけん'
sleep 1
r = rand(3) + 1
if r == 1
puts 'グー'
elsif r == 2
puts 'チョキ'
elsif r == 3
puts 'パー'
end
るびま

これを実行すると、最初に「じゃんけん」と表示され、1秒後に「グー・チョキ・パー」のいずれかが表示される。そのいずれかとは「rand(3)+1」即ち「0から2」までの数値に1を足したもの。イコール、1から3。1ならグーで、2ならチョキ、3でパー。こういう処理であると。
ということはだ。これを応用すれば、いくつかのセリフから、ランダムにそれを選ばせることは可能だよね。

7.一応、処女作なのかな?

そこで、早速こういうものを書いてみた。

r = rand(7) + 1
if r == 1
  puts '煮て食いてー'
elsif r == 2
  puts '焼いて食いてー'
elsif r == 3
  puts '生で食いてー'
elsif r == 4
  puts '揚げて食いてー'
elsif r == 5
  puts 'オマエを抱きてー'
elsif r == 6
  puts '蒸して食いてー'
elsif r == 7
  puts 'もうお腹いっぱいだー'
end

これを実行すると、ここに挙げた7つのセリフから、どれかをランダムに選んで表示する。「rand(7)」の数値を増やし、下に付け足せば拡張もできる。また、セリフの後ろに、それと合わせたURLを入れれば、当初考えていたものに近いものはできる。

  puts '煮て食いてー http://●●●'

とすればいいわけだ。
ランダムで表示する要素を、全部入力というか、こちらで用意しなければならんわけだから、非常に原始的で稚拙なものだけれど、初期段階としてはこれでいいじゃろ。こういう要素を取得する技術というか、自動化することはできるはずだし、本来はそういうのがbotなのだろうが、とりあえずはよしとする。稚拙だろうが何だろうが、まずは形にすればいい。実際に動かしたほうが楽しいもんな。

8.テスト成功

あとはとりあえずbotのベースとなるものはできた。あとはこれをプログラムとして指示し、指示したら実行する環境をつくればいい。指示をするとランダムにセリフを選び、それをTwitterに投稿する流れを作ればいい。

これを利用させていただくことに。これを使うとAPIを使って、プログラムから投稿してくれるってわけね。

これをダウンロード。プログラムをサーバにうpする環境と、サーバにおいたプログラムにアクセスして、動かす環境を手に入れる。
で、その間も日本語だと文字化けするということなので、

ってのを教えてもらい、それを足す。英語ならともかく、日本語だと表示がアレでコレでソレらしい。よくわからんが、とにかく、これを使えば文字化けしないのだ。そういうことなのだ。それでいいのだ。
ここまで終えて、テスト。……成功! うまくいった感じ。ランダムで用意したセリフが投稿される。初期テストとしては上々。後はこのバリエーションを付け足すだけ。そしてそれを自宅でできるように環境を整えるだけ。できる流れはつかめた。いい感じ。
程よい時間になったので、ギークハウス2を出る。後は自宅で続きだ。

9.食ったー ver.1

帰宅し、自宅PCに入れてないツール類を入れまくり、同時進行でセリフを書きまくり、後ろに画像のURLを足しまくる。洗練さのかけらもないが、意外と地道な作業は好きなので、苦にならん。こういうの、作ってるときって楽しいね。
で、とりあえず完成しました。

こちらで用意したセリフをランダムで投稿します。

こんな感じ。セリフの後にURL。これをクリックすると、タケルンバのはてなフォトライフから見繕った、関連画像のページに飛ぶと。で、それを見た人たちが空腹感と食欲に身悶えると。そういうシステムになっております。よろしかったらフォローしてくださいまし。

10.今後の課題

投稿タイミング

投稿するタイミングは自動ではなく、こちらから指示しないとダメです。こちらが起動しないと動かない。そういう意味ではbotになりきれてません。手動です。人力ロボ。
なので、自動で継続的に投稿するようにしたいですね。最初のきっかけはこちらで飛ばしてやるとしても、後は自動的に止めるまで投稿する流れにしたい。
考え方としては「while true」と「sleep」で組めばいいのかな。ループさせ、ある一定時間後に投稿する流れをつくる。「sleep 3600」とかにすれば、こちらが止めるまでは1時間に1回に投稿するはず。「times」で回数を指定してもいいな。
将来的には、これを組み合わせて、自動的に投稿しているように見えるようにしたい。

投稿時間をランダムに

ついでに言うと、理想としては、投稿と投稿の間をランダムにしたい。「sleep 3600」とかだと60分間隔だけど、それを「10分から120分の間のどれか」みたいにしたいな。その方がリアル感が出ていいと思う。
このあたりは勉強。できるようになってから。

リプライに反応するようにしたい

反応できるようにしたいね。

  • 「ハラヘリヘリハラ! メシ食ったか?」
  • 「オマエを食わせろ!」
  • 「オレが死んだら、オレを食え! オレはオマエの中で生きる!」
  • 「救援部隊はいつ来る!? ジャムおじさんはまだか!?」
  • 「キミには塩分が足りないよ」

みたいに毒づきたいね。

自力で運用したい

現状はおごちゃんのご厚意で、サーバのスペースをお借りしてます。申し訳ない。本当にありがとうございます。お世話になります。
とはいえ、いつまでも甘えているわけにもいかないので、自分で何とかしたいですね。そこにたどり着くまでのご厚意なわけで。何とか自力で運用できるようにしたい。サーバ借りて、何とかできるようにしたい。

発言のバリエーションを増やしたい

どんどん増やしたいな。ランダム性もそうだけど、バリエーションを増やしたい。まだまだ少ないのでね。
はてなフォトライフとか、Tumblrとかと組み合わせてもいいし、とにかく拡張したいな。
とまあ、現状はこんなところ。不完全とはいえ、一応は動き出しました。食欲刺激bot「qutter(食ったー)」を是非よろしく。

謝意

多くの皆様から励ましとご支援、ご指導、アドバイスをいただきました。誠にありがとうございました。
皆さんのおかげで、何とかできました。まだまだ不十分ですが、少しずつ良くしていきたいと思います。
今後ともよろしくお願い申し上げます。