Created
February 7, 2017 17:13
-
-
Save Ben-Atherton/2d86c81c8f390259fd656794cde4e70e to your computer and use it in GitHub Desktop.
How to retrieve a Twitter user timeline using the Twitter API version 1.1 in PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$token = 'YOUR TOKEN'; | |
$token_secret = 'TOKEN SECRET'; | |
$consumer_key = 'YOUR KEY'; | |
$consumer_secret = 'KEY SECRET'; | |
$host = 'api.twitter.com'; | |
$method = 'GET'; | |
$path = '/1.1/statuses/user_timeline.json'; // api call path | |
$query = array( // query parameters | |
'screen_name' => 'twitterapi', | |
'count' => '2' | |
); | |
$oauth = array( | |
'oauth_consumer_key' => $consumer_key, | |
'oauth_token' => $token, | |
'oauth_nonce' => (string)mt_rand(), // a stronger nonce is recommended | |
'oauth_timestamp' => time(), | |
'oauth_signature_method' => 'HMAC-SHA1', | |
'oauth_version' => '1.0' | |
); | |
$oauth = array_map("rawurlencode", $oauth); // must be encoded before sorting | |
$query = array_map("rawurlencode", $query); | |
$arr = array_merge($oauth, $query); // combine the values THEN sort | |
asort($arr); // secondary sort (value) | |
ksort($arr); // primary sort (key) | |
// http_build_query automatically encodes, but our parameters | |
// are already encoded, and must be by this point, so we undo | |
// the encoding step | |
$querystring = urldecode(http_build_query($arr, '', '&')); | |
$url = "https://$host$path"; | |
// mash everything together for the text to hash | |
$base_string = $method."&".rawurlencode($url)."&".rawurlencode($querystring); | |
// same with the key | |
$key = rawurlencode($consumer_secret)."&".rawurlencode($token_secret); | |
// generate the hash | |
$signature = rawurlencode(base64_encode(hash_hmac('sha1', $base_string, $key, true))); | |
// this time we're using a normal GET query, and we're only encoding the query params | |
// (without the oauth params) | |
$url .= "?".http_build_query($query); | |
$oauth['oauth_signature'] = $signature; // don't want to abandon all that work! | |
ksort($oauth); // probably not necessary, but twitter's demo does it | |
// also not necessary, but twitter's demo does this too | |
function add_quotes($str) { return '"'.$str.'"'; } | |
$oauth = array_map("add_quotes", $oauth); | |
// this is the full value of the Authorization line | |
$auth = "OAuth " . urldecode(http_build_query($oauth, '', ', ')); | |
// if you're doing post, you need to skip the GET building above | |
// and instead supply query parameters to CURLOPT_POSTFIELDS | |
$options = array( CURLOPT_HTTPHEADER => array("Authorization: $auth"), | |
//CURLOPT_POSTFIELDS => $postfields, | |
CURLOPT_HEADER => false, | |
CURLOPT_URL => $url, | |
CURLOPT_RETURNTRANSFER => true, | |
CURLOPT_SSL_VERIFYPEER => false); | |
// do our business | |
$feed = curl_init(); | |
curl_setopt_array($feed, $options); | |
$json = curl_exec($feed); | |
curl_close($feed); | |
$twitter_data = json_decode($json); | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment