Twitter.class.php
. <?php
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* File: Twitter.class.php
* Author: Brandon Trebitowski
* Created: 02/26/2009
* Updated 06/24/09
* Version: 1.1
*
*/
class Twitter {
var $username='';
var $password='';
var $responseInfo=array();
// Status Methods
/*
* Returns the 20 most recent statuses from non-protected users
* who have set a custom user icon. Does not require authentication.
* Note that the public timeline is cached for 60 seconds so requesting
* it more often than that is a waste of resources.
*/
function public_timeline($format) {
$request = 'http://twitter.com/statuses/public_timeline.'.$format;
return $this->process($request);
}
/* Returns the 20 most recent statuses posted by the authenticating
* user and that user's friends. This is the equivalent of /home on the Web.
*/
function friends_timeline($format='xml',$count=20) {
$request = 'http://twitter.com/statuses/friends_timeline.'.$format;
$postargs = "count=$count";
return $this->process($request,$postargs);
}
/* Returns the 20 most recent statuses posted from the authenticating user.
* It's also possible to request another user's timeline via the id parameter
* below. This is the equivalent of the Web /archive page for your own user,
* or the profile page for a third party.
*/
function user_timeline($format='xml',$id=null) {
$request = 'http://twitter.com/statuses/user_timeline.'.$format;
if($id) {
$postargs = "id=$id";
return $this->process($request,$postargs);
}
return $this->process($request);
}
/* Updates the authenticating user's status. Requires the status parameter
* specified below. Request must be a POST. A status update with text identical
* to the authenticating user's current status will be ignored.
*/
function update($format = 'xml',$status){
$request = 'http://twitter.com/statuses/update.'.$format;
$postargs = 'status='.urlencode($status);
return $this->process($request,$postargs);
}
/* Returns the 20 most recent @replies (status updates prefixed with @username)
* for the authenticating user.
*/
function replies($format='xml') {
$request = 'http://twitter.com/statuses/replies.'.$format;
return $this->process($request);
}
// User Methods
/* Returns the authenticating user's friends, each with current status inline.
* They are ordered by the order in which they were added as friends. It's also
* possible to request another user's recent friends list via the id parameter below.
*/
function friends($format='xml',$id=null,$page=1) {
$request = 'http://twitter.com/statuses/friends.'.$format;
$postargs = "page=$page";
if($id) {
$postargs .= "&id=$id";
}
return $this->process($request,$postargs);
}
/* Returns the authenticating user's followers, each with current status inline.
* They are ordered by the order in which they joined Twitter (this is going to be changed).
*/
function followers($format='xml',$id=null,$page=1) {
$request = 'http://twitter.com/statuses/followers.'.$format;
$postargs = "page=$page";
if($id) {
$postargs .= "&id=$id";
}
return $this->process($request,$postargs);
}
/* 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.
* You must be properly authenticated to request the page of a protected user.
*/
function show($format='xml',$id) {
$postargs = "";
$request = 'http://twitter.com/users/show/'.$id.".$format";
return $this->process($request);
}
// Friendship Methods
/* Befriends the user specified in the ID parameter as the authenticating user.
* Returns the befriended user in the requested format when successful. Returns
* a string describing the failure condition when unsuccessful.
*/
function create($format='xml',$user_ID) {
$request = "http://twitter.com/friendships/create/$user_ID.$format";
return $this->process($request);
}
/* Discontinues friendship with the user specified in the ID parameter as the
* authenticating user. Returns the un-friended user in the requested format
* when successful. Returns a string describing the failure condition when unsuccessful.
*/
function destroy($format='xml',$user_ID) {
$request = "http://twitter.com/friendships/destroy/$user_ID.$format";
return $this->process($request);
}
/* Tests if a friendship exists between two users.
*/
function exists($format='xml',$user_ID_a,$user_ID_b) {
$request = "http://twitter.com/friendships/exists.$format?user_a=$user_ID_a&user_b=$user_ID_b";
return $this->process($request);
}
/* Processes a Twitter Request using cURL */
function process($url,$postargs=false){
$curl_conn = curl_init();
curl_setopt($curl_conn, CURLOPT_URL, $url); //URL to connect to
//curl_setopt($curl_conn, CURLOPT_POST, 1); //Use GET method
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, $this->username.":".$this->password); //Set u/p
curl_setopt($curl_conn, CURLOPT_SSL_VERIFYPEER, false); //Do not check SSL certificate (but use SSL of course), live dangerously!
curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string
// Result from querying URL. Will parse as xml
$output = curl_exec($curl_conn);
// close cURL resource. It's like shutting down the water when you're brushing your teeth.
$this->responseInfo=curl_getinfo($curl_conn);
curl_close($curl_conn);
if(intval($this->responseInfo['http_code'])==200){
// Display the response from Twitter
return $output;
}else{
// Something went wrong
return "Error: " . $this->responseInfo['http_code'];
}
}
}
?>
Code language: PHP (php)
Now create a file called twitter-reader.php in the same folder as of Twitter.class.php and copy following content in it. <html>
<head>
<title>Twitter Client example using PHP library - viralpatel.net</title>
<style>
body {
font-family: sans-serif;
font-size: 13px;
}
#update {
height: 65px;
width: 500px;
background-color: #EFEFEF;
margin-bottom: 5px;
padding: 5 5 5 5;
}
#update #left {
float:left;
display: inline;
padding-right: 7px;
}
#update .user {
font-weight: bold;
color: #0383FF;
}
</style>
<script src="jquery-1.3.1.min.js" language="javascript"></script>
</head>
<body>
<div id="updates">
<?php
include("Twitter.class.php");
$twitter = new Twitter();
$json = $twitter->public_timeline('json');
$updates = json_decode($json);
foreach ($updates as $update) {
// echo $update->text;
// echo $update->user->name . "<br>";
?>
<div id="update">
<div id="left"><img width="48px" height="48px" src="<?=$update->user->profile_image_url?>"/></div>
<div id="right">
<div class="user"><?=$update->user->name?></div>
<div class="detail">
<?=$update->text?>
</div>
</div>
</div>
<?php
}
?>
</div>
<script>
$(document).ready(function(){
getlatest();
});
function getlatest() {
$.ajax({
type: "GET",
url: "latest-tweet.php",
cache: false,
success: function(html){
$("div#updates").prepend(html);
$("#update").slideDown("400");
}
});
setTimeout("getlatest();", 10000);
}
</script>
</body>
</html>
Code language: PHP (php)
That’s it. Your simple twitter reader (client) that reads public tweets is ready. I have used some jQuery code to pull latest tweets every 10 seconds and display them on screen. For that we are using a php file latest-tweet.php which calls our PHP library and gets the latest tweet. Following is the content of latest-tweet.php <?php
include("Twitter.class.php");
$twitter = new Twitter();
$json = $twitter->public_timeline('json');
$updates = json_decode($json);
$update = $updates[0];
?>
<div id="update" style="display:none">
<div id="left"><img width="48px" height="48px" src="<?=$update->user->profile_image_url?>"/></div>
<div id="right">
<div class="user"><?=$update->user->name?></div>
<div class="detail">
<?=$update->text?>
</div>
</div>
</div>
Code language: PHP (php)
Thus, all we need is three php files Twitter.class.php, twitter-reader.php and latest-tweet.php and that’s it. There are different API functions available in Tweeter.class.php that can be used to do lot of things around twitter. Functions are pretty much self explanatory. Give it a try and let me know. Java URL Encoder/Decoder Example - In this tutorial we will see how to URL encode/decode…
Show Multiple Examples in OpenAPI - OpenAPI (aka Swagger) Specifications has become a defecto standard…
Local WordPress using Docker - Running a local WordPress development environment is crucial for testing…
1. JWT Token Overview JSON Web Token (JWT) is an open standard defines a compact…
GraphQL Subscription provides a great way of building real-time API. In this tutorial we will…
1. Overview Spring Boot Webflux DynamoDB Integration tests - In this tutorial we will see…
View Comments
Ha love it 'It's like shutting down the water when you're brushing your teeth' great post ;)
Thanks for the comment Ashley :)
I know its bit fast to comprehend what all tweets are getting in there ;)
Where is the function json_decode?I tried to execute twitter-reader.php but got undefined function json_decode(). please send the json_decode function code
Hi John, The json_decode function comes with the PHP installation in webserver. Please check the PHP version in your webhosting or in your machine if you running locally. Check the manual of json_decode here http://us.php.net/json_decode.
Thanx for sharing this code..
But I have one problem. Using the friends_timeline() from Twitter class, when the Ajax update called, it still returned the latest friend update even if it has already displayed before.
I think you should add a method to check wether the latest friend tweet is already displayed or not.
Hey ,
I just found you out while googling , and this a really nice blog. :)
Expect me to be a frequent visitor here. Will read all your posts
Thanks ,
Regards ,
Sourish
(Admin)
OneTrickADay
Hey Sourish, Welcome..
Feel free to subscribe for RSS feed and Email Newsletter. :)
Hi Viral, Thank you for this great post, I actually tried your code locally using XAMPP but it is not working for me, i am just getting a blank screen... Anythoughts? am i missing something, any help would be greatly appreciated
regards
Very nice code! Works very clear and easy =) but I also got a question.. Im looking for a function to call the next page with search results as described in twitter API. Now I got something like this..
function more_timeline($format='xml', $count=20) {
$request = 'http://twitter.com/statuses/friends_timeline.'.$format.'?page='.$my_page.'&max_id='.$my_max_id.'';
//$postargs = "count=$count";
return $this->process($request);
}
How can I use this function from my client website and give the variables $my_page and $my_max_id to specify the 'next' page? I hope you can help me out! Thanks!
Sounds interesting, although there are so many of them already! Twitter reader is exactly what's needed now. I managed to find the one I like most - http://www.litefeed.com. What do you think?
demo not working to me,...
:(