-
Notifications
You must be signed in to change notification settings - Fork 43
/
tweets.php
executable file
·205 lines (170 loc) · 8.18 KB
/
tweets.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
<?php
/**
* Twitter feed which uses twitteroauth for authentication
*
* @version 1.0
* @author Andrew Biggart
* @link https://github.com/andrewbiggart/latest-tweets-php-o-auth/
*
* Notes:
* Caching is employed because Twitter only allows their RSS and json feeds to be accesssed 150
* times an hour per user client.
* --
* Dates can be displayed in Twitter style (e.g. "1 hour ago") by setting the
* $twitter_style_dates param to true.
*
* You will also need to register your application with Twitter, to get your keys and tokens.
* You can do this here: (https://dev.twitter.com/).
*
* Don't forget to add your username to the bottom of the script.
*
* Credits:
***************************************************************************************
* Initial script before API v1.0 was retired
* http://f6design.com/journal/2010/10/07/display-recent-twitter-tweets-using-php/
*
* Which includes the following credits
* Hashtag/username parsing based on: http://snipplr.com/view/16221/get-twitter-tweets/
* Feed caching: http://www.addedbytes.com/articles/caching-output-in-php/
* Feed parsing: http://boagworld.com/forum/comments.php?DiscussionID=4639
***************************************************************************************
*
***************************************************************************************
* Authenticating a User Timeline for Twitter OAuth API V1.1
* http://www.webdevdoor.com/php/authenticating-twitter-feed-timeline-oauth/
***************************************************************************************
*
***************************************************************************************
* Twitteroauth which has been used for the authentication process
* https://github.com/abraham/twitteroauth
***************************************************************************************
*
*
**/
// Set timezone. (Modify to match your timezone) If you need help with this, you can find it here. (http://php.net/manual/en/timezones.php)
date_default_timezone_set('Europe/London');
// Require TwitterOAuth files. (Downloadable from : https://github.com/abraham/twitteroauth)
require_once("twitteroauth/twitteroauth/twitteroauth.php");
// Function to authenticate app with Twitter.
function getConnectionWithAccessToken($cons_key, $cons_secret, $oauth_token, $oauth_token_secret) {
$connection = new TwitterOAuth($cons_key, $cons_secret, $oauth_token, $oauth_token_secret);
return $connection;
}
// Function to display the latest tweets.
function display_latest_tweets(
// Function parameters.
$twitter_user_id,
$cache_file = './tweets-'.$twitter_user_id.'.txt', // Change this to the path of your cache file. (Default : ./tweets.txt)
$tweets_to_display = 5, // Number of tweets you would like to display. (Default : 5)
$ignore_replies = false, // Ignore replies from the timeline. (Default : false)
$include_rts = false, // Include retweets. (Default : false)
$twitter_wrap_open = '<ul class="home-tweets-ul">',
$twitter_wrap_close = '</ul>',
$tweet_wrap_open = '<li><p class="home-tweet-tweet">',
$meta_wrap_open = '<br/><span class="home-tweet-date">',
$meta_wrap_close = '</span>',
$tweet_wrap_close = '</p></li>',
$date_format = 'g:i A M jS', // Date formatting. (http://php.net/manual/en/function.date.php)
$twitter_style_dates = true){ // Twitter style days. [about an hour ago] (Default : true)
// Twitter keys (You'll need to visit https://dev.twitter.com and register to get these.
$consumerkey = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";
$consumersecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";
$accesstoken = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";
$accesstokensecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";
// Seconds to cache feed (Default : 3 minutes).
$cachetime = 60*3;
// Time that the cache was last updtaed.
$cache_file_created = ((file_exists($cache_file))) ? filemtime($cache_file) : 0;
// A flag so we know if the feed was successfully parsed.
$tweet_found = false;
// Show cached version of tweets, if it's less than $cachetime.
if (time() - $cachetime < $cache_file_created) {
$tweet_found = true;
// Display tweets from the cache.
readfile($cache_file);
} else {
// Cache file not found, or old. Authenticae app.
$connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);
if($connection){
// Get the latest tweets from Twitter
$get_tweets = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=".$twitter_user_id."&count=".$tweets_to_display."&include_rts=".$include_rts."&exclude_replies=".$ignore_replies);
// Error check: Make sure there is at least one item.
if (count($get_tweets)) {
// Define tweet_count as zero
$tweet_count = 0;
// Start output buffering.
ob_start();
// Open the twitter wrapping element.
$twitter_html = $twitter_wrap_open;
// Iterate over tweets.
foreach($get_tweets as $tweet) {
$tweet_found = true;
$tweet_count++;
$tweet_desc = $tweet->text;
// Add hyperlink html tags to any urls, twitter ids or hashtags in the tweet.
$tweet_desc = preg_replace("/((http)+(s)?:\/\/[^<>\s]+)/i", "<a href=\"\\0\" target=\"_blank\">\\0</a>", $tweet_desc );
$tweet_desc = preg_replace("/[@]+([A-Za-z0-9-_]+)/", "<a href=\"http://twitter.com/\\1\" target=\"_blank\">\\0</a>", $tweet_desc );
$tweet_desc = preg_replace("/[#]+([A-Za-z0-9-_]+)/", "<a href=\"http://twitter.com/search?q=%23\\1\" target=\"_blank\">\\0</a>", $tweet_desc );
// replace t.co links with expanded link, if present
$entities = $tweet->entities;
if(!empty($entities->urls[0]->expanded_url)) {
$tweet_desc = str_replace($entities->urls[0]->url, $entities->urls[0]->expanded_url, $tweet_desc);
}
$media_url = $entities->media[0]->media_url;
if($media_url) {
$img = "<img src='".$media_url."'>";
$twitter_html .= $img;
}
// Convert Tweet display time to a UNIX timestamp. Twitter timestamps are in UTC/GMT time.
$tweet_time = strtotime($tweet->created_at);
// Get Tweet ID
$tweet_id = $tweet->id_str;
if ($twitter_style_dates){
// Current UNIX timestamp.
$current_time = time();
$time_diff = abs($current_time - $tweet_time);
switch ($time_diff)
{
case ($time_diff < 60):
$display_time = $time_diff.' seconds ago';
break;
case ($time_diff >= 60 && $time_diff < 3600):
$min = floor($time_diff/60);
$display_time = $min.' minutes ago';
break;
case ($time_diff >= 3600 && $time_diff < 86400):
$hour = floor($time_diff/3600);
$display_time = 'about '.$hour.' hour';
if ($hour > 1){ $display_time .= 's'; }
$display_time .= ' ago';
break;
default:
$display_time = date($date_format,$tweet_time);
break;
}
} else {
$display_time = date($date_format,$tweet_time);
}
// Render the tweet.
$twitter_html .= $tweet_wrap_open.html_entity_decode($tweet_desc).$meta_wrap_open.'<a href="http://twitter.com/'.$twitter_user_id.'/status/'.$tweet_id.'">'.$display_time.'</a>'.$meta_wrap_close.$tweet_wrap_close;
// If we have processed enough tweets, stop.
if ($tweet_count >= $tweets_to_display){
break;
}
}
// Close the twitter wrapping element.
$twitter_html .= $twitter_wrap_close;
echo $twitter_html;
// Generate a new cache file.
$file = fopen($cache_file, 'w');
// Save the contents of output buffer to the file, and flush the buffer.
fwrite($file, ob_get_contents());
fclose($file);
ob_end_flush();
}
}
}
}
// Display latest tweets. (Modify username to your Twitter handle)
display_latest_tweets('andrew_biggart');
?>