Twitter APIを使ってツイートを表示させる

TwitterのAPIが新しくなったのでツイートの表示方法をメモ

Twitterへのアプリの登録

まずhttps://dev.twitter.com/appsにアクセスし、「Creatre a new application」ボタンをクリックしてアプリを作成

遷移した画面で次の情報を登録

「DevelopersRulesOf TheRoad」の「Yes,I agree」にチェックを入れたら、下の「CAPTCHA」で認証用の数字等を入力して「Create Your New Twitter Application」ボタンをクリック。

画面が遷移したら、画面の最下にある「Create my access token」ボタンをクリック。
そうすると英数字の羅列された文字列がいくつか表示されるので、以下の情報をテキストエディタなどにコピー&ペースト。

OAuth settings
Your access token

OAuth認証を行うライブラリをダウンロード

次に、https://github.com/abraham/twitteroauthへアクセスし、「twitteroauth」ライブラリをダウンロード。解凍したフォルダ内にある「twitteroauth」を任意の場所に移動する。

twitter.phpの作成

以下のコードをtwitter.phpとして、移動した「twitteroauth」の中に保存。

PHP

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

$consumerKey = "XXX"; //←Consumer keyの文字列を入力
$consumerSecret = "XXX"; //←Consumer secretの文字列を入力
$accessToken = "XXX"; //←Access tokenの文字列を入力
$accessTokenSecret = "XXX"; //←Access token secretの文字列を入力
$count = "6"; //←取得するお気に入りの数を入力
$screenname = "YYY"; //←Twitterアカウントを入力
$id = "ZZZ"; //←TwitterアカウントのIDを入力(上記アカウントのIDで数値の情報)

$twObj = new TwitterOAuth($consumerKey,$consumerSecret,$accessToken,$accessTokenSecret);
$req = $twObj->OAuthRequest('https://api.twitter.com/1.1/statuses/home_timeline.json',
'GET',array('screen_name'=>$screenname, 'user_id'=>$id, 'count'=>$count));
echo $_GET['callback'] . '(' . $req. ')';
?>
  • APIのURLを変えることで、お気に入りの取得やツイートの取得等へ変更可能。
  • APIに付加するパラメータはtwitteroauthを使用する場合はURLに付加するのではなく、「array(パラメータ1=>値,パラメータ2=>値……)」の形で渡す

USERIDの確認方法

User IDの数値は「https://twitter.com/users/show?screen_name=自分のアカウント名(@の後)」にアクセスすると確認可能。

APIのURLを確認

http://dev.twitter.com/console/からAPIのURLを確認。

  • ログインした状態で、Authenticationで「OAuth1」の認証とアプリ連携を必ず行う。
  • 選んだAPIのQueryタブ内の赤い「*」が付いているのは必須パラメータ

script.jsの作成とHTML、CSSの作成

script.jsとHTMLは以下の通り、CSSはお好みで設定。

Javascript

$(function(){
	
	var $twtr = $('#twitter');
	
	// Ajaxステータスの表示
	$twtr.empty()
		.append('<p class="msg">ツイートの取得中…</p>');
	
	$.getJSON( 'http://設置URLを記載/twitteroauth/twitter.php?callback=?' )
		
		// 読み込み完了時
		.success(function( json ) {
			
			var tweetStr = ''; // ツイートHTML格納用
			var time, icon, name, text;
			
			// divを空に
			$twtr.empty();
			
			// JSONデータの処理
			$.each( json, function(i, tweet) {
				
				// JSONからデータを抽出
				name = tweet.user.screen_name;       // ユーザー名
				time = tweet.created_at;             // 日付
				icon = tweet.user.profile_image_url; // プロフィールアイコンURL
				text = tweet.text;                   // ツイート本文
				
				// 日付のフォーマット
				time = formatDate(time);
				
				// プロフィールアイコン(最少サイズを使用)
				icon = icon.replace(/_normal/, '_mini');
				
				// ツイート内のリンク/ユーザー名/ハッシュタグ
				text = text.replace(/(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/gi, '<a href="$1" class="link">$1</a>');
				text = text.replace(/#(\w+)/gi,'<a href="http://twitter.com/#!/search?q=%23$1" class="hashtag">#$1</a>' );
				text = text.replace(/@(\w+)/gi,'<a href="http://twitter.com/#!/$1" class="user">@$1</a>' );
				
				// HTMLの整形
				tweetStr += '<li>';
				tweetStr += '<span class="time">' + time + '</span>';
				tweetStr += '<span class="icon"><a href="http://twitter.com/#!/' + name + '">'
				   + '<img src="' + icon + '" alt="' + name + '" width="24" height="24" /></a></span>';
				tweetStr += '<span class="name">' + name + '</span>';
				tweetStr += '<span class="text">' + text + '</span>';
				tweetStr += '</li>';
				
			});
			
			// HTMLを追加
			$('<ul></ul>').html(tweetStr).appendTo($twtr);
		})
		
		// 読み込みエラー時
		.error(function( json ) {
			$twtr.empty()
				.append('<p class="error">エラー:ツイートを取得できませんでした。</p>');
		});
	
	// 日付フォーマット用関数
	function formatDate( date ) {
		
		var dArr, dStr, d;
		
		// IEでパースできないフォーマットのため、
		// 文字列の順序を入れ替える
		dArr = date.split(" ");
		dStr = [dArr[0], dArr[1], dArr[2], dArr[5], dArr[3], dArr[4]].join(' ');
		d = new Date(dStr);
		
		return d.getFullYear() + '/' + (d.getMonth()+1) + '/' + d.getDate();
		
	}
			
});

HTML

<div id="twitter">JavaScriptを有効に設定してください。</div>
<!--jsがOFFになっていた場合用にテキスト記入-->

CSS

/* 関連ツイート */
#twitter ul li {
	position: relative;
	padding-bottom:1em;
	margin-bottom: 1em;
	font-size: 11px;
	border-bottom:dotted 1px #ccc;
	/zoom: 1;
}
#twitter ul li span {
	display: block;
}
#twitter ul li span.time {
	float: right;
	font-weight: bold;
	font-size: 9px;
	line-height: 28px;
	color: #c0c0c0;
}
#twitter ul li span.name {
	margin-left: 34px;
	font-weight: bold;
	line-height: 28px;
}
#twitter ul li span.icon {
	position: absolute;
	top: 0;
	left: 0;
	padding: 1px;
	border: 1px solid #c0c0c0;
}
#twitter ul li span.text {
	margin-top: 5px;
	overflow: hidden;
	/zoom: 1;
}
/* AJAXステータス表示用パーツ */
#twitter .msg {
	color: #c0c0c0;
}
#twitter .error {
	color: #c00;
}