Twitterを100倍楽しむためのbot開発基礎講座

第3回実際にTwitter botを作ってみる

前回Twitter botを作るための基礎知識としてTwitter APIについて説明しました。今回は実際にプログラムを組んでみましょう。ここでは例としてPHPでの発言方法を紹介します。

Twitter botに発言させてみる

まずはPHPの標準機能を使って発言をしてみます。Twitter用ライブラリを使った発言については後ほど解説します。

<?php
// curlリソースの作成
$curl = curl_init();

// ユーザ名
$username = "(ユーザ名を設定)";

// パスワード
$password = "(パスワードを設定)";

// 発言する文字列を設定する
// プログラムの文字コードがUTF-8の場合はこのまま
$status = "日本語のテスト";
// プログラムの文字コードがSJISの場合はUTF-8に変換
//$status = mb_convert_encoding($status, "UTF-8", "SJIS");

// 発言用のURLを設定(TwitterのAPIドキュメントを参照)
$url = "https://api.twitter.com/1/statuses/update.json";

// POSTフィールドを作成
$postData = array("status" => $status);

// 認証情報を設定
$authData = "$username:$password";

// curlに各種パラメータを設定する
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, $authData);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Expect:"));

$response = curl_exec($curl);
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);

if($http_code == "200" && !empty($response)) {
  print "ok\n";
} else {
  print "ng\n";
  print curl_error($curl);
}

curl_close($curl);
?>

上記のうち、ユーザ名とパスワードは用意しておいたアカウント情報に置き換えてください。これを、たとえばtest.phpというファイル名で保存し、PHPコマンドから実行します。

php test.php

okと表示されたでしょうか?ユーザ名として指定したアカウントで正しく発言できているか確認してみましょう。

さて、今回はbotに発言させるためにユーザ名/パスワードを直書きしてBASIC認証を用いましたが、実はこの方法は2010年6月30日で使えなくなります。今後使えなくなってしまいますので、新しい認証方式であるOAuthを用いた発言を紹介します。

また、合わせてOAuthを含めて簡単に発言ができるPHP用のTwitterライブラリも紹介します。

OAuthとは

OAuthとは、Twitter APIでも使われている認可情報を受け渡すためのプロトコルです。OAuthの詳しい説明は割愛しますが、TwitterではBASIC認証に代わる認証方式として使用することが推奨されています。OAuthに関する詳しい説明はゼロから学ぶOAuthが参考になります。

OAuthアプリを登録する

Twitter APIでOAuthを利用するためには、アプリ登録が必要となります。Twitter botはアプリではないのですが、一種のアプリとみなして登録が必要です。 複数のTwitter botを作った場合でもアプリ登録は1つだけで大丈夫です(bot毎に分けることも可能です⁠⁠。

では実際にOAuthアプリを利用してみましょう。まずhttp://twitter.com/appsにアクセスしてください。

図1 Twitterアプリケーション
図1 Twitterアプリケーション

図1のようなTwitterアプリケーションの画面が表示されたら、⁠新しいアプリケーションを追加 ≫」のリンクをクリックします。すると図2のような画面が表示されます。

図2 必要項目の入力画面
図2 必要項目の入力画面

必須項目について説明します。必須項目以外は、とくに変更する必要はありませんのでそのままで大丈夫です。これらの入力情報は後から修正が可能です。

アプリケーション名 Twitterの発言と一緒に「⁠⁠アプリケーション名)から」と表示されます。
アプリケーションの説明 必須項目ですが、bot用でしか使わないのであれば、適当な入力で構いません。
アプリケーションのウェブサイトURL Twitterの発言と一緒に表示される「⁠⁠アプリケーション名)から」をクリックした時のリンク先になります。
アプリケーションの種類 Twitter botで利用する場合はクライアントアプリケーションを選択してください。
Default Access Type プログラムからbotに発言させる場合はRead & Writeを選択します。

最後にCAPTCHAを正しく入力して保存を押します。

入力内容に不備がなければ、Application Detailsが表示されます。

図3 Application Details
図3 Application Details

このうち、

  • Consumer key
  • Consumer secret

が今回のTwitter botのプログラム作成に必要となる情報です。

これらの情報はhttp://twitter.com/appsにアクセスすれば再度確認できます。

PHP用Twitterライブラリtwitteroauth

では、さっそくOAuthを使ってTwitter botから発言させてみるのですが、自前でOAuthを実装するのは簡単ではありません。なのでOAuthに対応したTwitterライブラリを使って発言させてみましょう。

PHPでOAuthに対応したTwitterライブラリはいくつかありますが、ここではtwitteroauthを紹介します。

ダウンロードページから最新版(2010/05/16時点で0.2.0-beta3)をダウンロードします。圧縮ファイルを解凍すると、twitteroauthディレクトリの中に

  • OAuth.php
  • twitteroauth.php

の2ファイルか確認できるかと思います。今回必要となるファイルはこの2つです。

twitteroauthの設定

OAuthを利用するためには、先ほど登録したOAuthアプリからTwitter botのアカウントを操作できるように許可を与える(OAuthトークンを取得する)必要があります。そのOAuthトークンを取得するプログラムを以下に掲載します。

<?php
require_once("twitteroauth.php");

// アプリ登録で取得したConsumer keyを設定
$consumer_key="consumer_key";
// アプリ登録で取得したConsumer secretを設定
$consumer_secret="consumer_secret";

$twitter = new TwitterOAuth($consumer_key, $consumer_secret);

// リクエストトークンの取得
$request_token = $twitter->getRequestToken();
// 認証用URLの取得
$url = $twitter->getAuthorizeURL($request_token);

print "$url\n";
print "にアクセスし、アクセスを許可した後表示される暗証番号を入力してください: ";

// 暗証番号を入力
$pin = trim(fgets(STDIN));

// 暗証番号からアクセストークンを取得する
$token = $twitter->getAccessToken($pin);
$oauth_token = $token["oauth_token"];
$oauth_token_secret = $token["oauth_token_secret"];

if(!empty($oauth_token) && !empty($oauth_token_secret)) {
  print "成功しました\n";
  print "\$oauth_token=\"$oauth_token\";\n";
  print "\$oauth_token_secret=\"$oauth_token_secret\";\n";
  fgets(STDIN);
} else {
  print "失敗しました\n";
}
?>

これをget_token.phpのファイル名で保存します。

利用方法ですが、まず手元のWebブラウザでTwitter botのアカウントをつかってログインします。ログイン後、先ほど保存したget_token.phpをphpコマンドから実行します。

php get_token.php

表示されたURLにアクセスし、Twitter botを先程登録したOAuthアプリから操作できるよう許可を行います。許可をすると、暗証番号が表示されますので、実行中のget_token.phpの画面に暗証番号を入力してください。

正しく入力されると「成功しました」の表示とともに、$oauth_tokenと$oauth_token_secretが表示されます。このoauth_tokenと「失敗しました」と表示された場合は設定を確認し、もう一度やり直してみてください。

twitteroauthを使った投稿テスト

これでOAuthを用いて投稿する準備が整いました。先程と同じbotからの発言をOAuthを用いて実行してみます。

<?php
require_once("twitteroauth.php");

// OAuthアプリ登録で取得したConsumer keyを設定
$consumer_key="";
// OAuthアプリ登録で取得したConsumer secretを設定
$consumer_secret="";
// OAuthトークン取得プログラムで取得したoauth_tokenを設定
$oauth_token="oauth_token";
// OAuthトークン取得プログラムで取得したoauth_token_secretを設定
$oauth_token_secret="oauth_token_secret";

// プログラムの文字コードがUTF-8の場合はこのまま
$status = "OAuth経由での発言テスト";
// プログラムの文字コードがSJISの場合はUTF-8に変換
//$status = mb_convert_encoding($status, "UTF-8", "SJIS");

// 発言を行うメソッドを指定
$method = "statuses/update";
// パラメータを指定(ここでは発言内容を指定)
$parameters = array("status" => $status);

// TwitterOAuthのインスタンスを生成
$twitter = new TwitterOAuth(
  $consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret
);

// Twitterに発言をPOST
$response = $twitter->post($method, $parameters);
$http_info = $twitter->http_info;
$http_code = $http_info["http_code"];

if($http_code == "200" && !empty($response)) {
  print "ok\n";
} else {
  print "ng\n";
}
?>

これをoauth_test.phpで保存し、phpコマンドから実行してみましょう。

php oauth_test..php

正しく発言できたでしょうか。

今回は基本的な発言方法とOAuthの認証情報の取得およびPHPのTwitterライブラリを紹介しました。次回はTwitter botの種類によってどのようなプログラムを組むといいかの事例を紹介したいと思います。

おすすめ記事

記事・ニュース一覧