画像は著者の心象風景のようなものです。
前回(その弐)、前々回(その壱)につづいて作業を進めていきます。若干飽きてます。
プログラムに必要な情報を集めるよ
Twitterに投稿する為には、Twitter APIというところにチョッカイを出さなくてはいけません。「ほれ、この投稿を載せたまへ!」的なやつ。それをAPIを叩くといいます。躾の悪い子みたいですね。
で、そのAPIを叩くには叩くに値する高潔な人物かを判定せねばなりません。その有資格者であることを確認するために、Twitterのアカウントには固有の値がセットされております。それを調べなくてはいけません。次のような感じでググりましょう!
期間は、1年以内とかにして好みによっては日本語のかたがいいかもしれませんね。
次の4つを取得しましょう。そしてメモというか、値を保管しておいてください。
・Consumer Key
・Cousumer Secret
・Access Token
・Access Token Secret
楽ちんするためにライブラリを使うよ
0からTwitterにアクセスするプログラムを書いても良いのですが、車輪の再発明を繰り返してもいけませんのでライブラリを利用して楽ちんさせてもらおうと思います。
使うライブラリは、abraham/twitteroauthというもの。1人はのっぽであとはチビなんでしょうか、気になります。
さて、そろそろコードを書くのですが、まずはアブラハム(エイブラハム?)ツイッターオウス!を読み込みましょう。長い横文字を叫ぶのは弊社の伝統と思われます。
<?php
require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
このタイミングで先程取得した各種情報も変数にぶっこんでおきましょう。
//認証情報4つ 環境変数に本当は入れておくとかする
$consumerKey = "*** 先程取得したConsumer Keyを入れる ***";
$consumerSecret = "*** 先程取得したConsumer Secretを入れる ***";
$accessToken = "*** 先程取得したAccess Tokenを入れる ***";
$accessTokenSecret = "*** 先程取得したAccess Token Secretを入れる ***";
前回作った呟きリストを取得し、その中から1つ選ぶ
前回Google Spread SheetよりリストをJSONで出力できるようにしました。こいつを取得します。取得しただけだと扱いにくいので、PHPで使える連想配列に化けさせます。
// GASよりJSON取得
$url = "*** JSONが出力されるURLを記載する ***";
$json = json_decode(file_get_contents($url), true);
で、この中から1つを選びます。
$json_count = count($json);
$json_select = rand(0, $json_count -1);
$select_tweet_text = $json[$json_select]['text'];
ランダムな抽出が雑だとかありますが、ある程度ランダムに出てくれれば要件は満たすので、これでOKとします。
TwitterOAuthに投稿させる
まずは、Twitterに接続します。先程の認証情報を用いますよ。
$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
$content = $connection->get("account/verify_credentials");
本当はランダム抽出した値の判定とかすべきですが、今回はさくっと無視して投稿の準備。
$parameters = array('status' => $select_tweet_text);
$result = $connection->post('statuses/update', $parameters);
たったこれだけ。
今後の拡張について
これでツイート自体は可能になります。が、このままでは
・ランダムなので同じツイートを繰り返す
・似たようなツイートが固まる
などの問題は発生します。そのあたりは、直近のツイートを保管するように出力して、ランダム抽出の際にマッチさせるなどして回避させるような機能があるといいですよね。
Botにするために自動実行
タイトル忘れてませんよ。Botにするためには、放っておいても勝手に動いてくれないと手抜きができません。まずは、作ったPHPファイルやライブラリをAWS Lightsailで作ったウブンツくんに送らないとですね。SCPコマンドで送りつけます。
次に、自動実行するためにCrontabを使おうと思いますが、Crontabで実行すると、実行時のカレントディレクトりが変わってしまうので、この問題を回避するためにシェルを実施する用にします。つまり、
Crontabでシェルを実行 → シェルはPHPを実行 → PHPを実行
というやつです。
#!/bin/sh
/usr/bin/php -f /** ルートからのパス **/tweet.php
その上で、このシェルをCrontabに実行させます。
$ crontab -e
で、Crontabの編集画面に行き次を書き込んで保存。
15 2-11/3 * * * sh /** ルートからのパス **/tweet.sh
上記で、11時15分から3時間おきに20時15分までツイートするように設定ができました。
あとは何事も、小さくつくって大きく改造です。