summaryrefslogtreecommitdiff
path: root/applications/core/lib/Zend/Service/Twitter.php
diff options
Diffstat (limited to 'applications/core/lib/Zend/Service/Twitter.php')
-rwxr-xr-xapplications/core/lib/Zend/Service/Twitter.php780
1 files changed, 780 insertions, 0 deletions
diff --git a/applications/core/lib/Zend/Service/Twitter.php b/applications/core/lib/Zend/Service/Twitter.php
new file mode 100755
index 0000000..0c93d0f
--- /dev/null
+++ b/applications/core/lib/Zend/Service/Twitter.php
@@ -0,0 +1,780 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to [email protected] so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Service
+ * @subpackage Twitter
+ * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: $
+ */
+
+
+/**
+ * @see Zend_Rest_Client
+ */
+require_once 'Zend/Rest/Client.php';
+
+/**
+ * @see Zend_Rest_Client_Result
+ */
+require_once 'Zend/Rest/Client/Result.php';
+
+/**
+ * @category Zend
+ * @package Zend_Service
+ * @subpackage Twitter
+ * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Service_Twitter extends Zend_Rest_Client
+{
+ /**
+ * Whether or not authorization has been initialized for the current user.
+ * @var bool
+ */
+ protected $_authInitialized = false;
+
+ /**
+ * @var Zend_Http_CookieJar
+ */
+ protected $_cookieJar;
+
+ /**
+ * Date format for 'since' strings
+ * @var string
+ */
+ protected $_dateFormat = 'D, d M Y H:i:s T';
+
+ /**
+ * Username
+ * @var string
+ */
+ protected $_username;
+
+ /**
+ * Password
+ * @var string
+ */
+ protected $_password;
+
+ /**
+ * Current method type (for method proxying)
+ * @var string
+ */
+ protected $_methodType;
+
+ /**
+ * Types of API methods
+ * @var array
+ */
+ protected $_methodTypes = array(
+ 'status',
+ 'user',
+ 'directMessage',
+ 'friendship',
+ 'account',
+ 'favorite'
+ );
+
+ /**
+ * Constructor
+ *
+ * @param string $username
+ * @param string $password
+ * @return void
+ */
+ public function __construct($username, $password)
+ {
+ $this->setUsername($username);
+ $this->setPassword($password);
+ $this->setUri('http://twitter.com');
+
+ $client = self::getHttpClient();
+ $client->setHeaders('Accept-Charset', 'ISO-8859-1,utf-8');
+ }
+
+ /**
+ * Retrieve username
+ *
+ * @return string
+ */
+ public function getUsername()
+ {
+ return $this->_username;
+ }
+
+ /**
+ * Set username
+ *
+ * @param string $value
+ * @return Zend_Service_Twitter
+ */
+ public function setUsername($value)
+ {
+ $this->_username = $value;
+ $this->_authInitialized = false;
+ return $this;
+ }
+
+ /**
+ * Retrieve password
+ *
+ * @return string
+ */
+ public function getPassword()
+ {
+ return $this->_password;
+ }
+
+ /**
+ * Set password
+ *
+ * @param string $value
+ * @return Zend_Service_Twitter
+ */
+ public function setPassword($value)
+ {
+ $this->_password = $value;
+ $this->_authInitialized = false;
+ return $this;
+ }
+
+ /**
+ * Proxy service methods
+ *
+ * @param string $type
+ * @return Zend_Service_Twitter
+ * @throws Zend_Service_Twitter_Exception if method is not in method types list
+ */
+ public function __get($type)
+ {
+ if (!in_array($type, $this->_methodTypes)) {
+ include_once 'Zend/Service/Twitter/Exception.php';
+ throw new Zend_Service_Twitter_Exception('Invalid method type "' . $type . '"');
+ }
+
+ $this->_methodType = $type;
+ return $this;
+ }
+
+ /**
+ * Method overloading
+ *
+ * @param string $method
+ * @param array $params
+ * @return mixed
+ * @throws Zend_Service_Twitter_Exception if unable to find method
+ */
+ public function __call($method, $params)
+ {
+ if (empty($this->_methodType)) {
+ include_once 'Zend/Service/Twitter/Exception.php';
+ throw new Zend_Service_Twitter_Exception('Invalid method "' . $method . '"');
+ }
+
+ $test = $this->_methodType . ucfirst($method);
+ if (!method_exists($this, $test)) {
+ include_once 'Zend/Service/Twitter/Exception.php';
+ throw new Zend_Service_Twitter_Exception('Invalid method "' . $test . '"');
+ }
+
+ return call_user_func_array(array($this, $test), $params);
+ }
+
+ /**
+ * Initialize HTTP authentication
+ *
+ * @return void
+ */
+ protected function _init()
+ {
+ $client = self::getHttpClient();
+
+ $client->resetParameters();
+
+ if (null == $this->_cookieJar) {
+ $client->setCookieJar();
+ $this->_cookieJar = $client->getCookieJar();
+ } else {
+ $client->setCookieJar($this->_cookieJar);
+ }
+
+ if (!$this->_authInitialized) {
+ $client->setAuth($this->getUsername(), $this->getPassword());
+ $this->_authInitialized = true;
+ }
+ }
+
+ /**
+ * Set date header
+ *
+ * @param int|string $value
+ * @return void
+ */
+ protected function _setDate($value)
+ {
+ if (is_int($value)) {
+ $date = date($this->_dateFormat, $value);
+ } else {
+ $date = date($this->_dateFormat, strtotime($value));
+ }
+ self::getHttpClient()->setHeaders('If-Modified-Since', $date);
+ }
+
+ /**
+ * Public Timeline status
+ *
+ * @return Zend_Rest_Client_Result
+ */
+ public function statusPublicTimeline()
+ {
+ $this->_init();
+ $path = '/statuses/public_timeline.xml';
+ $response = $this->restGet($path);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Friend Timeline Status
+ *
+ * $params may include one or more of the following keys
+ * - id: ID of a friend whose timeline you wish to receive
+ * - count: how many statuses to return
+ * - since: return results only after the date specified
+ * - since_id: return results only after the specific tweet
+ * - page: return page X of results
+ *
+ * @param array $params
+ * @return void
+ */
+ public function statusFriendsTimeline(array $params = array())
+ {
+ $this->_init();
+ $path = '/statuses/friends_timeline';
+ $_params = array();
+ foreach ($params as $key => $value) {
+ switch (strtolower($key)) {
+ case 'count':
+ $count = (int) $value;
+ if (0 >= $count) {
+ $count = 1;
+ } elseif (200 < $count) {
+ $count = 200;
+ }
+ $_params['count'] = (int) $count;
+ break;
+ case 'since_id':
+ $_params['since_id'] = (int) $value;
+ break;
+ case 'since':
+ $this->_setDate($value);
+ break;
+ case 'page':
+ $_params['page'] = (int) $value;
+ break;
+ default:
+ break;
+ }
+ }
+ $path .= '.xml';
+ $response = $this->restGet($path, $_params);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * User Timeline status
+ *
+ * $params may include one or more of the following keys
+ * - id: ID of a friend whose timeline you wish to receive
+ * - since: return results only after the date specified
+ * - page: return page X of results
+ * - count: how many statuses to return
+ *
+ * @return Zend_Rest_Client_Result
+ */
+ public function statusUserTimeline(array $params = array())
+ {
+ $this->_init();
+ $path = '/statuses/user_timeline';
+ $_params = array();
+ foreach ($params as $key => $value) {
+ switch (strtolower($key)) {
+ case 'id':
+ $path .= '/' . $value;
+ break;
+ case 'since':
+ $this->_setDate($value);
+ break;
+ case 'page':
+ $_params['page'] = (int) $value;
+ break;
+ case 'count':
+ $count = (int) $value;
+ if (0 >= $count) {
+ $count = 1;
+ } elseif (200 < $count) {
+ $count = 200;
+ }
+ $_params['count'] = $count;
+ break;
+ default:
+ break;
+ }
+ }
+ $path .= '.xml';
+ $response = $this->restGet($path, $_params);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Show a single status
+ *
+ * @param int $id Id of status to show
+ * @return Zend_Rest_Client_Result
+ */
+ public function statusShow($id)
+ {
+ $this->_init();
+ $path = '/statuses/show/' . $id . '.xml';
+ $response = $this->restGet($path);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Update user's current status
+ *
+ * @param string $status
+ * @param int $in_reply_to_status_id
+ * @return Zend_Rest_Client_Result
+ * @throws Zend_Service_Twitter_Exception if message is too short or too long
+ */
+ public function statusUpdate($status, $in_reply_to_status_id = null)
+ {
+ $this->_init();
+ $path = '/statuses/update.xml';
+ $len = iconv_strlen($status, 'UTF-8');
+ if ($len > 140) {
+ include_once 'Zend/Service/Twitter/Exception.php';
+ throw new Zend_Service_Twitter_Exception('Status must be no more than 140 characters in length');
+ } elseif (0 == $len) {
+ include_once 'Zend/Service/Twitter/Exception.php';
+ throw new Zend_Service_Twitter_Exception('Status must contain at least one character');
+ }
+
+ $data = array(
+ 'status' => $status
+ );
+
+ if(is_numeric($in_reply_to_status_id) && !empty($in_reply_to_status_id)) {
+ $data['in_reply_to_status_id'] = $in_reply_to_status_id;
+ }
+
+ //$this->status = $status;
+ $response = $this->restPost($path, $data);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Get status replies
+ *
+ * $params may include one or more of the following keys
+ * - since: return results only after the date specified
+ * - since_id: return results only after the specified tweet id
+ * - page: return page X of results
+ *
+ * @return Zend_Rest_Client_Result
+ */
+ public function statusReplies(array $params = array())
+ {
+ $this->_init();
+ $path = '/statuses/replies.xml';
+
+ $_params = array();
+ foreach ($params as $key => $value) {
+ switch (strtolower($key)) {
+ case 'since':
+ $this->_setDate($value);
+ break;
+ case 'since_id':
+ $_params['since_id'] = (int) $value;
+ break;
+ case 'page':
+ $_params['page'] = (int) $value;
+ break;
+ default:
+ break;
+ }
+ }
+
+ $response = $this->restGet($path, $_params);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Destroy a status message
+ *
+ * @param int $id ID of status to destroy
+ * @return Zend_Rest_Client_Result
+ */
+ public function statusDestroy($id)
+ {
+ $this->_init();
+ $path = '/statuses/destroy/' . (int) $id . '.xml';
+
+ $response = $this->restPost($path);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * User friends
+ *
+ * @param int|string $id Id or username of user for whom to fetch friends
+ * @return Zend_Rest_Client_Result
+ */
+ public function userFriends(array $params = array())
+ {
+ $this->_init();
+ $path = '/statuses/friends';
+ $_params = array();
+ foreach ($params as $key => $value) {
+ switch (strtolower($key)) {
+ case 'id':
+ $path .= '/' . $value;
+ break;
+ case 'since':
+ $this->_setDate($value);
+ break;
+ case 'page':
+ $_params['page'] = (int) $value;
+ break;
+ default:
+ break;
+ }
+ }
+ $path .= '.xml';
+
+ $response = $this->restGet($path, $_params);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * User Followers
+ *
+ * @param bool $lite If true, prevents inline inclusion of current status for followers; defaults to false
+ * @return Zend_Rest_Client_Result
+ */
+ public function userFollowers($lite = false)
+ {
+ $this->_init();
+ $path = '/statuses/followers.xml';
+ if ($lite) {
+ $this->lite = 'true';
+ }
+
+ $response = $this->restGet($path);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Get featured users
+ *
+ * @return Zend_Rest_Client_Result
+ */
+ public function userFeatured()
+ {
+ $this->_init();
+ $path = '/statuses/featured.xml';
+
+ $response = $this->restGet($path);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Show extended information on a user
+ *
+ * @param int|string $id User ID or name
+ * @return Zend_Rest_Client_Result
+ */
+ public function userShow($id)
+ {
+ $this->_init();
+ $path = '/users/show/' . $id . '.xml';
+
+ $response = $this->restGet($path);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Retrieve direct messages for the current user
+ *
+ * $params may include one or more of the following keys
+ * - since: return results only after the date specified
+ * - since_id: return statuses only greater than the one specified
+ * - page: return page X of results
+ *
+ * @param array $params
+ * @return Zend_Rest_Client_Result
+ */
+ public function directMessageMessages(array $params = array())
+ {
+ $this->_init();
+ $path = '/direct_messages.xml';
+ $_params = array();
+ foreach ($params as $key => $value) {
+ switch (strtolower($key)) {
+ case 'since':
+ $this->_setDate($value);
+ break;
+ case 'since_id':
+ $_params['since_id'] = (int) $value;
+ break;
+ case 'page':
+ $_params['page'] = (int) $value;
+ break;
+ default:
+ break;
+ }
+ }
+ $response = $this->restGet($path, $_params);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Retrieve list of direct messages sent by current user
+ *
+ * $params may include one or more of the following keys
+ * - since: return results only after the date specified
+ * - since_id: return statuses only greater than the one specified
+ * - page: return page X of results
+ *
+ * @param array $params
+ * @return Zend_Rest_Client_Result
+ */
+ public function directMessageSent(array $params = array())
+ {
+ $this->_init();
+ $path = '/direct_messages/sent.xml';
+ $_params = array();
+ foreach ($params as $key => $value) {
+ switch (strtolower($key)) {
+ case 'since':
+ $this->_setDate($value);
+ break;
+ case 'since_id':
+ $_params['since_id'] = (int) $value;
+ break;
+ case 'page':
+ $_params['page'] = (int) $value;
+ break;
+ default:
+ break;
+ }
+ }
+ $response = $this->restGet($path, $_params);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Send a direct message to a user
+ *
+ * @param int|string $user User to whom to send message
+ * @param string $text Message to send to user
+ * @return Zend_Rest_Client_Result
+ * @throws Zend_Service_Twitter_Exception if message is too short or too long
+ */
+ public function directMessageNew($user, $text)
+ {
+ $this->_init();
+ $path = '/direct_messages/new.xml';
+
+ $len = iconv_strlen($text, 'UTF-8');
+ if (0 == $len) {
+ throw new Zend_Service_Twitter_Exception('Direct message must contain at least one character');
+ } elseif (140 < $len) {
+ throw new Zend_Service_Twitter_Exception('Direct message must contain no more than 140 characters');
+ }
+
+ $data = array(
+ 'user' => $user,
+ 'text' => $text,
+ );
+
+ $response = $this->restPost($path, $data);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Destroy a direct message
+ *
+ * @param int $id ID of message to destroy
+ * @return Zend_Rest_Client_Result
+ */
+ public function directMessageDestroy($id)
+ {
+ $this->_init();
+ $path = '/direct_messages/destroy/' . $id . '.xml';
+
+ $response = $this->restPost($path);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Create friendship
+ *
+ * @param int|string $id User ID or name of new friend
+ * @return Zend_Rest_Client_Result
+ */
+ public function friendshipCreate($id)
+ {
+ $this->_init();
+ $path = '/friendships/create/' . $id . '.xml';
+
+ $response = $this->restPost($path);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Destroy friendship
+ *
+ * @param int|string $id User ID or name of friend to remove
+ * @return Zend_Rest_Client_Result
+ */
+ public function friendshipDestroy($id)
+ {
+ $this->_init();
+ $path = '/friendships/destroy/' . $id . '.xml';
+
+ $response = $this->restPost($path);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Friendship exists
+ *
+ * @param int|string $id User ID or name of friend to see if they are your friend
+ * @return Zend_Rest_Client_result
+ */
+ public function friendshipExists($id)
+ {
+ $this->_init();
+ $path = '/friendships/exists.xml';
+
+ $data = array(
+ 'user_a' => $this->getUsername(),
+ 'user_b' => $id
+ );
+
+ $response = $this->restGet($path, $data);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Verify Account Credentials
+ *
+ * @return Zend_Rest_Client_Result
+ */
+ public function accountVerifyCredentials()
+ {
+ $this->_init();
+ $response = $this->restGet('/account/verify_credentials.xml');
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * End current session
+ *
+ * @return true
+ */
+ public function accountEndSession()
+ {
+ $this->_init();
+ $this->restGet('/account/end_session');
+ return true;
+ }
+
+ /**
+ * Returns the number of api requests you have left per hour.
+ *
+ * @return Zend_Rest_Client_Result
+ */
+ public function accountRateLimitStatus()
+ {
+ $this->_init();
+ $response = $this->restGet('/account/rate_limit_status.xml');
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Fetch favorites
+ *
+ * $params may contain one or more of the following:
+ * - 'id': Id of a user for whom to fetch favorites
+ * - 'page': Retrieve a different page of resuls
+ *
+ * @param array $params
+ * @return Zend_Rest_Client_Result
+ */
+ public function favoriteFavorites(array $params = array())
+ {
+ $this->_init();
+ $path = '/favorites';
+ $_params = array();
+ foreach ($params as $key => $value) {
+ switch (strtolower($key)) {
+ case 'id':
+ $path .= '/' . $value;
+ break;
+ case 'page':
+ $_params['page'] = (int) $value;
+ break;
+ default:
+ break;
+ }
+ }
+ $path .= '.xml';
+ $response = $this->restGet($path, $_params);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Mark a status as a favorite
+ *
+ * @param int $id Status ID you want to mark as a favorite
+ * @return Zend_Rest_Client_Result
+ */
+ public function favoriteCreate($id)
+ {
+ $this->_init();
+ $path = '/favorites/create/' . (int) $id . '.xml';
+
+ $response = $this->restPost($path);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+
+ /**
+ * Remove a favorite
+ *
+ * @param int $id Status ID you want to de-list as a favorite
+ * @return Zend_Rest_Client_Result
+ */
+ public function favoriteDestroy($id)
+ {
+ $this->_init();
+ $path = '/favorites/destroy/' . (int) $id . '.xml';
+
+ $response = $this->restPost($path);
+ return new Zend_Rest_Client_Result($response->getBody());
+ }
+}