あの鳥に真言を読ませてみる。～zenlogicでtwitterのbotを作ってみた～

# イントロダクション

私は2年ほど前から趣味でアナログゲーム作りをしています。

大した作品を世に放ったたわけでもないですが、**今日は大枚はたいて東京まで赴き[これ](http://gamemarket.jp/)に出てます。**

んでせっかく出るならと、新作を作りました。

![DOmYwz5X4AANra4.jpg](https://qiita-image-store.s3.amazonaws.com/0/71261/933a0d43-6a37-2a16-ed03-732910b10d46.jpeg)

名前のとおり「真言を読み上げて該当する仏画をとる」という出落ちみたいなゲームです。

ただ、5年ほど前には仏教なんぞに全く興味がなかった私が、

「聖☆おにいさん」というまんがのオチを理解するために宗教の勉強し始め

こんなゲームを作るぐらいにハマるとは感慨深いものがあります。

ま　ハマると言っても宗教「史」にハマっているだけで、特定の神様を信仰したり、出家したいわけじゃありません。

ほんの**「ベンチャーのノリで『宗教立ち上げない？』と誘われたら迷う」**程度のハマり具合です。

# 閑話休題
ゲーム作成は基本一人で企画、制作、営業、販売を行っているので、

さながら会社経営をしているようでなかなか面白いです。

ただ実績のない私とって「広告宣伝活動」は苦労するものです。

というわけで **今日はtwitterを使って真言カルタのRP用bot** をやってみたいと思います。

# ボットの仕様

ダラダラ真言をつぶやいてもいいのですが、ウザくなりそうなので、返信型が良いでしょう

**botにはなしかけると、数枚の仏画とともに真言をつぶやいてくるので、該当する仏様を当てる**

うん、カルタっぽい！こんな仕様でええでしょう

# フローを考える

1. DBから前回の実行時間を取得
2. 1で取得した時間以降でbotへのつぶやきを取得
3. DBから真言と画像をランダムにピックアップ
4. 返信ツイートをする
5. 実行時間を退避
6. 1分おきに繰り返す

とりあえずこんな感じ

# 実行環境を考える
ラズパイさんを使ってもいいのですが、24-365動いてほしいので

ファーストサーバのサービスでもある[Zenlogic](https://zenlogic.jp/)に働いていただきましょう。




# データベースを準備する
とりあえずDBがいるのでMySQL5.1を設定。

![db.jpg](https://qiita-image-store.s3.amazonaws.com/0/71261/2447d300-5a10-7564-a491-1ba29ad2ba52.jpeg)



phpMyAdminというDB管理ツールも簡単インストールから入れておきます。

![kantan.png](https://qiita-image-store.s3.amazonaws.com/0/71261/9a360a99-2361-e332-8a76-f712cb8985d1.png)


ボタン押すだけだから簡単だね。

適当に真言を入れるテーブル作って入れてます。

途中データの修正できないトラブルがあったので客を装ってクレームいれてやろうとおもいましたが、ちゃんとFAQが用意されていました。

ごめんなさい。

https://faq.zenlogic.jp/faqs/FAQ01203

# PHPを準備する
twitterへの命令はPHPが相性良さそうなので、とりあえず最新の7.1を使えるよう設定します。

![php.png](https://qiita-image-store.s3.amazonaws.com/0/71261/02e7405d-fef0-6fa0-5753-f3654f9e0eb8.png)


ただしあまり下位互換がされていないので、ググったサンプルをコピペというわけには行かないようです。

特に
データベース・アクセス系のコマンド`mysql_connect`は使えないので`mysqli_connect`を使うようにしましょう

# twitterの準備
アカウントを取って、APIを使えるようにします。

この辺の記事を参考にさせていただきました
https://weblabo.oscasierra.net/php-twitteroauth/

ハマったところは「TwitterOAuth」の作者様がアブラハム氏だったので

「**すわっ！イサクのお父さん!?**」と思いながら数十分ほど[wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A4%E3%82%B5%E3%82%AF%E3%81%AE%E7%87%94%E7%A5%AD)を読んでしまったぐらいです。

# ツイートを取得する

この辺を参照させていただきました。
https://qiita.com/tsumugu/items/e23481626cb6309a249c

https://syncer.jp/Web/API/Twitter/REST_API/GET/statuses/mentions_timeline/

また`since_id`を使うと、そのid以降のツイートのみを検索できるようなのでフローを修正

1. DBから前回のidを取得
2. 1で取得したid以降でbotへのつぶやきを取得
3. DBから真言と画像をランダムにピックアップ
4. 返信ツイートをする
5. 2で取得したツイートのidを退避
6. 1分おきに繰り返す

# ツイートする
この辺を参照させていただきました。
https://qiita.com/noir/items/b631ed274770eef26445

案外簡単です。

あとは適当にプログラムします。

#cronの設定

受信は1分おきにしたいのでcronを使いますが、

Webから起動したら動いたのに、Cronにしたら動いてくれません

でも大丈夫この程度のプログラムであればzenlogicのマニュアルページに載っています。

https://zenlogic.jp/support/manual/web/cron.html

すごいね。

# 出来上がったものがこちら

仏教らしくこの言葉で話しかけましょう。

`そもさん @singon_karuta `
![名称未設定 1.png](https://qiita-image-store.s3.amazonaws.com/0/71261/ec93bd07-84fa-71f6-a972-ce8c50c85c72.png)

お、返ってきた

`オン マリシエイ ソワカ` は 摩利支天様ですね。

![名称未設定 1.png](https://qiita-image-store.s3.amazonaws.com/0/71261/ebe1433e-f2bd-9d94-7711-d199a9bb4fa3.png)

「クリック推奨画像」にしているのでクリックすることで正解・不正解がわかります。(さくらっこ商会は私の屋号)

うん　まんぞく。

#まとめ
* twitterとPHPの相性は良い。
* zenlogicのサポートは結構充実している。
* こんなんでPRになるかの答えは今日の売上次第
* 「仏教」タグはありがたく使わせていただいた
* 良い子のみんなは会社で「政治・宗教・野球の話」はやめようね

#まとめ２
しこたま売れて完売じゃい！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/71261/b5170826-a465-8ae9-a21c-ecfa09e2bb26.png)