最後です。取得したアクセストークンを使ってユーザーのデータを取得します。
今回はユーザーのホームのタイムラインを取得して表示します。しかし、実際には処理内容に関して、特に解説することはほとんどありません。今までと同じように署名を作ってサーバーと通信するだけです。気をつけることといえばデータの取得はPOSTでなくてGETで行うことくらいです。

以下ソースを参照してください。CSSで少々レイアウトを組んでそれっぽく見えるようにしてあります。Chromeでしか確認してませんけど。
XMLの処理はSimpleXMLを使っていますがDOMでやってもいいし、SAXでも好きなようにやっちゃってください。


<?php
$oauthConfig = array(
    ‘callbackUrl’ => ‘http://net.pressmantech.com/twitter/accesskey.php’,
    ‘authorizeUrl’ => ‘https://api.twitter.com/oauth/authorize’,
    ‘requestTokenUrl’ => ‘https://api.twitter.com/oauth/request_token’,
    ‘accessTokenUrl’ => ‘https://api.twitter.com/oauth/access_token’,
    ‘consumerKey’ => ‘pD4dm6IQHa6jhtge82Fg’,
    ‘consumerSecret’ => ‘BfTtokF9bfb5Fim6BsPaEg9Fo3y4FM6kPlCQQiRPKA4’
);
session_start();
$accessToken = unserialize($_SESSION[‘TWITTER_ACCESS_TOKEN’]);
/**
 * ユーザーのホームタイムラインを取得してみる。
 * データの形式はXMLで取得。
 */$url = ‘http://api.twitter.com/1/statuses/home_timeline.xml’;
/**
 * GETじゃないとデータは取得できない。
 */$method = ‘GET’;
$nonce =  md5(uniqid(rand(), true));
$timestamp = time();
$authorization = array(
    ‘oauth_nonce’ => $nonce,
    ‘oauth_signature_method’ => ‘HMAC-SHA1’,
    ‘oauth_timestamp’ => $timestamp,
    ‘oauth_consumer_key’ => $oauthConfig[‘consumerKey’],
    ‘oauth_token’ => $accessToken[‘oauth_token’],
    ‘oauth_version’ => ‘1.0’
    );
ksort($authorization);
$signatureBaseString = ”;
foreach($authorization as $key => $val){
    $signatureBaseString .= $key . ‘=’ . rawurlencode($val) . ‘&’;
}
$signatureBaseString = substr($signatureBaseString,0,-1);
$signatureBaseString = $method . ‘&’ . rawurlencode($url)
    . ‘&’ .  rawurlencode($signatureBaseString);
$signingKey = rawurlencode($oauthConfig[‘consumerSecret’])
    . ‘&’ . rawurlencode($accessToken[‘oauth_token_secret’]);
//print $signingKey;exit();
$authorization[‘oauth_signature’] =
    base64_encode(hash_hmac(‘sha1’,$signatureBaseString,$signingKey,true));
$oauthHeader = ‘OAuth ‘;
foreach($authorization as $key => $val){
    $oauthHeader .= $key . ‘="’ . rawurlencode($val) .’",’;
}
$oauthHeader = substr($oauthHeader,0,-1);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    ‘Authorization :’ . $oauthHeader,
    ‘Content-Length:’,
    ‘Expect:’,
    ‘Content-Type:’
));
$response = curl_exec($curl);
$curlInfo = curl_getinfo($curl);
/**
 * httpコードが200以外だったらとりあえずエラーってことで
 */if( $curlInfo[‘http_code’] != ‘200’){
    print ‘何かエラーがおきているようだ:’;
    print $response;
    exit();
}
/**
 * SimpleXMLを使ってXMLを処理。
 */$xml = new SimpleXMLElement($response);
$result = array();
foreach($xml->status as $status){
    $result[] = array(
        ‘name’ => (String) $status->user->name,
        ‘img’ => (String) $status->user->profile_image_url,
        ‘text’ => (String) $status->text
    );
}
/**
 * なんとなくツイッターっぽい画面にしてみる。Chromeでしか確認していない。
 */print <<<HEAD
<!DOCTYPE html><html lang="ja">
<head>
<meta charset="UTF-8">
<title>OAuthのテスト</title>
<style>
ul{padding:0;width:310px;}
img{padding:10px;}
li{list-style-type:none;border-bottom:2px solid #9999DD;}
li:after{clear:both;display:block;height:0;visibility: hidden;content: ".";}
div{float:left}
div.left{width:68px;}
div.right{width:240px;}
p.name{font-size:10px;}
p.text{font-size:12px;color:#666666}
</style>
</head>
HEAD;
print ‘<body><ul>’;
foreach($result as $v){
    $v[‘text’] = preg_replace(‘/(https?:\/\/([a-z\d\-]+\.)+[a-z]{2,7}[\w!#$%&\'()*+,\-.\/:;=?@~]*)/’,'<a href="$1">$1</a>’,$v[‘text’]);
    print ‘<li><div class="left"><img src="’ . $v[‘img’] . ‘"></div>’;
    print ‘<div class="right"><p class="name">’ . $v[‘name’] . ‘</p><p class="text">’ . $v[‘text’] . ‘</p></div></li>’;
}
print ‘</ul></body></html>’;

※作成から6年前(2281日経過)の記事です。内容が古い可能性があります。
東京都東日本橋の株式会社プレスマンPRESSMAN*Tech