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

プログラミング

こんにちは、ツイッター歴8年のぴのです。

ホームページ設立から約2週間がたちましたが、毎日それなりにアクセスがあって嬉しい管理人です。特に「やってみた系」はつかみがいいのかアクセスが多いような感じがします。

せっかくホームページを作ったので、もっと多くの人に見てもらいたいということで宣伝面を強化することにしました。その一環として、今回は定期的に最新記事のツイートをしてくれるようなTweetBotをPHPで作成していこうと思います。

管理人はTweetBot制作歴1日なので、とりあえず動作確認だけやっていきます。うまくいけばちょこちょこ改良していこうと思います。

前準備

Twitter開発者アカウントを作る

ここにアクセスしてTwitter開発者アカウントを取得します。「Apply for Developer account」をクリックして申請を進めていきます。国籍やアカウントなどを入力していきます。使用目的の欄は必須事項なので頑張って英語で書きましょう。管理人はこんな感じで書きました。

I will create a bot that tweets a link to the article and it’s title. The bot tweets As soon as I post a new article on my website. It also tweet regularly with links to my latest articles to promote my website.

Appを作る

開発者登録が済んだら、「Create App」からアプリ(今回の場合はボット)の名前や概要などを入力していきます。入力が終わったら「Keys and tokens」のタブを開いてアカウントへのアクセスに必要な4つのキーをメモ帳などにコピペしておきましょう。

Botを作る

TwitterOAuthをダウンロード

Twitterに簡単に認証してくれるTwitterOAuthをリンクからzip形式でダウンロードします。そのままFTPでサーバーのルートディレクトリ直下に展開し、適当にリネームします。管理人はroot/twitteroauthとしました。

実行ファイルの作成(PHP)

今回はPHPで実行ファイルを作成します。以下のスクリプトに、App作成時にコピペした4つのキーとツイートしたい文言を書き込み、拡張子を.phpにして保存します。その後、FTPでサーバーにアップロードします。管理人はルートディレクトリ直下に配置しました(root/tweet-bot.php)。日本語を入れる場合は文字コードをUTF-8に設定しておかないと文字化けします。

<?php
require "./twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
$consumerKey       = "";
$consumerSecret    = "";
$accessToken       = "";
$accessTokenSecret = "";
$twitter = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
$tweet = 'BotTest';
$result = $twitter->post("statuses/update", array('status' => $tweet));
if( $twitter->getLastHttpCode() == 200 ){
  echo "tweet success";
} else {
  echo "tweet failed";
}
?>

シェルスクリプトの作成

実行ファイルとの間をとりもつシェルスクリプトを作成します。これもルートディレクトリ直下に配置しました(root/cron1.sh)。実行したいファイルが複数ある場合はここに追加していく形になります。PHPのバージョンはバリューサーバーで使用できる中で最新の7.3を指定しました(古いものだと実行時にエラーや警告が出る可能性があります)。

#!/bin/sh
#PHP
/usr/local/bin/php73 /virtual/okinotori/twitter-bot.php
exit

属性の設定

デフォルトだとファイルの実行が許可されていないので、FTPで以下のファイルの属性値を700(読み書き実行可)に変更します。

  • cron1.sh
  • twitter-bot.php
  • twitteroauth内のphpファイル

Cronの設定

自動でプログラムが実行されるように、Cronというものの設定をします。バリューサーバーの場合はサーバーの便利機能によってGUI上で設定できます。以下のように設定すれば定期的にシェルプログラムを実行してくれます。

毎時30分に実行される

完成

これで定期的に自動でツイートされるようになりました。他にもいろいろできますが、とりあえず今回は固定文を自動でツイートさせています。(Twitterの制限で同じ文言は連続してツイートできないので文言は都度変えましょう)

手動で実行させてみる

Tera Termをインストール

サーバーに接続するためにTera Termをインストールします。設定は特に弄らなくていいのでそのままインストールしましょう。SSH接続できるならTera Termじゃなくても問題ないです。

サーバー側でSSH接続を許可

Tera Termで接続するために、サーバー側でSSH接続許可を出します。「お役立ちツール->SSH接続」から「SSH登録」をクリックすれば完了です。接続できるようになるまで数分かかるのと30日経つと接続できなくなる点に注意です。

Tera TermでサーバーにSSH接続

Tera Termを起動すると、ホスト名・ユーザー名・パスフレーズを要求されるので「FTP->FTP設定」に書かれているFTPサーバー・FTPアカウント・FTPパスワードをそれぞれ入力すると接続できます。

シェルプログラムを実行

以下のコマンドを実行するとシェルプログラム内でtweet-bot.phpが実行され、用意していた文言がツイートされます。(Twitterの制限で同じ文言は連続してツイートできないので文言は都度変えましょう)

/bin/sh ./cron1.sh

おわりに

疲れた….意外とネットに載っている情報が古かったりバラバラだったりで探すのも大変だわ実行したらエラーが出るわライブラリでエラーが出るわで大変でした(苦節12時間)。動いたときは人生で3番目くらいに感動しました。

敗因はPHPとTwitterOAuthのバージョンが噛み合っておらず、正しい連携が取れていなかったことだと思います。ネットの情報は古いものも多いので、詰まった場合はソフトウェアのバージョンを確認・更新してみるのも一つの手であるということを学びました。

今回はPHPでボットを作りましたが、RubyやPythonでも作れるみたいです。管理人はWordPressがPHPで作られているので、連携が楽そうと考えてPHPで作りました。この考えが正しいのかは分かりません。

実は2年前に一度TweetBotを作ってみたいと思ったことがあったのですが、特にボットでつぶやきたいことが無かったので結局やらずじまいでした。ホームページを開設して、「ホームページを宣伝したい」という目的ができたので、再びやってみようと思い立ったわけです。

みなさんもボットを作ってみてはいかが?

【2020/4/26追記】その2を公開しました。

コメント

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