最简单的PHP示例,用于使用Twitter API版本1.1检索user_timeline

由于截至2013年6月11日的Twitter API 1.0退役,下面的脚本不再适用。

// Create curl resource $ch = curl_init(); // Set url curl_setopt($ch, CURLOPT_URL, "http://twitter.com/statuses/user_timeline/myscreenname.json?count=10"); // Return the transfer as a string curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // $output contains the output string $output = curl_exec($ch); // Close curl resource to free up system resources curl_close($ch); if ($output) { $tweets = json_decode($output,true); foreach ($tweets as $tweet) { print_r($tweet); } } 

我怎样才能获得最less的代码可能的user_timeline(最近的状态)?

我发现这个: https : //dev.twitter.com/docs/api/1.1/get/statuses/user_timeline,但我得到以下错误:

 "{"errors":[{"message":"Could not authenticate you","code":32}]}" 

有很多类,但尝试了几个似乎没有任何工作,因为在Twitter这些更新,再加上其中一些是相当先进的类,有很多function,我真的不需要。

使用PHP获取最新用户状态的最简单/最简单的方法是什么?

所以你想使用Twitter的v1.1 API?

注意:这些文件在GitHub上

版本1.0 将很快被弃用 ,未经授权的请求将不被允许。 所以,这里有一篇文章帮助你做到这一点,还有一个PHP类,让你的生活更轻松。

1.创build一个开发者帐户:在Twitter上设置一个开发者帐户

您需要访问官方Twitter开发者网站并注册开发者帐户。 这是为v1.1 API提出请求的一个免费且必要的步骤。

2.创build一个应用程序:在Twitter开发者网站上创build一个应用程序

什么? 你以为你可以做出未经validation的请求? 不是Twitter的v1.1 API。 您需要访问http://dev.twitter.com/apps并单击“创build应用程序”button。;

在这里输入图像说明

在这个页面上,填写你想要的任何细节。 对我来说,这并不重要,因为我只是想要加载阻止垃圾邮件的请求。 关键是你要得到一套独特的密钥 ,用于你的应用程序。

所以,创build一个应用程序的重点是给自己(和Twitter)一组键。 这些是:

  • 消费者的钥匙
  • 消费者的秘密
  • 访问令牌
  • 访问令牌的秘密

这里有一些关于这些令牌的信息。

3.创build访问令牌 :您将需要这些来成功请求

OAuth请求一些令牌。 所以你需要让它们为你生成。

在这里输入图像说明

点击底部的“创build我的访问令牌”。 然后一旦你滚动到底部,你会有一些新生成的键。 你需要从这个页面抓取以前标记的四个键作为你的API调用,所以请记下它们的位置。

4.更改访问级别 :您不想只读,是吗?

如果您想要使用此API,则需要将您的设置更改为“读写”(Read&Write),如果您使用GET请求进行标准数据检索以外的任何操作。

在这里输入图像说明

select页面顶部附近的“设置”标签。

在这里输入图像说明

给你的应用程序读/写访问,并点击底部的“更新”。

您可以阅读更多关于 Twitter使用的应用程序权限模型 。


5.编写代码来访问API :我已经为你完成了大部分工作

我将上面的代码和一些修改和修改结合到了一个PHP类中,这样就可以很容易地完成你所需要的请求。

这使用OAuthTwitter v1.1 API ,以及我创build的类,您可以在下面find它。

 require_once('TwitterAPIExchange.php'); /** Set access tokens here - see: https://dev.twitter.com/apps/ **/ $settings = array( 'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN", 'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET", 'consumer_key' => "YOUR_CONSUMER_KEY", 'consumer_secret' => "YOUR_CONSUMER_SECRET" ); 

确保你把你从上面的应用程序中获得的密钥放在它们各自的空间中。

接下来,您需要select一个您想要发送请求的URL。 Twitter有他们的API文档来帮助您select哪个URL以及请求types(POST或GET)。

 /** URL for REST request, see: https://dev.twitter.com/docs/api/1.1/ **/ $url = 'https://api.twitter.com/1.1/blocks/create.json'; $requestMethod = 'POST'; 

在文档中,每个URL都指明了您可以传递给它的内容。 如果我们使用上面的“块”URL,我可以传递下面的POST参数:

 /** POST fields required by the URL above. See relevant docs as above **/ $postfields = array( 'screen_name' => 'usernameToBlock', 'skip_status' => '1' ); 

现在你已经设置了你想要做的API,是时候做出实际的请求。

 /** Perform the request and echo the response **/ $twitter = new TwitterAPIExchange($settings); echo $twitter->buildOauth($url, $requestMethod) ->setPostfields($postfields) ->performRequest(); 

而对于POST请求,就是这样!

对于GET请求,它有点不同。 这是一个例子:

 /** Note: Set the GET field BEFORE calling buildOauth(); **/ $url = 'https://api.twitter.com/1.1/followers/ids.json'; $getfield = '?username=J7mbo'; $requestMethod = 'GET'; $twitter = new TwitterAPIExchange($settings); echo $twitter->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest(); 

最后的代码示例 :对于我的追随者列表的简单GET请求。

 $url = 'https://api.twitter.com/1.1/followers/list.json'; $getfield = '?username=J7mbo&skip_status=1'; $requestMethod = 'GET'; $twitter = new TwitterAPIExchange($settings); echo $twitter->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest(); 

我已经把这些文件放在GitHub上了@ lackovic10和@rivers! 我希望有人认为它有用。 我知道我做了(我用它在循环中批量阻塞)。

另外,对于那些有SSL证书有问题的Windows用户,请看这篇文章 。 这个库使用cURL,所以你需要确保你有cURL证书可能设置。 Google也是你的朋友。

去dev.twitter.com并创build一个应用程序 。 这将为您提供所需的凭据。 这是我最近用PHP和cURL写的一个实现。

 <?php function buildBaseString($baseURI, $method, $params) { $r = array(); ksort($params); foreach($params as $key=>$value){ $r[] = "$key=" . rawurlencode($value); } return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r)); } function buildAuthorizationHeader($oauth) { $r = 'Authorization: OAuth '; $values = array(); foreach($oauth as $key=>$value) $values[] = "$key=\"" . rawurlencode($value) . "\""; $r .= implode(', ', $values); return $r; } $url = "https://api.twitter.com/1.1/statuses/user_timeline.json"; $oauth_access_token = "YOURVALUE"; $oauth_access_token_secret = "YOURVALUE"; $consumer_key = "YOURVALUE"; $consumer_secret = "YOURVALUE"; $oauth = array( 'oauth_consumer_key' => $consumer_key, 'oauth_nonce' => time(), 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_token' => $oauth_access_token, 'oauth_timestamp' => time(), 'oauth_version' => '1.0'); $base_info = buildBaseString($url, 'GET', $oauth); $composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret); $oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true)); $oauth['oauth_signature'] = $oauth_signature; // Make requests $header = array(buildAuthorizationHeader($oauth), 'Expect:'); $options = array( CURLOPT_HTTPHEADER => $header, //CURLOPT_POSTFIELDS => $postfields, CURLOPT_HEADER => false, CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false); $feed = curl_init(); curl_setopt_array($feed, $options); $json = curl_exec($feed); curl_close($feed); $twitter_data = json_decode($json); //print it out print_r ($twitter_data); ?> 

这可以从命令行运行:

 $ php <name of PHP script>.php 

河stream粘贴的代码非常棒。 非常感谢! 我是新来的,不能评论,我只想回答javiervd的问题(你如何设置screen_name并用这种方法计算?),因为我已经花了很多时间来计算它出。

您需要将参数添加到URL和签名创build过程。 创build一个签名是帮助我的文章。 这是我的代码:

 $oauth = array( 'screen_name' => 'DwightHoward', 'count' => 2, 'oauth_consumer_key' => $consumer_key, 'oauth_nonce' => time(), 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_token' => $oauth_access_token, 'oauth_timestamp' => time(), 'oauth_version' => '1.0' ); $options = array( CURLOPT_HTTPHEADER => $header, //CURLOPT_POSTFIELDS => $postfields, CURLOPT_HEADER => false, CURLOPT_URL => $url . '?screen_name=DwightHoward&count=2', CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false ); 

就像其他答案中所述,创build一个Twitter应用程序来获取令牌,密钥和秘密。 使用下面的代码,你可以从一个地方修改请求参数,避免input错误和类似的错误(改变returnTweet()函数中的$request数组)。

 function buildBaseString($baseURI, $method, $params) { $r = array(); ksort($params); foreach($params as $key=>$value){ $r[] = "$key=" . rawurlencode($value); } return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r)); } function buildAuthorizationHeader($oauth) { $r = 'Authorization: OAuth '; $values = array(); foreach($oauth as $key=>$value) $values[] = "$key=\"" . rawurlencode($value) . "\""; $r .= implode(', ', $values); return $r; } function returnTweet(){ $oauth_access_token = "x"; $oauth_access_token_secret = "x"; $consumer_key = "x"; $consumer_secret = "x"; $twitter_timeline = "user_timeline"; // mentions_timeline / user_timeline / home_timeline / retweets_of_me // create request $request = array( 'screen_name' => 'budidino', 'count' => '3' ); $oauth = array( 'oauth_consumer_key' => $consumer_key, 'oauth_nonce' => time(), 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_token' => $oauth_access_token, 'oauth_timestamp' => time(), 'oauth_version' => '1.0' ); // merge request and oauth to one array $oauth = array_merge($oauth, $request); // do some magic $base_info = buildBaseString("https://api.twitter.com/1.1/statuses/$twitter_timeline.json", 'GET', $oauth); $composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret); $oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true)); $oauth['oauth_signature'] = $oauth_signature; // make request $header = array(buildAuthorizationHeader($oauth), 'Expect:'); $options = array( CURLOPT_HTTPHEADER => $header, CURLOPT_HEADER => false, CURLOPT_URL => "https://api.twitter.com/1.1/statuses/$twitter_timeline.json?". http_build_query($request), CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false); $feed = curl_init(); curl_setopt_array($feed, $options); $json = curl_exec($feed); curl_close($feed); return json_decode($json, true); } 

然后调用returnTweet()

谢谢Kris!

它为我工作,而不使用参数的查询,每当我使用多个参数,它显示我的错误:32无法validation你。

对我来说,问题在于和号编码。 所以在你的代码中它是下面一行

 $url .= "?".http_build_query($query); 

我在下面添加了如下一行:

 $url=str_replace("&amp;","&",$url); 

它使用了两个或更多的参数,如screen_name和count。

整个代码如下所示:

 $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); $url=str_replace("&amp;","&",$url); //Patch by @Frewuill $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); 

希望它可以帮助有同样问题的人。

这个问题帮了我很多,但是并没有让我理解需要发生的事情。 这个博客做了一个很好的工作,让我通过它。

以下是重要的一点:

  • 如上所述,您必须签署您的1.1 API请求。 如果你正在做一些类似获取公共状态的事情,你将需要一个应用程序密钥而不是用户密钥。 完整的链接到你想要的页面是: https : //dev.twitter.com/apps
  • 你必须把所有的参数,包括oauth和get参数(或者POST参数)都放在一起。
  • 您必须在将参数减less到经过哈希的url编码forms之前将其sorting。
  • 你必须多次编码一些东西 – 例如,你从参数的url编码值创build一个查询string,然后你编码THAT,并与方法types和URL连接。

我同情所有的头痛,所以这里有一些代码来包装它:

 $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); 

如果您安装了OAuth PHP库,则不必担心自己形成请求。

 $oauth = new OAuth($consumer_key, $consumer_secret, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI); $oauth->setToken($access_token, $access_secret); $oauth->fetch("https://api.twitter.com/1.1/statuses/user_timeline.json"); $twitter_data = json_decode($oauth->getLastResponse()); print_r($twitter_data); 

有关更多信息,请查看文档或其示例 。 您可以使用pecl install oauth来获取库。

首先我要感谢jimbo和( 他的post / twitter-api-php简单的库)。

如果您要使用“twitter-api-php”PHP库(TwitterAPIExchange.php)的GETsearch/ tweets API :

首先,您只需评论“执行POST请求并回显响应”代码区域。

只需使用“执行GET请求并回显响应”代码并回显响应并更改以下两行:

 $url = 'https://api.twitter.com/1.1/followers/ids.json'; $getfield = '?screen_name=J7mbo'; 

 $url = 'https://api.twitter.com/1.1/search/tweets.json'; $getfield = '?q=J7mbo'; 

(将screen_name更改为q ,就是这样:)

你需要一个在Twitter上创build一个“应用程序” (你需要一个Twitter帐户来做到这一点)。

然后,您需要使用OAuth向Twitter发送授权请求 。

您可以使用GET状态/ user_timeline资源来获取最近的推文列表。

以下是从您的时间表中获取指定数量的推文的简要说明。 它基本上和其他例子一样,只有less量的代码。

只需填写按键,然后根据自己的喜好调整$count

 $url = 'https://api.twitter.com/1.1/statuses/user_timeline.json'; $count = '10'; $oauth = array('count' => $count, 'oauth_consumer_key' => '[CONSUMER KEY]', 'oauth_nonce' => md5(mt_rand()), 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_timestamp' => time(), 'oauth_token' => '[ACCESS TOKEN]', 'oauth_version' => '1.0'); $oauth['oauth_signature'] = base64_encode(hash_hmac('sha1', 'GET&' . rawurlencode($url) . '&' . rawurlencode(implode('&', array_map(function ($v, $k) { return $k . '=' . $v; }, $oauth, array_keys($oauth)))), '[CONSUMER SECRET]&[ACCESS TOKEN SECRET]', true)); $twitterData = json_decode(file_get_contents($url . '?count=' . $count, false, stream_context_create(array('http' => array('method' => 'GET', 'header' => 'Authorization: OAuth ' . implode(', ', array_map(function ($v, $k) { return $k . '="' . rawurlencode($v) . '"'; }, $oauth, array_keys($oauth)))))))); 

这个使用匿名函数和file_get_contents而不是cURL库。 请注意使用MD5散列随机数。 每个人似乎都与time() ,但是,networking上关于OAuth的大多数例子都使用某种encryption的string(比如: http : //www.sitepoint.com/understanding-oauth-1/ ) 。 这对我来说也更有意义。

进一步的说明:你需要PHP 5.3以上的匿名function(如果你的服务器/电脑处于一些冷战洞穴,而你无法升级)。

从它们的签名生成器中 ,可以生成以下forms的curl命令:

 curl --get 'https://api.twitter.com/1.1/statuses/user_timeline.json' --data 'count=2&screen_name=twitterapi' --header 'Authorization: OAuth oauth_consumer_key="YOUR_KEY", oauth_nonce="YOUR_NONCE", oauth_signature="YOUR-SIG", oauth_signature_method="HMAC-SHA1", oauth_timestamp="TIMESTAMP", oauth_token="YOUR-TOKEN", oauth_version="1.0"' --verbose 
 $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET); $timelines = $connection->get('statuses/user_timeline', array('screen_name' => 'NSE_NIFTY', 'count' => 100, 'include_rts' => 1)); 

感谢这个线程,特别是budidino,因为他的代码是驱动它回家的我。 只是想贡献一下如何从请求中检索JSON数据。 更改“//创build请求”请求数组部分的代码以执行不同的请求。 最终,这将输出JSON到浏览器屏幕上

 <?php function buildBaseString($baseURI, $method, $params) { $r = array(); ksort($params); foreach($params as $key=>$value){ $r[] = "$key=" . rawurlencode($value); } return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r)); } function buildAuthorizationHeader($oauth) { $r = 'Authorization: OAuth '; $values = array(); foreach($oauth as $key=>$value) $values[] = "$key=\"" . rawurlencode($value) . "\""; $r .= implode(', ', $values); return $r; } function returnTweet(){ $oauth_access_token = "2602299919-lP6mgkqAMVwvHM1L0Cplw8idxJzvuZoQRzyMkOx"; $oauth_access_token_secret = "wGWny2kz67hGdnLe3Uuy63YZs4nIGs8wQtCU7KnOT5brS"; $consumer_key = "zAzJRrPOj5BvOsK5QhscKogVQ"; $consumer_secret = "Uag0ujVJomqPbfdoR2UAWbRYhjzgoU9jeo7qfZHCxR6a6ozcu1"; $twitter_timeline = "user_timeline"; // mentions_timeline / user_timeline / home_timeline / retweets_of_me // create request $request = array( 'screen_name' => 'burownrice', 'count' => '3' ); $oauth = array( 'oauth_consumer_key' => $consumer_key, 'oauth_nonce' => time(), 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_token' => $oauth_access_token, 'oauth_timestamp' => time(), 'oauth_version' => '1.0' ); // merge request and oauth to one array $oauth = array_merge($oauth, $request); // do some magic $base_info = buildBaseString("https://api.twitter.com/1.1/statuses/$twitter_timeline.json", 'GET', $oauth); $composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret); $oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true)); $oauth['oauth_signature'] = $oauth_signature; // make request $header = array(buildAuthorizationHeader($oauth), 'Expect:'); $options = array( CURLOPT_HTTPHEADER => $header, CURLOPT_HEADER => false, CURLOPT_URL => "https://api.twitter.com/1.1/statuses/$twitter_timeline.json?". http_build_query($request), CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false); $feed = curl_init(); curl_setopt_array($feed, $options); $json = curl_exec($feed); curl_close($feed); return $json; } $tweet = returnTweet(); echo $tweet; ?> 

If it is useful for anyone… In my blog I've implement the following PHP code in order to retrieve the last tweets, extract their most relevant data and then saved them into a MySQL database. It works because I got it in my blog.

The "tweets" table where store them:

 CREATE TABLE IF NOT EXISTS `tweets` ( `tweet_id` int(11) NOT NULL auto_increment, `id_tweet` bigint(20) NOT NULL, `text_tweet` char(144) NOT NULL, `datetime_tweet` datetime NOT NULL, `dayofweek_tweet` char(3) NOT NULL, `GMT_tweet` char(5) NOT NULL, `shorturl_tweet` char(23) NOT NULL, PRIMARY KEY (`tweet_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=83 ; 

get_tweets.php:

 <?php function buildBaseString($baseURI, $method, $params) { $r= array(); ksort($params); foreach($params as $key=>$value){ $r[]= "$key=".rawurlencode($value); } return $method."&".rawurlencode($baseURI).'&'.rawurlencode(implode('&', $r)); } function buildAuthorizationHeader($oauth) { $r= 'Authorization: OAuth '; $values= array(); foreach($oauth as $key=>$value) { $values[]= "$key=\"".rawurlencode($value)."\""; } $r.= implode(', ', $values); return $r; } function returnTweets($last_id) { $oauth_access_token = "2687912757-vbyfJA483SEyj2HJ2K346aVMxtOIgVbsY4Edrsw"; $oauth_access_token_secret = "nIruzmR0bXqC3has4fTf8KAq4pgOceiuKqjklhroENU4W"; $api_key = "ieDSTFH8QHHPafg7H0whQB9GaY"; $api_secret = "mgm8wVS9YP93IJmTQtsmR8ZJADDNdlTca5kCizMkC7O7gFDS1j"; $twitter_timeline = "user_timeline"; //[mentions_timeline/user_timeline/home_timeline/retweets_of_me] //create request $request= array( 'screen_name' => 'runs_ES', 'count' => '3', 'exclude_replies' => 'true' ); if (!is_null($last_id)) { //Add to the request if it exits a last_id $request['since_id']= $max_id; } $oauth = array( 'oauth_consumer_key' => $api_key, 'oauth_nonce' => time(), 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_token' => $oauth_access_token, 'oauth_timestamp' => time(), 'oauth_version' => '1.0' ); //merge request and oauth to one array $oauth= array_merge($oauth, $request); //do some magic $base_info= buildBaseString("https://api.twitter.com/1.1/statuses/$twitter_timeline.json", 'GET', $oauth); $composite_key= rawurlencode($api_secret).'&'.rawurlencode($oauth_access_token_secret); $oauth_signature= base64_encode(hash_hmac('sha1', $base_info, $composite_key, true)); $oauth['oauth_signature']= $oauth_signature; //make request $header= array(buildAuthorizationHeader($oauth), 'Expect:'); $options= array(CURLOPT_HTTPHEADER => $header, CURLOPT_HEADER => false, CURLOPT_URL => "https://api.twitter.com/1.1/statuses/$twitter_timeline.json?". http_build_query($request), CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false); $feed= curl_init(); curl_setopt_array($feed, $options); $json= curl_exec($feed); curl_close($feed); return $json; } function parse_tweettext($tweet_text) { $text= substr($tweet_text, 0, -23); $short_url= substr($tweet_text, -23, 23); return array ('text'=>$text, 'short_url'=> $short_url); } function parse_tweetdatetime($tweetdatetime) { //Thu Aug 21 21:57:26 +0000 2014 Sun Mon Tue Wed Thu Fri Sat $months= array('Jan'=>'01', 'Feb'=>'02', 'Mar'=>'03', 'Apr'=>'04', 'May'=>'05', 'Jun'=>'06', 'Jul'=>'07', 'Aug'=>'08', 'Sep'=>'09', 'Oct'=>'10', 'Nov'=>'11', 'Dec'=>'12'); $GMT= substr($tweetdatetime, -10, 5); $year= substr($tweetdatetime, -4, 4); $month_str= substr($tweetdatetime, 4, 3); $month= $months[$month_str]; $day= substr($tweetdatetime, 8, 2); $dayofweek= substr($tweetdatetime, 0, 3); $time= substr($tweetdatetime, 11, 8); $date= $year.'-'.$month.'-'.$day; $datetime= $date.' '.$time; return array('datetime'=>$datetime, 'dayofweek'=>$dayofweek, 'GMT'=>$GMT); //datetime: "YYYY-MM-DD HH:MM:SS", dayofweek: Mon, Tue..., GMT: +#### } //First check in the database the last id tweet: $query= "SELECT MAX(tweets.id_tweet) AS id_last FROM tweets;"; $result= exec_query($query); $row= mysql_fetch_object($result); if ($result!= 0 && mysql_num_rows($result)) { //if error in query or not results $last_id= $row->id_last; } else { $last_id= null; } $json= returnTweets($last_id); $tweets= json_decode($json, TRUE); foreach ($tweets as $tweet) { $tweet_id= $tweet['id']; if (!empty($tweet_id)) { //if array is not empty $tweet_parsetext= parse_tweettext($tweet['text']); $tweet_text= utf8_encode($tweet_parsetext['text']); $tweet_shorturl= $tweet_parsetext['short_url']; $tweet_parsedt= parse_tweetdatetime($tweet['created_at']); $tweet_datetime= $tweet_parsedt['datetime']; $tweet_dayofweek= $tweet_parsedt['dayofweek']; $tweet_GMT= $tweet_parsedt['GMT']; //Insert the tweet into the database: $fields = array( 'id_tweet' => $tweet_id, 'text_tweet' => $tweet_text, 'datetime_tweet' => $tweet_datetime, 'dayofweek_tweet' => $tweet_dayofweek, 'GMT_tweet' => $tweet_GMT, 'shorturl_tweet' => $tweet_shorturl ); $new_id= mysql_insert('tweets', $fields); } } //end of foreach ?> 

The function to save the tweets:

 function mysql_insert($table, $inserts) { $keys = array_keys($inserts); exec_query("START TRANSACTION;"); $query= 'INSERT INTO `'.$table.'` (`'.implode('`,`', $keys).'`) VALUES (\''.implode('\',\'', $inserts).'\')'; exec_query($query); $id= mysql_insert_id(); if (mysql_error()) { exec_query("ROLLBACK;"); die("Error: $query"); } else { exec_query("COMMIT;"); } return $id; }