[bot]TwitterBotが動かなくなったので原因を探った

Twitter で「OZ/オズ」の語り部だったオーガスタス・ヒルの言葉をbot化して運営しています。
『ヒルのお言葉』と囚人たちの歌をリスト化したものを時間指定してランダムに呟くようにしています。

最初は、PHPで作ったTwitter Botスクリプト「EasyBotter」を使用していました。
その時はフォロワーがフォローすると自動フォローする、などの設定はされていました(現在は行っていません)。

レンタルサーバーをヘテムルロリポップ!と移動し、現在のエックスサーバーへ移動した際、別のプログラムを参考にして再スタートしました。
PHPとTwitterOAuth でTwitter のbotを動かす方法です。

参考記事(実際使用したプログラム)

# 今回の環境 Raspbian (apache インストール済み)です.ドキュメントルートはここでは ```/var/www/``` になりますが,自分の環境に合わせてください. # Twitter 側の設定 Twitter A...
2016年最新TwitterBot用のPHPファイル作成とCron設定方法について。自動的にツイートさせるbot.phpの作り方とサーバーでのCron設定(エックスサーバー・sakuraサーバー)

botがいきなり4月末から動かなくなった

ところが、今年の4月末からヒルbotが動いていないことに最近気づきました。
3か月放置しっぱなし…WordPress とか声チェックの更新とか体調不良とか……ええい!自分のせいだよ。申し訳ございません。
フォローしてくれている方からも「再起動させてください」、というお言葉をいただき、急ぎ原因を探りました。

PHPのバージョンを5.6から7.0に変更した

以前、データベースをうっかり消してしまった記事を書きました。

このブログmcity.org はレンタルサーバーのエックスサーバーを利用しているのですが、最近エックスサーバーより、以下のメールが届きました...

実は、サーバ移動した時とともにPHPのバージョンも5.6から7.0に変更していたのです(WordPress の高速化を目論んでですが、現状WordPress 本体はともかくプラグインはようやくPHP7.0対応が増えてきた感じで現在も完全対応ではありません)。
参考記事の頃はPHPのバージョン5.6の時期で、何もエラーは起こらなかったのですがPHP7.0にしたところエラーが出始めた、というのが対応後での見解です。

まず出たエラーは3点。

PHP Warning: file(list.txt): failed to open stream: No such file or directory in /home/ユーザ名/ドメイン名/public_html/twitterbot/twitter_bot.php on line 7
PHP Warning: shuffle() expects parameter 1 to be array, boolean given in /home/ユーザ名/ドメイン名/public_html/twitterbot/twitter_bot.php on line 8
PHP Notice: Undefined variable: message in /home/ユーザ名/ドメイン名/public_html/twitterbot/twitter_bot.php on line 13

修正前(twitter_bot.php)

<?php
require_once('twitteroauth/autoload.php');
require_once('twitteroauth/src/TwitterOAuth.php');
require_once(dirname(__FILE__) . '/config.php');
use Abraham\TwitterOAuth\TwitterOAuth;
// ファイルの行をランダムに抽出
$filelist = file('list.txt');
if( shuffle($filelist) ){
$message = $filelist[0];
}
// つぶやく
$connection = new TwitterOAuth(consumer_key, consumer_secret, access_token, access_token_secret);
$request = $connection->post("statuses/update", array("status"=> $message ));
?>

修正後(twitter_bot.php)

<?php
require_once('twitteroauth/autoload.php');
require_once('twitteroauth/src/TwitterOAuth.php');
require_once(dirname(__FILE__) . '/config.php');
use Abraham\TwitterOAuth\TwitterOAuth;
// ファイルの行をランダムに抽出
$filelist = file(dirname(__FILE__) . '/list.txt');
if( shuffle($filelist) ){
$message = $filelist[0];
}
// つぶやく
$connection = new TwitterOAuth(consumer_key, consumer_secret, access_token, access_token_secret);
$request = $connection->post("statuses/update", array("status"=> $message ));
?>

修正点は、7行目のヒルのお言葉リストであるlist.txt への絶対パスの追加です。
list.txt がオープンできない、どこにあるかディレクトリがわからない、さらにそのlist.txt 内のデータ(ここではmassage)を受け取れない状態になっていたようです。

アプリを動かす場合は、Twitter App を登録してアクセストークンを取得する必要があります。
Twitter App の登録とアクセストークンの取得については上記の参考記事をご確認ください。

取得したアクセストークンを、用意したPHPファイル(config.php)に入力してください。

<?php
define("consumer_key", "コピーした consumer_key");
define('consumer_secret', 'コピーした consumer_secret');
define('access_token', 'コピーした access_token');
define('access_token_secret', 'コピーした access_token_secret');
?>

きちんと呟けているかローカルホストでtwitter_bot.php にアクセスします。
Twitterアカウント(ヒルbot)のツイートに反映されているか確認してみてください。
ちなみにローカルホストのアドレス内には何も表示がで出ません。

Cron設定がPHP5.6バージョンのままだった

PHPのバージョンが7.0なのにCron設定ではPHP5.6になったままになっていたため、自動でツイートするためのCron設定をPHP5.6からPHP7.0に変更しました。
サーバーパネルにユーザIDとパスワードを入力してログインします。

サーバーパネルにアクセスしたら「Cron設定」をクリックします。

すでにCron設定済みなので、CRONの一覧から設定済1から「変更」ボタンをクリックします。

『コマンド』を見ると以下のようになっています。

/usr/bin/php5.6 /home/ユーザ名/ドメイン名/public_html/twitterbot/twitter_bot.php

これをphp7.0 に変更します。

/usr/bin/php7.0 /home/ユーザ名/ドメイン名/public_html/twitterbot/twitter_bot.php

コマンドパスは、「サーバー情報」>「コマンドパス一覧」で確認することができます。
またコマンドの書き方については、エックスサーバーマニュアル「サーバープログラムについて」>「Cron設定」を参照してください。

修正が終わったら、編集を終了するか聞いてきます。良かったら「CRONの編集」をクリックします。

「Cron設定」の「CRONの一覧」で修正されていることを確認しましょう。

まとめ

実は、昨日(正確には今日の深夜)まで原因がわからなく、もうbotサービスを借りようかな…と病院へ通院中でも買い物中でも帰宅中でも考えていました。
別のbotライブラリを発見したのですが起動させるbot.php 部分、つまりPHPのプログラムができる人間向けでノンプログラマーの自分にとっては敷居が高い。
実はエックスサーバーのCron設定には、常にプログラムがエラーを発見すると報告するように設定されています。
デフォルトのままだとFTPのMaildirフォルダにMaildir3フォルダまで蓄積されて、いっぱいになると古いファイルから消去されていきます。
newフォルダの中を見てみると、昨日の2017/07/21 22:10:01 でエラー情報がストップしていました。
これは…もしや…と思い、ヒルbotアカウントを見ると無事更新されているのを確認できました。

いろいろ検索をかけて原因を探ってたどり着いたのが絶対パスへの追加、でした。盲点と言えば盲点なのかもしれません。
最初から書いていれば…という気持ちは否めませんが、オリジナルソースを作った方々がそう設定せずとも動くと想定してプログラムしていたのだと判断しました。
急場しのぎの修正で今後これで稼働し続けるのかわからないのですが、本格的にプログラムを勉強しないといけないなぁと思いました。

スポンサーリンク
スポンサードリンク
スポンサードリンク

シェアする

フォローする

スポンサーリンク
スポンサードリンク