PHPでTwitterのプロフィール検索してリストを作る方法(OAuth対応版)

|
Clip to Evernote PHPでTwitterのプロフィール検索してリストを作る方法(OAuth対応版)

Twitterのリスト機能って便利ですよね.例えば,イベントなどでその関係者のつぶやきを一覧したい,でもフォローするのはアレだしって時に使えます.同様に,ある共通の趣味を持っている人を集めるとか,ある特定の病気と闘っている人を集めるとか,色々と応用ができます.そんなこんなで,最近はリストを作って喜んでます.

そんなこんなで,今日はTwitter標準のAPIではできないことをサードパーティ製APIで実現しまくる方法を紹介します!具体的には,プロフィールに特定のキーワードが含まれているユーザを抽出して,リストを作る方法です.実装はいつも通りにPHPでOAuth対応です.書き忘れていますが,ソースは当然の如くUTF-8で保存してくださいね.

tps.lefthandle.netのAPIを用いる場合
Twitterのプロフィール検索を提供しているサードパーティは,ざっくり調べた感じでは2カ所あります.そのうちの1カ所がtps.lefthandle.netです.主な仕様としては,GETリクエストに対してJSONで返事します.結果は最大100件で,ユーザー登録順,follower数順,最近のつぶやき順が選べます.というかドキュメント読んで下さい

このAPIを使ってプロフィール検索をして,引っかかった人をリストに追加するコードはこんな感じです.

<?php
$ids = 'yourscreenname';
$listname = 'listname';
$url = "http://api.twitter.com/1/$ids/$listname/members.json";
$q = urlencode('キーワード');
$sortmode = 'recent';//
register, follower
//search APIのURL
$c = curl_init("http://tps.lefthandle.net/rest/?s=$q&sort=$sortmode");
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($c);
curl_close($c);
$json = json_decode($response);
//リストに追加する
foreach ($json as $u) {
$param = array('id' => $u->screen_name);
$res = twitter_api($url, OAUTH_HTTP_METHOD_POST, $param);
}

//twitter api
function twitter_api($url, $method=OAUTH_HTTP_METHOD_GET, $param=null) {
$consumerKey = '
consumerKey';
$consumerSecret = '
consumerSecret';
$oauthToken = '
oauthToken';
$oauthTokenSecret = '
oauthTokenSecret';

try {
$oauth = new OAuth($consumerKey, $consumerSecret,
OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI);
$oauth->setToken($oauthToken, $oauthTokenSecret);
$oauth->fetch($url, $param, $method);
$response = $oauth->getLastResponse();
return $response;
} catch (OAuthException $e) {
return $e;
}
}
?>

ベリーイージーね.前提として,リストは作っておいて下さい.空でも空じゃなくても構いません.もちろん,エラー処理がいい加減なんで,適当に修正して下さい.OAuthのトークンは適当な方法で取得して下さい.この方法だと,検索に引っかかった人を無差別に登録するので,既登録の人を再度登録しようとしたりして無駄が多いので,既登録者リストとの差分を取るとかの工夫をしたら良いんじゃないかと思います.

twpro.jpのAPIを用いる場合
もいっこの方がtwpro.jpです.主な仕様としては,GETリクエストにJSONで返事します.IPアドレス毎に1000回/時のAPIコールが可能です.また,検索結果が最大300件となっています.また,JSONPのコールバックが使えます.使わないけど.まぁ,ドキュメント読んでね.

このAPIを使ってプロフィール検索をして,引っかかった人をリストに追加するコードはこんな感じです.

<?php
$ids = 'yourscreenname';
$listname = 'listname';
$url = "http://api.twitter.com/1/$ids/$listname/members.xml";
$q = urlencode('キーワード');

//search APIのURL
$c = curl_init("http://api.twpro.jp/1/search?q=$q&num=300");
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($c);
curl_close($c);
$json = json_decode($response);
//リストに追加する
foreach ($json->users as $u) {
$param = array('id' => $u->screen_name);
$res = twitter_api($url, OAUTH_HTTP_METHOD_POST, $param);
}

//twitter api
function twitter_api($url, $method=OAUTH_HTTP_METHOD_GET, $param=null) {
$consumerKey = 'consumerKey';
$consumerSecret = '
consumerSecret';
$oauthToken = '
oauthToken';
$oauthTokenSecret = '
oauthTokenSecret';

try {
$oauth = new OAuth($consumerKey, $consumerSecret,
OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI);
$oauth->setToken($oauthToken, $oauthTokenSecret);
$oauth->fetch($url, $param, $method);
$response = $oauth->getLastResponse();
return $response;
} catch (OAuthException $e) {
return $e;
}
}
?>

こんな感じかな?いいんじゃないかな?どっちのAPIも良くできているよ.

プロフィール

e-m@il @ddress