PHPでTwitterのユーザー情報を取得する

標準

今回は、PHPでTwitterのユーザー情報を取得してみたいと思います。このユーザーの情報は内部ID(Twitterのシステム内部で定められている、一意のIDの事。このIDは変更することが出来ない。)や、スクリーンネーム、名前を始めとして、アカウント作成した日時などありとあらゆる情報を取得できます。こちらは非常に簡単に作成出来るので、早速作っていきます。

使用するライブラリ

今回も例のごとく abraham/twitteroauth を使っていきます。使い方の詳細は前章を御覧ください。

コード

今回はプロフィール情報としても特に重要だと考える一部の情報を呼び出し、列挙する方法について書いていきます。最終的にコードは以下のようになりました。

<?php
$connection=new TwitterOAuth($api_key, $api_secret, $access_token, $access_token_secret);
$user_data=$connection->get("users/show",["screen_name"=>$user_screen_name]);

echo "name: " . $user_data->name;
echo "screen name: @" . $user_data->screen_name;
echo "location: " . $user_data->location;
echo "description: " . $user_data->description;
echo "url: " . $user_data->entities->url->urls[0]->expanded_url;
if($user_data->protected) {echo "protected";} else {echo "unprotected";}
echo "followers: " . number_format($user_data->followers_count);
echo "follows: " . number_format($user_data->friends_count);
echo "listed: " . number_format($user_data->listed_count);
echo "created at: " . $user_data->created_at;
echo number_format($user_data->favourites_count) . " favs";
echo number_format($user_data->statuses_count) . " tweets";
echo "banner-image: " . $user_data->profile_banner_url;
echo "profile-image" . $user_data->profile_image_url;
if($user_data->following) {echo "have followed";} else {echo "haven't followed";}
if($user_data->follow_request_sent) {echo "haven't sent";} else {echo "have sent";}
?>

今回のコードでは2行目にTwitterに接続して、3行目にユーザー情報を取得しています。この時、ユーザーの情報がstdClassで返ってくるので、それを分解して表示させます。

今回このユーザー情報を取得するためにはusers/showからgetしていますが、この時引数として指定できるのは

  • user_id (必須): Twitterから与えられている一意のID
  • screen_name(必須): 見慣れた@に続くID
  • include_entities(任意): エンティティ(返ってくるデータにエンティティノードが存在する。詳しくは後述。)を含めるか

を指定できます。また、この場合user_idとscreen_nameの両方が必須となっていますが、実際にはどちらか一方を指定するのみで大丈夫です。

返ってくるデータ

実際にgetしてみた時のデータをvar_dump()で見てみるとこんな感じです。

object(stdClass)#3 (46) {
	["id"]=> int(2414640626)
	["id_str"]=> string(10) "2414640626"
	["name"]=> string(5) "yoooo"
	["screen_name"]=> string(9) "yoshi_pc_"
	["location"]=> string(12) "鹿屋基地"
	["profile_location"]=> NULL
	["description"]=> string(53) "長門主義(ハルヒ)/SCP財団職員/提督業"
	["url"]=> string(23) "https://t.co/MP3ew8X4mK"
	["entities"]=> object(stdClass)#8 (2) {
		["url"]=> object(stdClass)#9 (1) {
			["urls"]=> array(1) {
				[0]=> object(stdClass)#10 (4) {
					["url"]=> string(23) "https://t.co/MP3ew8X4mK"
					["expanded_url"]=> string(18) "https://yoshipc.net"
					["display_url"]=> string(11) "yoshipc.net"
					["indices"]=> array(2) {
						[0]=> int(0)
						[1]=> int(23)
					}
				}
			}
		}
		["description"]=> object(stdClass)#11 (1) {
			["urls"]=> array(0) { }
		}
	}
	["protected"]=> bool(false)
	["followers_count"]=> int(663)
	["friends_count"]=> int(812)
	["listed_count"]=> int(14)
	["created_at"]=> string(30) "Thu Mar 27 16:51:41 +0000 2014"
	["favourites_count"]=> int(42076)
	["utc_offset"]=> int(32400)
	["time_zone"]=> string(5) "Tokyo"
	["geo_enabled"]=> bool(true)
	["verified"]=> bool(false)
	["statuses_count"]=> int(99429)
	["lang"]=> string(2) "ja"
	["status"]=> object(stdClass)#12 (22) {
		["created_at"]=> string(30) "Tue Oct 18 10:54:24 +0000 2016"
		["id"]=> int(788332394625441792)
		["id_str"]=> string(18) "788332394625441792"
		["text"]=> string(21) "千葉県魔うまい"
		["truncated"]=> bool(false)
		["entities"]=> object(stdClass)#13 (4) {
			["hashtags"]=> array(0) { }
			["symbols"]=> array(0) { }
			["user_mentions"]=> array(0) { }
			["urls"]=> array(0) { }
		}
		["source"]=> string(63) "TheWorld Rev"
		["in_reply_to_status_id"]=> NULL
		["in_reply_to_status_id_str"]=> NULL
		["in_reply_to_user_id"]=> NULL
		["in_reply_to_user_id_str"]=> NULL
		["in_reply_to_screen_name"]=> NULL
		["geo"]=> NULL
		["coordinates"]=> NULL
		["place"]=> NULL
		["contributors"]=> NULL
		["is_quote_status"]=> bool(false)
		["retweet_count"]=> int(0)
		["favorite_count"]=> int(1)
		["favorited"]=> bool(false)
		["retweeted"]=> bool(false)
		["lang"]=> string(2) "ja"
	}
	["contributors_enabled"]=> bool(false)
	["is_translator"]=> bool(false)
	["is_translation_enabled"]=> bool(false)
	["profile_background_color"]=> string(6) "C0DEED"
	["profile_background_image_url"]=> string(78) "http://pbs.twimg.com/profile_background_images/602136959914418176/TWaUNkvB.jpg"
	["profile_background_image_url_https"]=> string(79) "https://pbs.twimg.com/profile_background_images/602136959914418176/TWaUNkvB.jpg"
	["profile_background_tile"]=> bool(true)
	["profile_image_url"]=> string(74) "http://pbs.twimg.com/profile_images/762332527734378496/AzzARkY3_normal.jpg"
	["profile_image_url_https"]=> string(75) "https://pbs.twimg.com/profile_images/762332527734378496/AzzARkY3_normal.jpg"
	["profile_banner_url"]=> string(59) "https://pbs.twimg.com/profile_banners/2414640626/1468929549"
	["profile_link_color"]=> string(6) "3B94D9"
	["profile_sidebar_border_color"]=> string(6) "000000"
	["profile_sidebar_fill_color"]=> string(6) "DDEEF6"
	["profile_text_color"]=> string(6) "333333"
	["profile_use_background_image"]=> bool(true)
	["has_extended_profile"]=> bool(true)
	["default_profile"]=> bool(false)
	["default_profile_image"]=> bool(false)
	["following"]=> bool(false)
	["follow_request_sent"]=> bool(false)
	["notifications"]=> bool(false)
	["translator_type"]=> string(7) "regular"
	["suspended"]=> bool(false)
	["needs_phone_verification"]=> bool(false)
}

これを使うだけでも十分なユーザープロフィール画面が作れそうですね。前述したエンティティを含めるか、と言うのは上記のデータの中で「entities」以下のハイライトされている部分を含めるかどうかということです。主にURLについてのデータなので、不要だと感じたのであれば拒否ることで(若干ですが)早い挙動を得ることが出来るでしょう。
実際に作ってみたサンプルがこちらです。

最後になりますが、実践としてクライアントを同時並行で制作しているので、お試しいただければ幸いです。
https://yoshipc.net/twitter/

では、次回をお楽しみに。