-
Notifications
You must be signed in to change notification settings - Fork 0
/
twitterphp.php
338 lines (289 loc) · 12.7 KB
/
twitterphp.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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
<?php
///////////////////////////////////////////
//
// twitterPHP
// version 0.1
// By David Billingham
// david [at] slawcup [dot] com
// http://twitter.slawcup.com/twitter.class.phps
///////////////////////////////////////////
require_once('db.php');
require_once('twitterphp.php');
require_once('twitterOAuth.php');
class twitter{
var $username='';
var $password='';
var $user_agent='';
var $consumerKey='GZp1I6FWnuU3RdE0Y7iRBg';
var $signatureMethod='';
var $version='1.0';
///////////////
//
// I don't know if these headers have become standards yet
// but I would suggest using them.
// more discussion here.
// http://tinyurl.com/3xtx66
//
///////////////
var $headers=array('X-Twitter-Client: ',
'X-Twitter-Client-Version: ',
'X-Twitter-Client-URL: ');
var $responseInfo=array();
function twitter(){}
/////////////////////////////////////////
//
// Twitter API calls
//
// $this->update($status)
// $this->publicTimeline($sinceid=false)
// $this->friendsTimeline($id=false,$since=false)
// $this->userTimeline($id=false,$count=20,$since=false)
// $this->showStatus($id)
// $this->friends($id=false)
// $this->followers()
// $this->featured()
// $this->showUser($id)
// $this->directMessages($since=false)
// $this->sendDirectMessage($user,$text)
// $this->verifyCredentials()
//
// If SimpleXMLElement exists the results will be returned as a SimpleXMLElement
// otherwise the raw XML will be returned for a successful request. If the request
// fails a FALSE will be returned.
//
//
/////////////////////////////////////////
// Updates the authenticating user's status.
// Requires the status parameter specified below.
//
// status. (string) Required. The text of your status update. Must not be
// more than 160 characters and should not be
// more than 140 characters to ensure optimal display.
//
function update($status){
$to = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $_SESSION['oauth_access_token'], $_SESSION['oauth_access_token_secret']);
print_r($to);
$response = $to->OAuthRequest('https://twitter.com/statuses/update.xml', array('status' => $status), 'POST');
$xml = new SimpleXMLElement($response);
print 'b';
print $response;
$t = new Tweet($xml);
return $t;
}
// Returns the 20 most recent statuses from non-protected users who have
// set a custom user icon. Does not require authentication.
//
// sinceid. (int) Optional. Returns only public statuses with an ID greater
// than (that is, more recent than) the specified ID.
//
function publicTimeline($sinceid=false){
$qs='';
if($sinceid!==false)
$qs='?since_id='.intval($sinceid);
$request = 'http://twitter.com/statuses/public_timeline.xml'.$qs;
$to = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $_SESSION['oauth_access_token'], $_SESSION['oauth_access_token_secret']);
return $to->OAuthRequest($request,array(), 'GET');
}
// Returns the 20 most recent statuses posted in the last 24 hours from the
// authenticating user and that user's friends. It's also possible to request
// another user's friends_timeline via the id parameter below.
//
// id. (string OR int) Optional. Specifies the ID or screen name of the user for whom
// to return the friends_timeline. (set to false if you
// want to use authenticated user).
// since. (HTTP-formatted date) Optional. Narrows the returned results to just those
// statuses created after the specified date.
//
function friendsTimeline($id=false,$since=false,$count=false){
$qs='';
if($since!==false)
$qs='?since='.urlencode($since);
if($id===false)
$request = 'http://twitter.com/statuses/friends_timeline.xml'.$qs;
if($count!==false)
$qs='?count='.urlencode($count);
else
$request = 'http://twitter.com/statuses/friends_timeline/'.urlencode($id).'.xml?count=100'.$qs;
$to = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $_SESSION['oauth_access_token'], $_SESSION['oauth_access_token_secret']);
return new SimpleXMLElement($to->OAuthRequest($request,array('count'=> $count), 'GET'));
}
// Returns the 20 most recent statuses posted in the last 24 hours from the
// authenticating user. It's also possible to request another user's timeline
// via the id parameter below.
//
// id. (string OR int) Optional. Specifies the ID or screen name of the user for whom
// to return the user_timeline.
// count. (int) Optional. Specifies the number of statuses to retrieve. May not be
// greater than 20 for performance purposes.
// since. (HTTP-formatted date) Optional. Narrows the returned results to just those
// statuses created after the specified date.
//
function userTimeline($id=false,$count=20,$since=false){
$qs='?count='.intval($count);
if($since!==false)
$qs .= '&since='.urlencode($since);
if($id===false)
$request = 'http://twitter.com/statuses/user_timeline.xml'.$qs;
else
$request = 'http://twitter.com/statuses/user_timeline/'.urlencode($id).'.xml'.$qs;
$to = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $_SESSION['oauth_access_token'], $_SESSION['oauth_access_token_secret']);
return $to->OAuthRequest($request,array(), 'GET');
}
// Returns a single status, specified by the id parameter below. The status's author
// will be returned inline.
//
// id. (int) Required. Returns status of the specified ID.
//
function showStatus($id){
$request = 'http://twitter.com/statuses/show/'.$id.'.xml';
$to = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $_SESSION['oauth_access_token'], $_SESSION['oauth_access_token_secret']);
return $to->OAuthRequest($request,array(), 'GET');
}
// Returns the authenticating user's friends, each with current status inline. It's
// also possible to request another user's friends list via the id parameter below.
//
// id. (string OR int) Optional. The ID or screen name of the user for whom to request
// a list of friends.
//
function showSingleUpdate($id){
$request = 'http://twitter.com/statuses/public_timeline.xml'.$qs;
$to = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $_SESSION['oauth_access_token'], $_SESSION['oauth_access_token_secret']);
return $to->OAuthRequest($request,array(), 'GET');
}
function friends($id=false){
if($id===false)
$request = 'http://twitter.com/statuses/friends.xml';
else
$request = 'http://twitter.com/statuses/friends/'.urlencode($id).'.xml';
return $this->process($request);
}
// Returns the authenticating user's followers, each with current status inline.
//
function followers(){
$request = 'http://twitter.com/statuses/followers.xml';
return $this->process($request);
}
// Returns a list of the users currently featured on the site with their current statuses inline.
function featured(){
$request = 'http://twitter.com/statuses/featured.xml';
return $this->process($request);
}
// Returns extended information of a given user, specified by ID or screen name as per the required
// id parameter below. This information includes design settings, so third party developers can theme
// their widgets according to a given user's preferences.
//
// id. (string OR int) Required. The ID or screen name of a user.
//
function rateLimit(){
$request = 'http://twitter.com/account/rate_limit_status.xml';
print $this->process($request);
return $this->process($request);
}
function showUser($id){
$request = 'http://twitter.com/users/show/'.urlencode($id).'.xml';
return $this->process($request);
}
function verifyCredentials(){
$request = 'http://twitter.com/account/verify_credentials.xml';
$to = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $_SESSION['oauth_access_token'], $_SESSION['oauth_access_token_secret']);
$xml = new SimpleXMLElement($to->OAuthRequest($request,array(), 'GET'));
$user = new User($xml);
return $user;
}
// Returns a list of the direct messages sent to the authenticating user.
//
// since. (HTTP-formatted date) Optional. Narrows the resulting list of direct messages to just those
// sent after the specified date.
//
function directMessages($since=false){
$qs='';
if($since!==false)
$qs='?since='.urlencode($since);
$request = 'http://twitter.com/direct_messages.xml'.$qs;
return $this->process($request);
}
// Sends a new direct message to the specified user from the authenticating user. Requires both the user
// and text parameters below.
//
// user. (string OR int) Required. The ID or screen name of the recipient user.
// text. (string) Required. The text of your direct message. Be sure to URL encode as necessary, and keep
// it under 140 characters.
//
function sendDirectMessage($user,$text){
$request = 'http://twitter.com/direct_messages/new.xml';
$postargs = 'user='.urlencode($user).'&text='.urlencode($text);
return $this->process($request,$postargs);
}
// internal function where all the juicy curl fun takes place
// this should not be called by anything external unless you are
// doing something else completely then knock youself out.
function process($url,$postargs=false){
$ch = curl_init($url);
if($postargs !== false){
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postargs);
}
if($this->username !== false && $this->password !== false)
curl_setopt($ch, CURLOPT_USERPWD, $this->username.':'.$this->password);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);
$response = curl_exec($ch);
$this->responseInfo=curl_getinfo($ch);
curl_close($ch);
if(intval($this->responseInfo['http_code'])==200){
if(class_exists('SimpleXMLElement')){
$xml = new SimpleXMLElement($response);
return $xml;
}else{
return $response;
}
}else{
return false;
}
}
// zooms in or out by excluding tweets according to the 'excludeevery' parameter
function showZoomedTweets($skipevery = 0,$count = 50){
//verify logged in status
$db = new DB();
$db->open();
if(false){
echo "Need to log in first<br>";
}else{
$res = $this->friendsTimeline(false,false,$count);
//verify ok results
if($res===false){
echo "ERROR<hr/>";
echo "<pre>";
print_r($this->responseInfo);
print_r($this->responseInfo);
echo "</pre>";
}else{
echo '<h2>User Timeline: </h2>';
//print whole response:
//echo $res->asXML() . '<br>';
$loopcount = 0;
$skipcount = 0;
foreach($res->status as $status) {
if($skipcount +1 != $skipevery || $skipevery == 0){
$tweet = new Tweet($status);
$tweet->display();
$db->insertUpdateTweet($tweet);
print '<hr>';
$skipcount++;
$loopcount++;
}else{
//print 'Excluded!';
$skipcount = 0;
}
}
}
}
$db->close();
}
}
?>