ホームに戻る
 PHP で Twitter API を使う

0、はじめに

Twitter API を使って
PHPでWebサービスを作ってみます。

Twitter API の仕様は随時変更されるので、
ここに書いたことがいつまで通用するかは不明です。
(現在:2012年4月30日)

PHPのライブラリとして twitteroauth を使用します。
twitteroauth.php と OAuth.php の2ファイルが必要です。
場所は twitteroauth で検索してください。

また、使用するOSはCentOSです。
WebサーバはApacheを使用します。

1、Twitterとは?

Twitterとは掲示板みたいなものです。
掲示板との違いは、

自分の掲示板は自分のみが書き込めること。
読みたい相手の掲示板の内容を自分の掲示板内に取り込めること。
逆に、自分の書いた内容を相手の掲示板に挟みこめること。

以上の仕組みにより、相手の掲示板に書き込む必要が無く、
遠慮せずに書き込みができるという環境を構築している。

また、TwitterはAPIを提供しており、
公式Twitterの画面から以外でも書き込みができる。
たとえば、個人や企業のWebサービスからも書き込みできるし、
個人や企業が作ったアプリケーションからも書き込みできる。

Twitterはこういった仕組みにより書き込みが楽にできる。
頻繁な書き込みにより即時性のある情報が集まる。
Twitterは検索エンジンよりもブログよりも早い情報源になりうる。

重要な用語として、
書き込みすることを「ツィート」するという。
人の書き込みを取り入れることを「フォロー」するという。
時系列の書き込みされた情報を「タイムライン」と呼ぶ。

2、Twitter API

Twitter API はTwitterの機能を外部に提供します。
例えば、公式サイト以外のサイトでもタイムラインを表示できたり、
スマートフォンのアプリから現在位置をツィートできたりする。

APIの詳細は各APIのURLにGETなりPOSTなりすると、
結果を返すというものである。

ただし、APIにも問題があります。
得体の知れないWebサービスやアプリケーションが、
勝手にTwitterに頻繁にアクセスするのは問題です。
よって、時間あたりの使用回数に制限を設けています。
また、事前に登録ページでアプリケーションの登録が必要です。
登録の際にどういったアプリケーションであるかを設定します。
登録ページで情報をやり取りする際のキー(文字列)を与えられます。
このキーは秘密にしておきます。公開してはいけません。

登録さえできれば、言語を問わずに開発が可能です。
ただし、実際には各言語で用意されているライブラリを使うのが現実的です。
例えば、java であれば Twitter4J が有名です。

3、OAuth認証について

Twitterにツィートするにはパスワードが必要です。
しかし、Webサービスやアプリケーションにパスワードは書けません。
Webサービスやアプリケーションがパスワードを盗めるからです。
よって、Webサービスやアプリケーションにパスワードを書かない認証が必要です。
この認証を行う方法にOAuth認証があります。

OAuth認証を使用する際には、
APIを使用する登録ページで得たキーが必要になります。
実際の認証はライブラリの内部で行うので、
具体的にどういうやり取りをしているのかは調べていません。
ライブラリで使う場合はライブラリの関数なりにキーの文字列を渡せばOKです。

4、(余談)PHP5.4のインストール

CentOSにPHP5.4を入れるのに手間取ったので備忘録。

普通にインストールすると以下の現象で正常に動作しない。

libphp5.so が作成されない。
curl_init() が見つからない。

よって、まず curl をインストールする。
次に、PHP をインストールするがこの際に、

./configure --prefix=/usr/local/php5 \
            --with-apxs2=/usr/local/sbin/apxs \
            --with-curl=/usr/local/lib \
            --with-curlwrappers

とする。あとは普通に make → make install とやる。

httpd.conf に以下の文を追加するのも忘れずに。

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

5、利用規約を表示するサンプル

API使用登録で得たキーは不要。

<?php
// twitteroauth.phpを読み込む
require_once("twitteroauth.php");

$to = new TwitterOAuth(NULL,NULL);

// Tweet を POST し結果を XML で得る
$req = $to->OAuthRequest("http://api.twitter.com/1/legal/tos.xml","GET",array());

$xml = simplexml_load_string($req);

echo "<pre><b>".$xml."</b></pre>\n";
?>

6、ツィートするサンプル

API使用登録で得たキーを書き込む必要あり。

<?php
// twitteroauth.php のパス
require_once("twitteroauth.php");

$consumer_key = "consumer_key";                // 要書き換え
$consumer_secret = "consumer_secret";          // 要書き換え
$access_token = "access_token";                // 要書き換え
$access_token_secret = "access_token_secret";  // 要書き換え

$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);

// Tweet を POST し結果を XML で得る
$req = $to->OAuthRequest("http://api.twitter.com/1/statuses/update.xml","POST",array("status"=>"Tweet Test"));

header("Content-Type: application/xml");
echo $req;
?>

7、タイムラインを表示するサンプル

API使用登録で得たキーを書き込む必要あり。

<?php
// twitteroauth.php のパス
require_once("twitteroauth.php");

$consumer_key = "consumer_key";                // 要書き換え
$consumer_secret = "consumer_secret";          // 要書き換え
$access_token = "access_token";                // 要書き換え
$access_token_secret = "access_token_secret";  // 要書き換え

$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);

// GET で10ツィートのタイムラインを XML で得る
$req = $to->OAuthRequest("http://api.twitter.com/1/statuses/home_timeline.xml","GET",array("count"=>"10"));

$xml = simplexml_load_string($req);

foreach($xml->status as $status){
  $status_id = $status->id;
  $text = $status->text;
  $user_id = $status->user->id;
  $screen_name = $status->user->screen_name;
  $name = $status->user->name;
  echo "<p><b>".$screen_name." / ".$name."</b> <a href=\"http://twitter.com/".$screen_name."/status/".$status_id."\">Permalink</a><br />\n".$text."</p>\n";
}
?>

inserted by FC2 system