【Twitter API/PHP】データベースの情報を使ったTwitterのbotを作成する


今回は私が所持しているツイッターのアカウントから定期的にツイートを行うTwitterのbotを作成したので、その手順を記事として雑記程度に残しておこうと思います。

ウェブプログラムの操作を行うためにPHPを使ったのですが、
そこまで難しいものでもないと感じました。

今回行ったのは、

  1. レンタルサーバー上のデータベースから適当な値を取得し、その内容をツイートする
  2. Twitterへのツイートを行うためにTwitter APIを使用する
  3. 自動投稿設定、botプログラムの簡易セキュリティ設定はレンタルサーバーの機能を使用(後述)

3番に関しては、LinuxのスケジューラCron(クーロン)、簡易セキュリティはBASIC認証を使っています。これはレンタルサーバー側が提供している機能を利用しているので、IaaS(ホスティングサービス・レンタルサーバー)によって適宜対応する形になると思います。

ちなみに私の場合はエックスサーバーをレンタルしているので上記の機能を利用できた、というだけです。


■Twitter APIの利用

ツイッターへ自動的にツイートを行うためにはウェブサービスであるtwittbotBotbirdなどを利用する手があります。

既存の機能で問題なければこれらを利用するのが一番オススメです。

今回は規定の条件でツイートを行うかなり凝ったものになるため、独自に作成したbotプログラム環境を構築する事にしました。

そのためにはまずTwitterが提供している共有データソース情報を取得する必要があります。
それがTwitter APIです。

詳しくはこちらのサイトをご覧ください

Twitter API キーを取得する

Twitterが提供している機能に「ツイートを行う」機能があります。
今回はこれを使用していきます。

上記のウェブサイトか”Twitter API キー 取得 “でウェブ検索するとたくさん情報が出てきますので、結果的にConsumer Key、Consumer Secret、Access Token、Access Token Keyの情報を取得して下さい。

これは個人情報なので決して公開しないように(分かるとは思いますが念のため( ^ω^))


■botの作成(PHP)

今回作成したのは、レンタルサーバー上で提供されているデータベースの情報を元にツイート内容を構成しそれをbotプログラムとしたものです。

まずはその中身をご覧ください。
※汚いソースに見える場合はご了承下さいm(._.)m

●ソースコードの解説

11~12行目、24行目で指定しているTwitterのOAuth認証というものがあります。
これがツイートをする機能を提供しているプログラムの本体になります。

TwitterOAuthをこちらから入手します → https://github.com/abraham/twitteroauth
詳しい説明 → https://twitteroauth.com/

英文なので読めない方は無理をせずGoogle翻訳さんと二人三脚して下さい。

ダウンロードしたら、以下のような感じでサーバー上へ配置して下さい。
パス名、プログラム名は適宜好きな感じに調整して下さいです( ^ω^)

上記の例で行くとtwitteroauthが先程のダウンロードファイル一式で、先方で解説したソースコードはtwitter-autoatweet_daily~になっているPHPファイルです。

またファイルを配置したら属性も変えておきましょう。

基本的には管理者のみが実行できるようにしておけば良いと思います。
実行プログラムは属性 [rwxr–r–]で良いでしょう。

先程のTwitterOAuthを使って、事前に入手したConsumer Key、Consumer Secret、Access Token、Access Token Keyの情報を15~21行目へ適宜埋め込んで下さい。

ソースコードの解説に戻ります。

28行目のmysqliプロシージャがデータベースを引っ張り出している部分になります。
DBオープンに成功したらDBのキャラクタ文字セットと一致させるようにして下さい。

これについて分からなければ調べて下さい。

基本的にはUTF-8形式なので上記のコード例の通りで良いはずです。

データベースを取り扱う関係上、データベースのリレーションシップ/RDBMSなど基本的な知識は予め有るという認識でこの解説をしていますので、その点に関してはご了承下さいm(_ _)m

41行目で実際にDB接続したDB変数を使っています。
ソースコードではDBでSQLを実行するように書いています。

SQLは37~40行目でテキストとしてクエリ文を代入しているので、それをDBで実行している形です。
queryプロシージャでSQLが実行できます。

43行目はそのまま調べた結果を引用しているので、詳細は調べて下さい(適当で申し訳(笑)
何かfetch_assocファンクションの戻り値でDB列から値を取り出せるようになるみたいです。

45行目以降で先程取得したテーブルの各列情報を編集加工してツイート文章を構築しています。

これが105行目まで続いています。

ちなみに改行コードはバックスラッシュと小文字nをダブルクオーテーションで括って下さい。
それ以外でも成功すればいいですが、私の場合はこれをしないと改行出来ませんでした。(HTMLのbrタグは無理でした)

116~117行目はそのままで良いです。
91行目、108行目は結果セットを受け取ったものをそれぞれメモリ解放(無効化)していますので、これもそのまま書いておいて下さい。

後は実際の動きを見ながらツイート内容の確認をしたい場合に、このままだと実際のツイートを発信して、消して、また再送信…とするわけにもいかないでしょうからPHPの標準関数 echoを使ってブラウザ上で表示確認をすれば良いでしょう。(111行目のコメントを解除して、116、117行目をコメントアウトする。その後サーバーへ配置したソースコードへアクセスすればブラウザでツイート内容を確認しながら作成できます)

本当はXAMPP等の仮想サーバーをローカルに作成して行えば良いですが、データベースアクセスやjsonのインストールなど面倒な事が多いので今回はウェブブラウザで表示確認する方法を書きました。

 

ちなみに上記のプログラムは現在実際に定期実行しており、以下のようなものが日々ツイートされています。

 

 

上記だと日付や月齢などをデータベースから取得しています。

データベースの構造は以下のような感じです。

meta_id crient_date julian_mmdd gaia_mmdd solar_term lunar_age public_holiday
34 2018-02-03 00:00:00 12/18 07/25 17.03

また他にも天気予報をAPIから読み取って投稿するものも作成していますので、
ソースコードとツイート内容も転載致します。

宜しければご覧ください。


■その他注意事項

BASIC認証については私はレンタルサーバーで提供されているものを利用していますので、それがあれば使ってもらって良いのですが、ない場合は無闇にウェブサーバー上にソースを配置すると不特定多数の人からプログラムを改変等される危険があります。

上記一連の構築をされる際はお気をつけ下さい。
htaccess等の編集について調べていただくのもよいかと思います。

 

また動作に関して注意事項として追記です。

TwitterOAuth認証はPHPのバージョンが5.3以前のものだと動作しませんのでご注意下さい。

またその他分からない事・情報が間違っている・問題が有る等あれば、コメントの方頂ければ良いかなと思います。
可能な範囲でレスポンス対応していきます。

また上記のソースコードの転載は基本的に問題ございませんが、これによって発生した損害やトラブルにつきましても私は一切責任を負えませんので予めご理解下さいね(^_^;)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください