Файловый менеджер - Редактировать - C:/xampp/php/PEAR/Services/YouTube.php
Назад
<?php /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ /** * PHP Client for YouTube API * * PHP versions 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_0.txt. If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to license@php.net so we can mail you a copy immediately. * * * @category Services * @package Services_YouTube * @author Shin Ohno <ganchiku@gmail.com> * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @version 0.2.0 $Id: YouTube.php,v 1.7 2006/10/21 09:31:41 shin Exp $ * @see http://www.youtube.com/dev * @since 0.1 */ /** * Services_YouTube exception class */ require_once 'Services/YouTube/Exception.php'; /** * Services_YouTube * * @package Services_YouTube * @version 0.2.0 * @author Shin Ohno <ganchiku@gmail.com> */ class Services_YouTube { // {{{ class const /** * Version of this package */ const VERSION = '0.2.0'; /** * URL of the YouTube Server */ const URL = 'www.youtube.com'; /** * URI of the XML RPC path */ const XMLRPC_PATH = '/api2_xmlrpc'; /** * URI of the REST path */ const REST_PATH = '/api2_rest'; /** * Max number of the movie list per page */ const VIDEO_PER_PAGE_MAX = 100; // }}} // {{{ class vars /** * Developer ID * * @var string * @access public */ protected $developerId = null; /** * driver * * @var string * @access protected */ protected $driver = 'rest'; /** * Use cache * @var boolean * @access protected */ protected $useCache = false; /** * cache_lite options * * @var array * @access protected */ protected $cacheOptions = array(); /** * format of the xml response * * @var string * @access protected */ protected $responseFormat = 'object'; // }}} // {{{ constructor /** * Constructor * * @param string $developerId Developer ID * @access public * @return void */ public function __construct($developerId, $options = array()) { $this->developerId = $developerId; $availableOptions = array('useCache', 'cacheOptions', 'responseFormat', 'driver'); foreach ($options as $key => $value) { if (in_array($key, $availableOptions)) { $this->$key = $value; } } } // }}} // {{{ setter methods /** * Choose which driver to use(XML-RPC or REST) * * @param string $driver * @access public * @return void * @throws Services_YouTube_Exception */ public function setDriver($driver) { if ($driver == 'xmlrpc' or $driver == 'rest') { $this->driver = $driver; } else { throw new Services_YouTube_Exception('Driver has to be "xmlrpc" or "rest"'); } } /** * Choose which Response Fomat to use(object or array) * * @param string $responseFormat * @access public * @return void * @throws Services_YouTube_Exception */ public function setResponseFormat($responseFormat) { if ($responseFormat == 'object' or $responseFormat == 'array') { $this->responseFormat = $responseFormat; } else { throw new Services_YouTube_Exception('ResponseFormat has to be "object" or "array"'); } } /** * Choose if this uses Cache_Lite. * If this uses Cache_Lite, then set the cacheOptions for Cache_Lite * * @param mixed $useCache * @param array $cacheOptions * @access public * @return void */ public function setUseCache($useCache = false, $cacheOptions = array()) { $this->useCache = $useCache; if ($useCache) { $this->cacheOptions = $cacheOptions; } } // }}} // {{{ users /** * Retrieves the public parts of a user profile. * * @param string $user The user to retrieve the profile for. This is the same as the name that shows up on the YouTube website. * @access public * @return array on success, error object on failure * @throws Services_YouTube_Exception */ public function getProfile($user) { $parameters = array('dev_id' => $this->developerId, 'user' => $user); return $this->sendRequest('youtube.users.', 'get_profile', $parameters); } /** * Lists a user's favorite videos. * * @param string $user The user to retrieve the favorite videos for. This is the same as the name that shows up on the YouTube website * @access public * @return array on success, error object on failure * @throws Services_YouTube_Exception */ public function listFavoriteVideos($user) { $parameters = array('dev_id' => $this->developerId, 'user' => $user); return $this->sendRequest('youtube.users.', 'list_favorite_videos', $parameters); } /** * Lists a user's friends. * * @param string $user The user to retrieve the favorite videos for. This is the same as the name that shows up on the YouTube website * @access public * @return array on success, error object on failure * @throws Services_YouTube_Exception */ public function listFriends($user) { $parameters = array('dev_id' => $this->developerId, 'user' => $user); return $this->sendRequest('youtube.users.', 'list_friends', $parameters); } // }}} // {{{ videos /** * Displays the details for a video. * * @param string $videoId The ID of the video to get details for. This is the ID that's returned by the list * @access public * @return array on success, error object on failure * @throws Services_YouTube_Exception */ public function getDetails($videoId) { $parameters = array('dev_id' => $this->developerId, 'video_id' => $videoId); return $this->sendRequest('youtube.videos.', 'get_details', $parameters); } /** * Lists all videos that have the specified tag. * * @param string $tag the tag to search for * @param string $page the "page" of results you want to retrieve (e.g. 1, 2, 3) (default 1) * @param string $perPage the number of results you want to retrieve per page (default 20, maximum 100) * * @access public * @return array on success, error object on failure * @throws Services_YouTube_Exception */ public function listByTag($tag, $page = 1, $perPage = 20) { if ($perPage > self::VIDEO_PER_PAGE_MAX) { throw new Services_YouTube_Exception('The Maximum of the perPage is ' . self::VIDEO_PER_PAGE_MAX); } $parameters = array('dev_id' => $this->developerId, 'tag' => $tag, 'page' => $page, 'per_page' => $perPage); return $this->sendRequest('youtube.videos.', 'list_by_tag', $parameters); } /** * Lists all videos that were uploaded by the specified user * * @param string $user user whose videos you want to list * @access public * @return array on success, error object on failure * @throws Services_YouTube_Exception */ public function listByUser($user) { $parameters = array('dev_id' => $this->developerId, 'user' => $user); return $this->sendRequest('youtube.videos.', 'list_by_user', $parameters); } /** * Lists the most recent 25 videos that have been featured on the front page of the YouTube site. * * @access public * @return array on success, error object on failure * @throws Services_YouTube_Exception */ public function listFeatured() { $parameters = array('dev_id' => $this->developerId); return $this->sendRequest('youtube.videos.', 'list_featured', $parameters); } // }}} // {{{ protected /** * Send Request either rest or xmlrpc approach, and return simplexml_element of the response. * When $this->usesCaches is true, use Cache_Lite the response xml. * If $this->responseFormat is "array", return array, instead simplexml_element. * * @param string $prefix * @param string $method * @param array $parameters * @access protected * @return SimpleXMLObject or Array on success, error object on failure * @throws Services_YouTube_Exception */ protected function sendRequest($prefix, $method, $parameters) { // Use Cache_Lite if ($this->useCache) { require_once 'Cache/Lite.php'; $cacheID = md5($prefix . $method . serialize($parameters)); $cache = new Cache_Lite($this->cacheOptions); if ($response = $cache->get($cacheID)) { return $this->parseResponse($response); } } if ($this->driver == 'rest') { $response = $this->useRest($prefix . $method, $parameters); } else if ($this->driver == 'xmlrpc') { $response = $this->useXMLRPC($prefix, $method, $parameters); } else { throw new Services_YouTube_Exception('Driver has to be "xmlrpc" or "rest"'); } $data = $this->parseResponse($response); // Use Cache_Lite if ($this->useCache and isset($cache)) { if (!$cache->save($response, $cacheID)) { throw new Services_YouTube_Exception('Can not write cache'); } } return $data; } /** * Use REST approach. * * @param string $method * @param array $parameters * @access protected * @return string * @throws Services_YouTube_Exception */ protected function useRest($method, $parameters) { if (!function_exists('curl_init')) { throw new Services_YouTube_Exception('cannot use curl exntensions'); } if (!$ch = curl_init()) { throw new Services_YouTube_Exception('Unable to setup curl'); } $url = 'http://' . self::URL . self::REST_PATH . '?method=' . $method; foreach ($parameters as $key => $val) { $url .= '&' . $key . '=' . urlencode($val); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_USERAGENT, 'User-Agent: Service_YouTube: ' . self::VERSION); $result = curl_exec($ch); if (($errno = curl_errno($ch)) != 0) { throw new Services_YouTube_Exception('Curl returned non-null errno ' . $errno .':' . curl_error($ch)); } curl_close($ch); return $result; } /** * Use XML-RPC approach. * * @param string $prefix * @param string $method * @param array $parameters * @access protected * @return string * @throws Services_YouTube_Exception */ protected function useXMLRPC($prefix, $method, $parameters) { require_once 'XML/RPC2/Client.php'; $options = array('prefix' => $prefix); try { $client = XML_RPC2_Client::create('http://' . self::URL . self::XMLRPC_PATH, $options); $result = $client->$method($parameters); } catch (XML_RPC2_FaultException $e) { throw new Services_YouTube_Exception('XML_RPC Failed :' . $e->getMessage()); } catch (Exception $e) { throw new Services_YouTube_Exception($e->getMessage()); } return $result; } /** * parseResponse * * @param string $response * @access protected * @return SimpleXMLElement or array of the response data. * @throws Services_YouTube_Exception */ protected function parseResponse($response) { set_error_handler(array('Services_YouTube_Exception', 'errorHandlerCallback'), E_ALL); try { if (!$data = simplexml_load_string($response)) { throw new Services_YouTube_Exception('Parsing Failed. Response string is invalid'); } if ($this->responseFormat == 'array') { $data = $this->forArray($data); } restore_error_handler(); } catch (Services_YouTube_Exception $e) { restore_error_handler(); throw $e; } return $data; } /** * Parse all SimpleXMLElement to array * * @param mixed $object SimpleXMLElement or array * @access protected * @return array */ protected function forArray($object) { $return = array(); if (is_array($object)) { foreach ($object as $key => $value) { $return[$key] = $this->forArray($value); } } else { $vars = get_object_vars($object); if (is_array($vars)) { foreach ($vars as $key => $value) { $return[$key] = ($key && !$value) ? null : $this->forArray($value); } } else { return $object; } } return $return; } // }}} } ?>
| ver. 1.4 |
Github
|
.
| PHP 5.3.8 | Генерация страницы: 0.12 |
proxy
|
phpinfo
|
Настройка