以前に、唐突に「botをつくりてー」と書いたわけですが。
- (過去記事)botを作りたい - (旧姓)タケルンバ卿日記 2008-11-29
昨日、ギークハウス2にて、以下のメンバーと勉強会を実施。
- へだち(pettan.jp)
- id:crystaline(Crystaline [クリスタライン])
- yteppei(http://marke.seesaa.net/)
様々な方のご協力、ご支援、ご指導のもと、何とか形になりましたよ。まだまだ改善する点はあるし、botと言い切れない部分もあるけどね。
どういう流れで作ったか、記録のためにも残しておきたいと思います。
1.どういうbotにするか決める
コンセプトは「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分の間のどれか」みたいにしたいな。その方がリアル感が出ていいと思う。
このあたりは勉強。できるようになってから。
リプライに反応するようにしたい
反応できるようにしたいね。
- 「ハラヘリヘリハラ! メシ食ったか?」
- 「オマエを食わせろ!」
- 「オレが死んだら、オレを食え! オレはオマエの中で生きる!」
- 「救援部隊はいつ来る!? ジャムおじさんはまだか!?」
- 「キミには塩分が足りないよ」
みたいに毒づきたいね。
自力で運用したい
現状はおごちゃんのご厚意で、サーバのスペースをお借りしてます。申し訳ない。本当にありがとうございます。お世話になります。
とはいえ、いつまでも甘えているわけにもいかないので、自分で何とかしたいですね。そこにたどり着くまでのご厚意なわけで。何とか自力で運用できるようにしたい。サーバ借りて、何とかできるようにしたい。
謝意
多くの皆様から励ましとご支援、ご指導、アドバイスをいただきました。誠にありがとうございました。
皆さんのおかげで、何とかできました。まだまだ不十分ですが、少しずつ良くしていきたいと思います。
今後ともよろしくお願い申し上げます。