いきなりもちあがった企画の為、Twitterのbotを作らなければならなくなりました。
そんなに難しくないとは思っていましたが、実際のやり方などは全く知らないので、とりあえず調べながら作ってみます。
調べてみると、一番簡単なのはBASIC認証つかってhttp://twitter.com/statuses/update.xmlへリクエストを投げる方法らしい。
http://twitter.com/statuses/update.xml?status=message
のmessageのところにツイートしたい文字列を入れておくだけで、Twitterに投稿できます。
ただ、ユーザー名とパスワードを求められるので、プログラムで処理する場合は、これを自動で渡す処理がいります。
早速Googleさんでサンプルコードを検索すると、
http://d.hatena.ne.jp/bardothodol/20090930
↑にサンプルが載っていました。
curl
ってのを使うらしいですね。
必要とおぼしき部分だけ抽出してサンプルコードを作ります。
<?php $username = "hoge"; $password = "foo"; $message = "テスト" tweet($message ,$username,$password); //ポスト部分の関数 function tweet($message ,$username,$password){ $message =urlencode($message); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://twitter.com/statuses/update.xml'); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "status=$message "); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); $buffer = curl_exec($ch); curl_close($ch); } ?>
これで、「テスト」というツイートがhogeアカウントに投稿されます。
さすが簡単お手軽。
ただ、BASIC認証は近々廃止予定のようです。
http://blog.twitter.jp/2010/06/twitter-api-oauth.html
なんと2010/8/31からは全部403が返ってきてしまうという…。
簡単お手軽な方法が見つかったと思ったのに、別の方法を探す必要があるようです。
もうひとつの認証方法は、OAuth認証というらしいですね。
このOAuth認証、ちょっと調べた限りでは作り込むのが非常に面倒臭そうです。
そこはそれ、作っている人がいるわけです。
世の中便利ですね。
http://github.com/abraham/twitteroauth
から、
twitteroauth/OAuth.php
twitteroauth/twitteroauth.php
を入手します。
これで簡単にOAuth認証が可能になるみたいです。
さらに、OAuth認証をするには投稿するアカウントでAPI登録をして、各種のキーを取得しなければならないようなので、さっさと取得します。
まずは投稿するアカウントでTwitterにログインしてから、以下のアドレスにアクセスします。
http://dev.twitter.com/apps/
必要事項を入力して登録すると、Consumer key、Consumer secretが表示されます。
OAuth認証にはあと、Access_Token、Access Token Secretが必要になります。
もう一度さっきのアドレスにアクセスして、アバターをクリックします。
API設定の画面が出てくるので、右メニューの「My Access Token」をクリックします。
そうすると、最後の二つのキーが表示されますので、全部メモなりなんなりしておきます。
defineに書いておきました。
<?php ##Twitter関連 define("consumer_key","hoge"); // Consumer keyの値 define("consumer_secret","foo"); // Consumer secretの値 define("access_token","hogehoge"); // Access Tokenの値 define("access_token_secret","foofoo"); // Access Token Secretの値 ?>
みたいな形です。
下のサイトでダウンロードしたモジュールをつかったサンプルを見つけたので、これも必要な部分だけ抽出してみます。
http://www.sdn-project.net/labo/oauth.html
twitteroauthに関しては、twitteroauth/twitteroauth.phpを読み込めば後はよきに計らってくれるみたいなので、頭でrequire_onceで呼び出しておきます。
<?php require_once "twitteroauth/twitteroauth.php"; ##Twitter関連 define("consumer_key","hoge"); // Consumer keyの値 define("consumer_secret","foo"); // Consumer secretの値 define("access_token","hogehoge"); // Access Tokenの値 define("access_token_secret","foofoo"); // Access Token Secretの値 PostTweet("テストです。"); # クーポンテキストをTwitterにPOST # PostTweet ############################ function PostTweet($message){ // OAuthオブジェクト生成 $to = new TwitterOAuth(consumer_key,consumer_secret,access_token,access_token_secret); // TwitterへPOSTする。パラメーターは配列に格納する $req = $to->OAuthRequest("https://twitter.com/statuses/update.xml","POST",array("status"=>"$message")); } ?>
ざっとこんな感じです。
上のコードを実行すると、Twitterアカウントに「テストです。」がPostされます。
Postだけならとても簡単でした。