Twitterボットの再稼働

Pocket

ここ1ヶ月ほど、立て続けに災難に見舞われてしまっている。

まず、iPhone(SE第二世代)を衣類と共に洗濯機に放り込んでしまい、応急処置と整備済み品の購入で3万円が吹っ飛んだ。コロナ禍直前にCoolPixを破損して以来、唯一の写真撮影機材でもあったので、本来なら今月完成させる予定だった「ドイツ戦車軍団」のシリーズルール試作版の制作が中断してしまった。

で、とりあえずiPhoneが復活したと思った矢先、今度はコロナに感染してしまった。一応ファイザーを3回打っていたものの、37〜38度の熱が続いて市販の薬では下がらず、まるまる1週間自宅療養になってしまった。しかもこのタイミングで湯沸かし器が作動しなくなってしまい、修理業者を呼ぶこともできず、冷水シャワーしか浴びられなくなってしまった。

そして、そんな自宅療養の真っ最中に、Twitterで稼働させている「今日の卓上ウォーゲームBOT」と「S&T付録ゲームBOT」が再び停止してしまった。

5月にも1週間ほど停止してしまったことがあったものの、これはAPIがv2になったことに伴って無料のFreeプランに手動でプラン変更しなければならなかったのを怠っていたのが原因だったから、割と容易に再稼働できた。が、今度はそんな簡単な話では済まなかった。

まず、こうしたボットは元々、Twitterの開発者向けサイトでアプリとして登録する必要があったのだが、新たに「プロジェクト」を登録してプロジェクトに属するアプリとして既存のアプリを登録しなければならなくなっていた。

加えて、v2のFreeプランではアプリのOAuth認証が2.0必須(1.0aではダメ)になってしまい、それに伴って従来は任意入力だった一部の項目も必須入力になってしまっていた。

そして、OAuth認証が2.0必須になってしまったことで、ボットのプログラム(PHPのスクリプトをさくらインターネットのレンタルサーバーに上げてCRONで定期的に自動で走らせている)で使っていたライブラリも変更せざるを得なくなった。

従来はTwistOAuthを(ファイルをFTPで1つ上げるだけという手軽さゆえに)使っていたのだが、これは1.0aのみ対応で開発が打ち切られていたので、2.0対応で広く使われているTwitterOAuthに切り替えざるを得なくなった。が、TwitterOAuthは事実上、Composer経由でインストールしなければならない。

正直、個人の趣味レベルのプログラミングではライブラリもフレームワークもオブジェクト指向もほとんど必要無いので、Composerも今迄全く使っていなかった。だから、まず手元のMacBookAirのターミナルからSSHでさくらのサーバーにログインしてComposerをインストールして、然る後、TwitterOAuthもインストールした。

こうして全ての下準備を終えた後、TwitterOAuthを使うようにボットのプログラムを改修したのだが、最後の最後で「CRONを使わず手動でスクリプトを走らせるとツイートが正常に投稿されるものの、CRONで自動的に走らせようとすると失敗する」という問題にぶち当たってしまった。

普段はCRONの実行頻度は毎時0分に設定しているのだが、問題を特定するため、実行頻度を5分〜10分間隔に設定して、ソースをちょっといじっては上げ直し、再びちょっといじっては上げ直し……を延々繰り返した。

結局、「use演算子でTwitterOAuthクラスのエイリアスを作ろうとするとダメ」ということが判明したので、エイリアスを作らず「Abraham\TwitterOAuth\TwitterOAuth」というクソ長いクラス名のままでインスタンスを生成するという力技で乗り切った。

Freeプランのアプリは1ヶ月のツイート数上限が1500ツイートなのに対し、「今日の卓上ウォーゲームBOT」も「S&T付録ゲームBOT」も1ヶ月のツイート数は200にも満たない。その程度の弱小アプリを再稼働させるだけでも今回はむちゃくちゃ手間がかかった。イーロンしばくぞ。

Pocket