PHPでTweetBotを作ってみた(その3)

プログラミング

こんにちは、5月病のぴのです。

今回も引き続きTweetBotを改良していきます。前回、最新記事のタイトルとリンクをツイートするところまで成功したので、今回はツイートログを残せるようにしていきたいと思います。初回や前回をまだ見てない方はぜひご覧ください。

少し修正

最新記事取得関数の移動

前回、最新記事取得関数をwp-includes/functions.phpに追加しましたが、先日のWordPressの自動更新によりファイルが上書きされて消えてしまうという事態が発生しました。これを踏まえて、関数はとりあえずtwitter-bot.php内に移動させておきます。

ログの出力

ログファイルの作成

ルートディレクトリ直下にtwitter-log.txtのように空のログファイルを作成しておきます。作成しなくても最初の書き出しのときに生成されますが、管理人は作っておきたい派なので作成しました。

ログ出力関数の作成

function write_log($tweet, $isSuccess){
  date_default_timezone_set('Asia/Tokyo');
  $now = date("Y/m/d H:i:s"); /*現在時刻の取得*/
  $msg = $isSuccess ? $tweet : "tweet failed";
  $log = $now."\t".$msg."\n";
  echo $log; /*コンソール出力*/
  file_put_contents("./twitter-log.txt", $log, FILE_APPEND); /*ログ書き込み*/
}

twitter-bot.phpにログ出力関数を追加します。タイムゾーンがデフォルトでは世界標準時なので東京に設定しましょう。また、PHPは関数内でグローバル変数の使用ができないため、$tweetを引数として渡してやる必要があります。

呼び出し側では以下のように記述します。ツイートに成功すると第二引数がTRUEになるので、それによってログ出力を切り替えることができます。

write_log($tweet, $twitter->getLastHttpCode() == 200);

完成

最終的にtweet-bot.phpはこんな感じになりました。

<?php
echo "start\n";
require "./twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
require_once ('./public_html/okinotori/wp-load.php');
$consumerKey       = "";
$consumerSecret    = "";
$accessToken       = "";
$accessTokenSecret = "";
$twitter = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
$lastarticle = get_last_article('post');
$tweet = $lastarticle->post_title." ".esc_url(get_permalink($lastarticle->ID));
$result = $twitter->post("statuses/update", array('status' => $tweet));
write_log($tweet, $twitter->getLastHttpCode() == 200); /*ログ出力*/

function get_last_article($post_type) { /*最新記事取得関数*/
  $args = array(
    'posts_per_page' => 1, 
    'orderby' => 'date',
    'order' => 'DESC',
    'post_type' => $post_type,
    );
  $my_posts = get_posts( $args );
  wp_reset_postdata();
  return $my_posts[0];
}

function write_log($tweet, $isSuccess){ /*ログ出力関数*/
  date_default_timezone_set('Asia/Tokyo');
  $now = date("Y/m/d H:i:s");
  $msg = $isSuccess ? $tweet : "tweet failed";
  $log = $now."\t".$msg."\n";
  echo $log;
  file_put_contents("./twitter-log.txt", $log, FILE_APPEND);
}
?>

twitter-bot.phpを実行すると、以下のようにtwitter-log.txtにツイート日時とツイート内容(あるいはエラー)のログが随時出力されていきます。

2020/05/01 13:42:29	test

おわりに

というわけで今回はTweetBotにログ出力機能を追加しました。

最新記事取得関数を移動させたりログ出力関数を追加したりとtwitter-bot.phpの記述量がだんだん増えてきたので、そろそろ関数群のファイルを分けた方がよさそうな感じがします。またその場合、ルートディレクトリ直下に増やしていくとごちゃごちゃしそうなので、ディレクトリも分けた方がよさそうです。

一通り当初から予定していた機能の実装はできたのですが、せっかく作ったのでもう少し機能を追加してみたいと考えています。ただ、格安サーバーなので微妙に機能制限がかかっているんですよね(CRONジョブ数が1つしかない、データベースのテーブルが1つしか作れない等)。次借りるときはもうちょっといいやつにしようかな。

コメント

タイトルとURLをコピーしました