最近始めたTwitterの聖書朗読プロジェクトでは、TwitterAPIというものを利用して、プログラムで所定時刻にツイートするという手法を使っています。
このTwitterAPIを使う設定の仕方を毎回忘れてしまうので、ここに備忘録として記事を残しておきます。
あくまで私個人のメモなので、正しいとは限りません。
一次情報はTwitterヘルプセンターなどを確認してください。
1.アプリケーションの構想
2.アプリケーションの登録
3.アプリケーションの開発
「phpinfo表示して」と言われたら、実際に表示できるレベルの人。
Twitterで自動で呟きを行うTwitterBotをPHPのプログラミングで作ること。
●サーバー
今回はSAKURA Internetさんを使いました。ちなみにレンタルサーバーのスタンダードプランになります。
主にサーバーに必要な機能は、TwitterBotを動かすためのPHPと、時間を指定してプログラムを起動するためのcronです。あとPHPを動かすためにapacheとかその辺も必要です。(SAKURA Internetはこれらがすべてそろっています)
●Twitterアカウント
TwitterBotにするアカウントが必要です。
なお、既存アカウントの流用も可能です。「このアカウントはBot」と決めるのは開発者自身です。Botにしても手動で投稿できますし、普通に使っていたアカウントをBotにすることもできます。
●がんばる気持
何かを作るためにはがんばる気持がかかせません。
まず、構想を練ります。下記のことは決めておくとよいでしょう。
●ツイートの頻度
ツイートの上限は1分間に60回までという表記をどこかで見たのですが、公式では確認できませんでした。あんまりたくさんのツイートはできないと思います。
●ツイートの内容
ツイートする文章をどこに保存し、どうやって読みだして使うのかを決めておきましょう。(他人の文章を使う場合は著作権などに注意)。(※ツイートデータの管理方法は本記事では扱いません。)
また、ツイートはランダムにするのか、番号を振っておいて順番にするのかなども決めておきましょう。
●フォローの扱い
お返しフォローするのかどうか、こちらからフォローするのかどうか、などなど。
システムを作る時全般に言えますが「ポリシー」を決めておくと、開発中や運用中などに考えが揺らいだ時にどうするかの判断に役に立つかと思います。(○○を実現するために作る! ◇◇がゴール など)
余談ですが、聖書朗読プロジェクトのポリシーは「私が聖書を読みたいからそのために作った」です。なので、途中でフォロアーが0になろうとも、(著作権関連以外で)何を言われようとも、私が読みたい限り続けます。
Twitterのアカウント名は先着順なので、早めに確保しておくのが吉です。
ですが、Twitterルールにもあるように、スパム・不正利用・確保のためだけの大量のアカウント取得などはルール違反です。
私は、Twitterがどのような思想で動いているかを自分なりに理解した上での「健全」な使い方をするのであれば問題ない、と思っています。
さて、では実際の作業に入ります。
TwitterAPIをOAuthで使えるライブラリをabrahamさんがgithubで公開しているので、これを使います。これは結構楽に扱うことができるので重宝しています。
twitteroauth(github)
Downloadsのリンクで落とせます。今回は0.2.0-beta3を使いました。

実際に使うのは「twitteroauth」フォルダの中身だけです、それをサーバーにアップロードします。
Twitter側でアプリケーション連携の設定を行います。この連携設定によって「このアカウントでは、○○アプリケーションを使います」という許可を行うことができ、
プログラムからツイートを行うことができるようになります。
アプリケーションの連携はhttps://dev.twitter.com/appsで行います。(http://twitter.com/appsというのもありましたが、これだとDefault Access typeの設定がRead-onlyになってしまい、Read&Writeに修正しても、変更されませんでした。)
アクセスできたらRegister a new appを選択しましょう。

アプリケーションの設定を記入します。内容は後から変更可能です。
●Application Name:アプリケーション名です。公開しないのであれば自分が分かる文章で良いと思います。
●Description:アプリケーションの説明です。これも、公開しないのであれば適当で良いでしょう。
●Application:Website:アプリケーションのホームページURLです。これも、公開しないのであれば(略
●Oranization:アプリケーションの開発組織名です。これも(略
●Application Type:今回はPHPから動かすので、Browserを選択します。(正確にはブラウザというより、インタネットアクセスなのですけどね)Windowsアプリケーションとして開発する場合などはClientを選択するのですね。
●Callback URL:プログラムとTwitter認証を連携した場合のコールバック先ですが、今回はそういうことは行わないので、適当で良いと思います。
●Default Access type:今回は開発するアプリケーションがツイート(つまりWrite)するのでRead&Writeを選択します。なお、このHPの左端のように、ツイートを表示(Read)するだけならRead-onlyでOKです。
●Application Icon:アプリケーションのアイコンです。先ほどのアプリケーション連携ページに表示される画像ですので、(略
●CAPTCHA:最後に、ユーザー登録などでよくある「読みにくい文字が表示されてて、その文字を入力する」場所があるので、それを入力します。
2つの単語の間のスペースは必要みたいです。成功するまで何度もがんばります。
無事に登録が完了すればOKです。
登録したアプリケーションページでConsumer keyとConsumer secretというキーフレーズを得ることができます。これは、プログラムで利用するので覚えておきます。

このキーフレーズはまさに鍵で、アプリケーションがこの鍵を使ってツイッターを操作することになります。できるだけ秘密にしておきましょう。
同じく、アプリケーションページの右側のメニューから「My Access Token」を選択します。

すると、Access TokenとAccess Token Secretを得ることができます。先ほど得た物と合わせて4つのフレーズをプログラムで利用します。

これで鍵がそろったので、アプリケーションを開発することができます。
下記が「HelloWorld!」になります。
ライブラリは最初にダウンロードしたTwitterOAuthのものですので、適切なパスにして修正してください。
<?php
  //  TwitterOAuthのライブラリ読み込み
  include_once './twitteroauth/twitteroauth.php';
  //  キーの設定
  $consumer_key         = "/* ここにConsumer key */";
  $consumer_secret      = "/* ここにConsumer secret */";
  $access_token         = "/* ここにAccess Token */";
  $access_token_secret  = "/* ここにAccess Token Secret */";
  //  認証
  $twitter = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);
  
  //  つぶやく
  $text = "Hello World!";
  $req = $twitter->OAuthRequest("https://twitter.com/statuses/update.xml", "POST", array("status" => $text));
  
  var_dump($req);
このプログラムをサーバーにアップロードし、そのファイルにブラウザからアクセスすることでツイートが投稿されます。(なので、URLは他者からは分からないものにしておきましょう。)
上記は投稿しかしませんが、TwitterAPIの仕様としてhttp://apiwiki.twitter.com/w/page/22554679/Twitter-API-Documentationを参考にすることで
OAuthRequest()の引数を変更して、Twitterで行える操作をプログラムから操ることができます。
ちなみに、同じ内容を連続して発言すると「/statuses/update.xml Status is a duplicate.」というエラーが返ってきます。文章を変更するなどで対処してください。
これで、TwitterBotが完成です。あとは、ツイート文章の読み込み部分を好きなようにプログラムして、TwitterBotを開発していきましょう!
なお、特定の時間にツイートする場合は、サーバーのcronを用います。
SAKURA Internetでは、cronでもいったんPHPのパスに移動しないとPHPが実行できないようなので、
cd /home/アカウント名/www/phpがあるフォルダへのパス ; /usr/local/bin/php /home/アカウント名/www/phpがあるフォルダへのパス/phpファイル.php
と記述します。これで、cronの指定時間ごとにツイートが行われるようになります。
| ID:970 | ふみ | 2011-05-07 22:38:13 | 
| 
Bot、というか "決めた時間に投稿"について 今度相談したいことがあるので お時間ある時に良ければお願いします  | 
||
| ID:971 | はぅ君@管理人 | 2011-05-07 22:43:10 | 
| 
>ふみさん どーも(・-・)ノ いつでもOKですよん  | 
||
2013年もよろしくお願いいたします!
| 合計 | 228095 | 
| 12/12 | 20 | 
| 12/11 | 99 | 
| 12/10 | 80 | 
| 12/09 | 93 | 
| 12/08 | 78 | 
| 12/07 | 93 | 
| 12/06 | 98 | 
| 1,722,433 | 秒 | 
| 478 | 時間 | 
| 19 | 日 | 
| 5.4617 | % |