Creating a Mobile Event Calendar

Mobile-Calendar_Preview
This tutorial describes how to build an HTML5-based mobile calendar to track conferences and events that run on iOS and Android phones using a mobile version of dhtmlxScheduler (open source, GPL). At the end, users will be able to add and edit events, select the conference location on Google Maps, and see the events in day, month, or list views….

Read More »

 

Creating a simple Twitter Reader(Client) in 5 minutes!!

Twitter, The popular micro blogging and real time update site has changed the way we interact in internet world. Not only it has became a source of latest updates/news going in world, but also an addiction to lot of those who tweets regularly.

Twitter has provided lots of API that can be used to Get the latest tweets / Add tweets / Search the tweets / Get the trends etc.. These APIs are REST APIs that can be called by using any scripting language and getting the result back. You can read full specifications of API at Twitter’s API site.

Let us first see the small demo that I have created. This demo page will read latest public tweets every 10 second and update it on screen with some animation effect.

Click here to view the demo.

We will use a PHP library to call the Twitter APIs and get the result. Following is the code of library. Just copy paste it in a file called 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 .= "&amp;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 .= "&amp;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&amp;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'];
            }
            
        }
    }
?>

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>

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>

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.