<?php
    
/**
     * 
     * SWX Identi.ca API by Folkert Hielema
     * 
     * You can call this API using SWX, Amfphp, JSON and XML-RPC.
     * 
     * @author    Folkert Hielema
     * @copyright    2008 Folkert Hielema All Rights Reserved. 
     * @link     http://tjunar.com
     * @link     http://swxformat.org
     * @link    mailto://nederflash@gmail.com
     * 
    **/
    
    // Require base service class
    
require_once("../BaseService.php");

    
/**
     * SWX Identi.ca API by Folkert Hielema. You can call this API using SWX, Amfphp, JSON and XML-RPC.
    **/
    
class Identica extends BaseService
    
{
        
//////////////////////////////////////////////////////////////////////////////////////////
        //
        // Official Identi.ca API methods: These implement a spinoff from the official twitter API.
        // See http://groups.google.com/group/twitter-development-talk/web/api-documentation
        // for the full official documentation.
        //
        //////////////////////////////////////////////////////////////////////////////////////////
        
        //
        // Status methods.
        //
        
        /**
         * Returns the 20 most recent statuses from non-protected users who have set a custom user icon.  Does not require authentication.
         * @return Array of statuses.
         * @author Folkert Hielema
         **/
        
function publicTimeline()
        {
            
$url 'identi.ca/api/statuses/public_timeline.json';

            
$response $this->_jsonCall($urlNULL'GET');
            
            return 
$response;
        }
        
        
/**
         * 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.
         * 
         * @param    Your username.
         * @param    Your password.
         * @param    (optional)    ID or screen name of the user for whom to return the friends_timeline.
         * @param     (optional) The number of the page you want
         *
         * @return Array of statuses.
         * @author Folkert Hielema
         **/
        
function friendsTimeline($user$pass$id NULL$count 50$page 0)
        {
            
$url 'identi.ca/api/statuses/friends_timeline.json';
            
            
$vars = array('id' => $id'count' => $count'page' => $page);
            
            
$response $this->_jsonCall($url$vars'GET'$user$pass);
            
            return 
$response;
        }
        
        
/**
         * 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.
         * 
         *
         * @return 20 most recent statuses.
         * @author Folkert Hielema
         **/
        
function userTimeline($user$pass$id NULL$count 50)
        {
            
$url 'identi.ca/api/statuses/user_timeline.json';
            
            
$vars = array('id' => $id'count' => $count);
            
            
$response $this->_jsonCall($url$vars'GET'$user$pass);
            
            return 
$response;
        }
        
        
/**
         * Returns a single status, specified by the id parameter below.  The status's author will be returned inline.
         * 
         * @param The numerical ID of the status you're trying to retrieve. 
         *
         * @return A single status.
         * @author Folkert Hielema
         **/
        
function show($id)
        {
            
$url "identi.ca/api/statuses/show/$id.json";
            
            
$response $this->_jsonCall($urlNULL'GET');
            
            return 
$response;
        }

        
/**
         * Posts a identi.ca update.
         *
         * @param (str) update message
         * @param (str) Your user name
         * @param (str) Your password
         * @param (optional, str) Source string. If enabled by Twitter, this will appear in the "from" section of the update.  
         * 
         * @return     (array)    Success/failure message.
         * 
         * @author     Folkert Hielema
         **/
        
function update($update$user$pass$source NULL$reply_id NULL)
        {
            
$url 'identi.ca/api/statuses/update.json';
            
$args = array('status' => $update'in_reply_to_status_id' => $reply_id);
            
            if (
$source != NULL
            {
                
$args['source'] = $source;                    
            }
            
            
$response $this->_jsonCall($url$args'POST'$user$pass);
            
            return 
$response;
        }
        
        
/**
         * Returns the 20 most recent replies (status updates prefixed with @username posted by users who are friends with the user being replied to) to the authenticating user.  Replies are only available to the authenticating user; you can not request a list of replies to another user whether public or protected.
         * 
         * @param (str) Your user name
         * @param (str) Your password
         * @param (optional, int) Page number
         *
         * @return 20 most recent replies
         * @author Folkert Hielema
         **/
        
function replies($user$pass$page NULL)
        {
            
$url 'identi.ca/api/statuses/replies.json';
            
$args = array('page' => $page);
            
            
$response $this->_jsonCall($url$args'POST'$user$pass);
            
            return 
$response;            
        }
        
        
            
        
//
        // User methods.
        //

        /**
         * Gets friends for the passed user.
         *
         * @param    (str) Username.
         * @param    (str) Password.
         * @param    (optional) The ID or screen name of a user
         *
         * @return     (array)    List of friends.
         * @author Folkert Hielema
         **/
        
function friends($user$pass$id NULL$page 1)
        {
            if(
$id !== NULL)
                
$url "identi.ca/api/statuses/friends/$id.json";
            else
                
$url "identi.ca/api/statuses/friends/$user.json";
            
            
$vars = array('page' => $page);
            
            
$response $this->_jsonCall($url,  $vars'GET'$user$pass);
            return 
$response;
        }
        
        
/**
         * Gets followers for authenticated user.
         * 
         * @param    (str) Your username.
         * @param    (str) Your password.
         * 
         * @return (array) List of followers.
         * @author Folkert Hielema
         **/
        
function followers($user$pass)
        {
            
$url 'identi.ca/api/statuses/followers.json';
            
            
$response $this->_jsonCall($urlNULL'GET'$user$pass);
            
            return 
$response;    
        }
        
        

        
//
        // 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.
         * 
         * @param (str) The ID or screen name of the user to befriend.
         * @param (str) Your username
         * @param (str) Your password
         *
         * @return Befriended user or error string.
         * @author Folkert Hielema
         **/
        
function friendshipCreate($id$user$pass)
        {
            
$url "identi.ca/api/friendships/create/$id.json";

            
$response $this->_jsonCall($urlNULL'POST'$user$pass);
            
            return 
$response;
        }
        
        
/**
         * 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.
         * 
         * @param (str) The ID or screen name of the user with whom to discontinue friendship.
         * @param (str) Your username
         * @param (str) Your password
         *
         * @return Un-friended user or error string.
         * @author Folkert Hielema
         **/
        
function friendshipDestroy($id$user$pass)
        {
            
$url "identi.ca/api/friendships/destroy/$id.json";

            
$response $this->_jsonCall($urlNULL'POST'$user$pass);
            
            return 
$response;
        }        
        
        
/**
         * Test if a friendShip exists between two users
         *
         * @param (str) Your username
         * @param (str) Your password
         * @param (str) The ID or screen_name of the first user to test friendship for
         * @param (str) The ID or screen_name of the second user to test friendship for
         * @author Folkert Hielema
         **/
        
function friendshipExists($user$pass$user_a$user_b)
        {
            
$url "identi.ca/api/friendships/exists.json";
            
$args = array('user_a'=>$user_a'user_b'=>$user_b);
            
            
$response $this->_jsonCall($url$args'GET'$user$pass);
            return 
$response;
        }
         
        
//
        // Account methods.
        //
        
        /**
         * Returns an HTTP 200 OK response code and a format-specific response if authentication was successful.  Use this method to test if supplied user credentials are valid with minimal overhead.
         *
         * @return authorized = "true" on success. null on failure.
         * @author Folkert Hielema for Identi.ca/Aral Balkan for Twitter API
         **/
        
function verifyCredentials($user$pass)
        {
            
$url 'identi.ca/api/account/verify_credentials.json';
            
            
$response $this->_jsonCall($urlNULL'GET'$user$pass);
            
            return 
$response;
        }
        
        
        
        
// Help methods
        
        /**
         *    Returns the string "ok" in requested format with a 200 OK HTTP status code
         */
        
function test()
        {
            
$url "identi.ca/api/help/test.json";
            
$response $this->_jsonCall($urlNULL'GET');
            return 
$response;
        }
    }
?>