PHPに慣れたいのとTwitterアプリを作ってみたいという思いからMAMPを使ったローカルサーバでTwitterbot(プロトタイプ版)を作ってみました。とはいっても今回作ったのは足掛かりみたいなものなんですがwこのエントリにはこのボットを作った際の学習メモを簡単にまとめておきます。
ボットの作り方はドットインストールの「ツイッターボットを作る」というレッスンを参考にさせて頂きました。したがって、詳しいボットの作り方を知りたい方にはドットインストールのレッスンを参照することをお勧めします。
プログラミングは大学の授業で教材をコピペする以外にはほぼ全然勉強してこなかった管理人ですが、ドットインストールはそんな初心者でもちょっとずつミニプログラムを作りながら学べるレッスンが豊富にあるのでとても重宝しています!
<目次>
- 必要なものを揃えよう
- Twitterアプリの登録
- access tokenを作る
- PHPスクリプトで呟かせてみよう
- PHPファイルを作る
- スクリプトを書く – TwitterAPIを使う
- ツイートさせる
- cronを使って自動的に呟かせてみよう
- cron(クロン)とは
- cronの設定方法
- 定期postさせる際の注意点
①必要なものを揃えよう
まず、今回ボットを作るのに必要だったものと使った開発環境について。
- 開発環境
- Mac OS X 10.6.8
- MAMP(1.9.6.1) – 今回はローカル開発環境で作りました。
※MAMPのダウンロードについては前回のエントリを参照してみてください。
- ボットを作るのに必要なもの
- PHPに対応したサーバ(ここではMAMPでローカルサーバを構築しています)
- ボット用のTwitterアカウント
- TwitterOAuthライブラリ – ダウンロードで入手
また、ボットのみならずAPIを使ってアプリを作る際には、開発者とアプリ毎に発行される
- consumer key
- consumer secret
- access token
- access token secret
という番号を使うようです。
●Twitterアプリの登録
これらの番号を発行してもらうためにはTwitterアプリの登録を行う必要があります。開発者ページ(web版のTwitterの左下に開発者ページへのリンクがあります)から登録することができます。
●access tokenを作る
access tokenを作る前に、Access levelがデフォルトでは「Read only」になっているので、SettingsのタブにあるApplication Typeを「Read and Write」に設定しておきます。
②PHPスクリプトで呟かせてみよう
●PHPファイルを作る
MAMPでは、通常HTMLやPHPファイルは/Applications/MAMP/htdocsに入れるものらしいので、今回はこのディレクトリの下にボット用のPHPファイルを作ります。
●スクリプトを書く – TwitterAPIを使う
ここでPHPファイルとTwitterの連携を取るために使う関数群(ライブラリ)がTwitterAPIです。TwitterAPIについては開発者ページ>Documentation>REST APIにリファレンス(英語)があるので、これを参照しながら実装していきます。ソースコードについてはここでは割愛させて頂きます(ドットインストールのレッスン#5以降参照)。
●ツイートさせる
スクリプトが書けたら、あとはブラウザでページを開くだけでボットが呟きます。MAMPのデフォルトの設定では、
http://localhost:8888/(htdocs以下のパス)/(ボットのPHPファイル)
でアクセスできます。
③cronを使って自動的に呟かせてみよう
●cron(クロン)とは
cronとは定期的にあるコマンド(命令)を実行させることのできるUNIX系OS(Mac OS Xなど)の常駐プログラムのことです。このままでは手動でしか呟くことができませんので、cronを使うことで自動的に(定期的に)ボットに呟かせます。ボット自らが自動的に呟くようになれば、いよいよ本格的なボットですね!
●cronの設定方法
cronでツイート間隔などを設定する場合には、「ターミナル」というコマンドライン(CUI)を使います。Macにデフォルトで入っています。/アプリケーション/ユーティリティ/ターミナルで起動します。ターミナルの使い方もドットインストールのレッスン「UNIXコマンドの基礎」で解説されていますので、慣れていない方は是非参照してみてください。
※レンタルサーバを利用してボットを開発する場合は、SSH接続やcronが使えるか前もって確認する必要があります。残念ながら私がテストサーバに使っているfreewebでは対応していませんでした…orz
ターミナルを起動したらサーバにログインしますが、今回はローカルサーバ(普段使っているPC)を使用しているので改めてログインする必要はない(既にログインできている)ようです(ちょっと確信できていません。すみません。)。
cronを設定するにはcrontabというコマンドを使います。しかし、今回は私自身コマンドラインを使うのがほぼ初めてに等しかったので、簡単にcronを設定できるCronniXというフリーソフトを使いましたw
crontabのコマンドとしては様々なサイトを見様見真似で以下のように設定したらとりあえず動きました。
分 時 日 月 曜日 cd /Applications/MAMP/htdocs/(htdocs以下のパス)/; usr/bin/php -q; php (ファイル名).php
コマンドの内容としては、
まず動かしたいPHPファイルのあるディレクトリへ移動して(cd)、
PHP本体を起動させ、
動かしたいPHPスクリプトを実行させる、
という流れになっているはずです(多分)。
-qというオプションは、なるべくメッセージを送信せずに実行させるものだそうです(レンタルサーバの設定によってはスクリプトを実行するたびにメールが送信されることもあるんだとか)。
●定期postさせる際の注意点
cronを使えば最頻1分毎に呟かせることができますが、Twitterの仕様により、同じ内容のツイートに関しては重複して投稿することはできません(エラーを返されたりduplicate textと表示されたりします)。これはどうやらTwitterのスパム対策のようです。正確な時間は定かではありませんが、1日後には再び同じ内容でツイートできるようなので、定期postをする場合には、24時間以上間隔を空けるように設定するか、微妙に違う内容(スペースを入れるなど)に変える、などの工夫が必要となります(→Twitterルールについて詳しくはこちら)。
まだcronやコマンドラインについては謎が多すぎるので、ターミナルの使い方も含めて勉強していこうと思います。とりあえずは曲がりなりにもTwitterアプリを一つ作ったということで、今後はこれを母体にTwitterアプリを作れるようになれたらなーと思っています。では:D