[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/zend/Zend/Gdata/ -> YouTube.php (source)

   1  <?php
   2  
   3  /**
   4   * Zend Framework
   5   *
   6   * LICENSE
   7   *
   8   * This source file is subject to the new BSD license that is bundled
   9   * with this package in the file LICENSE.txt.
  10   * It is also available through the world-wide-web at this URL:
  11   * http://framework.zend.com/license/new-bsd
  12   * If you did not receive a copy of the license and are unable to
  13   * obtain it through the world-wide-web, please send an email
  14   * to [email protected] so we can send you a copy immediately.
  15   *
  16   * @category   Zend
  17   * @package    Zend_Gdata
  18   * @subpackage YouTube
  19   * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  20   * @license    http://framework.zend.com/license/new-bsd     New BSD License
  21   * @version    $Id$
  22   */
  23  
  24  /**
  25   * @see Zend_Gdata_Media
  26   */
  27  require_once 'Zend/Gdata/Media.php';
  28  
  29  /**
  30   * @see Zend_Gdata_YouTube_VideoEntry
  31   */
  32  require_once 'Zend/Gdata/YouTube/VideoEntry.php';
  33  
  34  /**
  35   * @see Zend_Gdata_YouTube_VideoFeed
  36   */
  37  require_once 'Zend/Gdata/YouTube/VideoFeed.php';
  38  
  39  /**
  40   * @see Zend_Gdata_YouTube_CommentFeed
  41   */
  42  require_once 'Zend/Gdata/YouTube/CommentFeed.php';
  43  
  44  /**
  45   * @see Zend_Gdata_YouTube_PlaylistListFeed
  46   */
  47  require_once 'Zend/Gdata/YouTube/PlaylistListFeed.php';
  48  
  49  /**
  50   * @see Zend_Gdata_YouTube_SubscriptionFeed
  51   */
  52  require_once 'Zend/Gdata/YouTube/SubscriptionFeed.php';
  53  
  54  /**
  55   * @see Zend_Gdata_YouTube_ContactFeed
  56   */
  57  require_once 'Zend/Gdata/YouTube/ContactFeed.php';
  58  
  59  /**
  60   * @see Zend_Gdata_YouTube_PlaylistVideoFeed
  61   */
  62  require_once 'Zend/Gdata/YouTube/PlaylistVideoFeed.php';
  63  
  64  /**
  65   * @see Zend_Gdata_YouTube_ActivityFeed
  66   */
  67  require_once 'Zend/Gdata/YouTube/ActivityFeed.php';
  68  
  69  /**
  70   * @see Zend_Gdata_YouTube_InboxFeed
  71   */
  72  require_once 'Zend/Gdata/YouTube/InboxFeed.php';
  73  
  74  
  75  /**
  76   * Service class for interacting with the YouTube Data API.
  77   * @link http://code.google.com/apis/youtube/
  78   *
  79   * @category   Zend
  80   * @package    Zend_Gdata
  81   * @subpackage YouTube
  82   * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  83   * @license    http://framework.zend.com/license/new-bsd     New BSD License
  84   */
  85  class Zend_Gdata_YouTube extends Zend_Gdata_Media
  86  {
  87  
  88      const AUTH_SERVICE_NAME = 'youtube';
  89      const CLIENTLOGIN_URL = 'https://www.google.com/youtube/accounts/ClientLogin';
  90  
  91      const STANDARD_TOP_RATED_URI = 'http://gdata.youtube.com/feeds/api/standardfeeds/top_rated';
  92      const STANDARD_MOST_VIEWED_URI = 'http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed';
  93      const STANDARD_RECENTLY_FEATURED_URI = 'http://gdata.youtube.com/feeds/api/standardfeeds/recently_featured';
  94      const STANDARD_WATCH_ON_MOBILE_URI = 'http://gdata.youtube.com/feeds/api/standardfeeds/watch_on_mobile';
  95  
  96      const STANDARD_TOP_RATED_URI_V2 =
  97          'http://gdata.youtube.com/feeds/api/standardfeeds/top_rated';
  98      const STANDARD_MOST_VIEWED_URI_V2 =
  99          'http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed';
 100      const STANDARD_RECENTLY_FEATURED_URI_V2 =
 101          'http://gdata.youtube.com/feeds/api/standardfeeds/recently_featured';
 102      const STANDARD_WATCH_ON_MOBILE_URI_V2 =
 103          'http://gdata.youtube.com/feeds/api/standardfeeds/watch_on_mobile';
 104  
 105      const USER_URI = 'http://gdata.youtube.com/feeds/api/users';
 106      const VIDEO_URI = 'http://gdata.youtube.com/feeds/api/videos';
 107      const PLAYLIST_REL = 'http://gdata.youtube.com/schemas/2007#playlist';
 108      const USER_UPLOADS_REL = 'http://gdata.youtube.com/schemas/2007#user.uploads';
 109      const USER_PLAYLISTS_REL = 'http://gdata.youtube.com/schemas/2007#user.playlists';
 110      const USER_SUBSCRIPTIONS_REL = 'http://gdata.youtube.com/schemas/2007#user.subscriptions';
 111      const USER_CONTACTS_REL = 'http://gdata.youtube.com/schemas/2007#user.contacts';
 112      const USER_FAVORITES_REL = 'http://gdata.youtube.com/schemas/2007#user.favorites';
 113      const VIDEO_RESPONSES_REL = 'http://gdata.youtube.com/schemas/2007#video.responses';
 114      const VIDEO_RATINGS_REL = 'http://gdata.youtube.com/schemas/2007#video.ratings';
 115      const VIDEO_COMPLAINTS_REL = 'http://gdata.youtube.com/schemas/2007#video.complaints';
 116      const ACTIVITY_FEED_URI = 'http://gdata.youtube.com/feeds/api/events';
 117      const FRIEND_ACTIVITY_FEED_URI =
 118          'http://gdata.youtube.com/feeds/api/users/default/friendsactivity';
 119  
 120      /**
 121       * The URI of the in-reply-to schema for comments in reply to
 122       * other comments.
 123       *
 124       * @var string
 125       */
 126       const IN_REPLY_TO_SCHEME =
 127           'http://gdata.youtube.com/schemas/2007#in-reply-to';
 128  
 129      /**
 130       * The URI of the inbox feed for the currently authenticated user.
 131       *
 132       * @var string
 133       */
 134      const INBOX_FEED_URI =
 135          'http://gdata.youtube.com/feeds/api/users/default/inbox';
 136  
 137      /**
 138       * The maximum number of users for which activity can be requested for,
 139       * as enforced by the API.
 140       *
 141       * @var integer
 142       */
 143      const ACTIVITY_FEED_MAX_USERS = 20;
 144  
 145      /**
 146       * The suffix for a feed of favorites.
 147       *
 148       * @var string
 149       */
 150      const FAVORITES_URI_SUFFIX = 'favorites';
 151  
 152      /**
 153       * The suffix for the user's upload feed.
 154       *
 155       * @var string
 156       */
 157      const UPLOADS_URI_SUFFIX = 'uploads';
 158  
 159      /**
 160       * The suffix for a feed of video responses.
 161       *
 162       * @var string
 163       */
 164      const RESPONSES_URI_SUFFIX = 'responses';
 165  
 166      /**
 167       * The suffix for a feed of related videos.
 168       *
 169       * @var string
 170       */
 171      const RELATED_URI_SUFFIX = 'related';
 172  
 173      /**
 174       * The suffix for a feed of messages (inbox entries).
 175       *
 176       * @var string
 177       */
 178      const INBOX_URI_SUFFIX = 'inbox';
 179  
 180      /**
 181       * Namespaces used for Zend_Gdata_YouTube
 182       *
 183       * @var array
 184       */
 185      public static $namespaces = array(
 186          array('yt', 'http://gdata.youtube.com/schemas/2007', 1, 0),
 187          array('georss', 'http://www.georss.org/georss', 1, 0),
 188          array('gml', 'http://www.opengis.net/gml', 1, 0),
 189          array('media', 'http://search.yahoo.com/mrss/', 1, 0)
 190      );
 191  
 192      /**
 193       * Create Zend_Gdata_YouTube object
 194       *
 195       * @param Zend_Http_Client $client (optional) The HTTP client to use when
 196       *          when communicating with the Google servers.
 197       * @param string $applicationId The identity of the app in the form of
 198       *        Company-AppName-Version
 199       * @param string $clientId The clientId issued by the YouTube dashboard
 200       * @param string $developerKey The developerKey issued by the YouTube dashboard
 201       */
 202      public function __construct($client = null,
 203          $applicationId = 'MyCompany-MyApp-1.0', $clientId = null,
 204          $developerKey = null)
 205      {
 206          $this->registerPackage('Zend_Gdata_YouTube');
 207          $this->registerPackage('Zend_Gdata_YouTube_Extension');
 208          $this->registerPackage('Zend_Gdata_Media');
 209          $this->registerPackage('Zend_Gdata_Media_Extension');
 210  
 211          // NOTE This constructor no longer calls the parent constructor
 212          $this->setHttpClient($client, $applicationId, $clientId, $developerKey);
 213      }
 214  
 215      /**
 216       * Set the Zend_Http_Client object used for communication
 217       *
 218       * @param Zend_Http_Client $client The client to use for communication
 219       * @throws Zend_Gdata_App_HttpException
 220       * @return Zend_Gdata_App Provides a fluent interface
 221       */
 222      public function setHttpClient($client,
 223          $applicationId = 'MyCompany-MyApp-1.0', $clientId = null,
 224          $developerKey = null)
 225      {
 226          if ($client === null) {
 227              $client = new Zend_Http_Client();
 228          }
 229          if (!$client instanceof Zend_Http_Client) {
 230              require_once 'Zend/Gdata/App/HttpException.php';
 231              throw new Zend_Gdata_App_HttpException(
 232                  'Argument is not an instance of Zend_Http_Client.');
 233          }
 234  
 235          if ($clientId != null) {
 236              $client->setHeaders('X-GData-Client', $clientId);
 237          }
 238  
 239          if ($developerKey != null) {
 240              $client->setHeaders('X-GData-Key', 'key='. $developerKey);
 241          }
 242  
 243          return parent::setHttpClient($client, $applicationId);
 244      }
 245  
 246      /**
 247       * Retrieves a feed of videos.
 248       *
 249       * @param mixed $location (optional) The URL to query or a
 250       *         Zend_Gdata_Query object from which a URL can be determined
 251       * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
 252       *         specified URL.
 253       */
 254      public function getVideoFeed($location = null)
 255      {
 256          if ($location == null) {
 257              $uri = self::VIDEO_URI;
 258          } else if ($location instanceof Zend_Gdata_Query) {
 259              $uri = $location->getQueryUrl();
 260          } else {
 261              $uri = $location;
 262          }
 263          return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
 264      }
 265  
 266      /**
 267       * Retrieves a specific video entry.
 268       *
 269       * @param mixed $videoId The ID of the video to retrieve.
 270       * @param mixed $location (optional) The URL to query or a
 271       *         Zend_Gdata_Query object from which a URL can be determined.
 272       * @param boolean $fullEntry (optional) Retrieve the full metadata for the
 273       *         entry. Only possible if entry belongs to currently authenticated
 274       *         user. An exception will be thrown otherwise.
 275       * @throws Zend_Gdata_App_HttpException
 276       * @return Zend_Gdata_YouTube_VideoEntry The video entry found at the
 277       *         specified URL.
 278       */
 279      public function getVideoEntry($videoId = null, $location = null,
 280          $fullEntry = false)
 281      {
 282          if ($videoId !== null) {
 283              if ($fullEntry) {
 284                  return $this->getFullVideoEntry($videoId);
 285              } else {
 286                  $uri = self::VIDEO_URI . "/" . $videoId;
 287              }
 288          } else if ($location instanceof Zend_Gdata_Query) {
 289              $uri = $location->getQueryUrl();
 290          } else {
 291              $uri = $location;
 292          }
 293          return parent::getEntry($uri, 'Zend_Gdata_YouTube_VideoEntry');
 294      }
 295  
 296      /**
 297       * Retrieves a video entry from the user's upload feed.
 298       *
 299       * @param mixed $videoID The ID of the video to retrieve.
 300       * @throws Zend_Gdata_App_HttpException
 301       * @return Zend_Gdata_YouTube_VideoEntry|null The video entry to be
 302       *          retrieved, or null if it was not found or the user requesting it
 303       *          did not have the appropriate permissions.
 304       */
 305      public function getFullVideoEntry($videoId)
 306      {
 307          $uri = self::USER_URI . "/default/" .
 308              self::UPLOADS_URI_SUFFIX . "/$videoId";
 309          return parent::getEntry($uri, 'Zend_Gdata_YouTube_VideoEntry');
 310      }
 311  
 312      /**
 313       * Retrieves a feed of videos related to the specified video ID.
 314       *
 315       * @param string $videoId The videoId of interest
 316       * @param mixed $location (optional) The URL to query or a
 317       *         Zend_Gdata_Query object from which a URL can be determined
 318       * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
 319       *         specified URL.
 320       */
 321      public function getRelatedVideoFeed($videoId = null, $location = null)
 322      {
 323          if ($videoId !== null) {
 324              $uri = self::VIDEO_URI . "/" . $videoId . "/" .
 325                  self::RELATED_URI_SUFFIX;
 326          } else if ($location instanceof Zend_Gdata_Query) {
 327              $uri = $location->getQueryUrl();
 328          } else {
 329              $uri = $location;
 330          }
 331          return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
 332      }
 333  
 334      /**
 335       * Retrieves a feed of video responses related to the specified video ID.
 336       *
 337       * @param string $videoId The videoId of interest
 338       * @param mixed $location (optional) The URL to query or a
 339       *         Zend_Gdata_Query object from which a URL can be determined
 340       * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
 341       *         specified URL.
 342       */
 343      public function getVideoResponseFeed($videoId = null, $location = null)
 344      {
 345          if ($videoId !== null) {
 346              $uri = self::VIDEO_URI . "/" . $videoId . "/" .
 347                  self::RESPONSES_URI_SUFFIX;
 348          } else if ($location instanceof Zend_Gdata_Query) {
 349              $uri = $location->getQueryUrl();
 350          } else {
 351              $uri = $location;
 352          }
 353          return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
 354      }
 355  
 356      /**
 357       * Retrieves a feed of comments related to the specified video ID.
 358       *
 359       * @param string $videoId The videoId of interest
 360       * @param mixed $location (optional) The URL to query or a
 361       *         Zend_Gdata_Query object from which a URL can be determined
 362       * @return Zend_Gdata_YouTube_CommentFeed The feed of videos found at the
 363       *         specified URL.
 364       */
 365      public function getVideoCommentFeed($videoId = null, $location = null)
 366      {
 367          if ($videoId !== null) {
 368              $uri = self::VIDEO_URI . "/" . $videoId . "/comments";
 369          } else if ($location instanceof Zend_Gdata_Query) {
 370              $uri = $location->getQueryUrl();
 371          } else {
 372              $uri = $location;
 373          }
 374          return parent::getFeed($uri, 'Zend_Gdata_YouTube_CommentFeed');
 375      }
 376  
 377      /**
 378       * Retrieves a feed of comments related to the specified video ID.
 379       *
 380       * @param mixed $location (optional) The URL to query or a
 381       *         Zend_Gdata_Query object from which a URL can be determined
 382       * @return Zend_Gdata_YouTube_CommentFeed The feed of videos found at the
 383       *         specified URL.
 384       */
 385      public function getTopRatedVideoFeed($location = null)
 386      {
 387          $standardFeedUri = self::STANDARD_TOP_RATED_URI;
 388  
 389          if ($this->getMajorProtocolVersion() == 2) {
 390              $standardFeedUri = self::STANDARD_TOP_RATED_URI_V2;
 391          }
 392  
 393          if ($location == null) {
 394              $uri = $standardFeedUri;
 395          } else if ($location instanceof Zend_Gdata_Query) {
 396              if ($location instanceof Zend_Gdata_YouTube_VideoQuery) {
 397                  if (!isset($location->url)) {
 398                      $location->setFeedType('top rated');
 399                  }
 400              }
 401              $uri = $location->getQueryUrl();
 402          } else {
 403              $uri = $location;
 404          }
 405          return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
 406      }
 407  
 408  
 409      /**
 410       * Retrieves a feed of the most viewed videos.
 411       *
 412       * @param mixed $location (optional) The URL to query or a
 413       *         Zend_Gdata_Query object from which a URL can be determined
 414       * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
 415       *         specified URL.
 416       */
 417      public function getMostViewedVideoFeed($location = null)
 418      {
 419          $standardFeedUri = self::STANDARD_MOST_VIEWED_URI;
 420  
 421          if ($this->getMajorProtocolVersion() == 2) {
 422              $standardFeedUri = self::STANDARD_MOST_VIEWED_URI_V2;
 423          }
 424  
 425          if ($location == null) {
 426              $uri = $standardFeedUri;
 427          } else if ($location instanceof Zend_Gdata_Query) {
 428              if ($location instanceof Zend_Gdata_YouTube_VideoQuery) {
 429                  if (!isset($location->url)) {
 430                      $location->setFeedType('most viewed');
 431                  }
 432              }
 433              $uri = $location->getQueryUrl();
 434          } else {
 435              $uri = $location;
 436          }
 437          return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
 438      }
 439  
 440      /**
 441       * Retrieves a feed of recently featured videos.
 442       *
 443       * @param mixed $location (optional) The URL to query or a
 444       *         Zend_Gdata_Query object from which a URL can be determined
 445       * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
 446       *         specified URL.
 447       */
 448      public function getRecentlyFeaturedVideoFeed($location = null)
 449      {
 450          $standardFeedUri = self::STANDARD_RECENTLY_FEATURED_URI;
 451  
 452          if ($this->getMajorProtocolVersion() == 2) {
 453              $standardFeedUri = self::STANDARD_RECENTLY_FEATURED_URI_V2;
 454          }
 455  
 456          if ($location == null) {
 457              $uri = $standardFeedUri;
 458          } else if ($location instanceof Zend_Gdata_Query) {
 459              if ($location instanceof Zend_Gdata_YouTube_VideoQuery) {
 460                  if (!isset($location->url)) {
 461                      $location->setFeedType('recently featured');
 462                  }
 463              }
 464              $uri = $location->getQueryUrl();
 465          } else {
 466              $uri = $location;
 467          }
 468          return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
 469      }
 470  
 471      /**
 472       * Retrieves a feed of videos recently featured for mobile devices.
 473       * These videos will have RTSP links in the $entry->mediaGroup->content
 474       *
 475       * @param mixed $location (optional) The URL to query or a
 476       *         Zend_Gdata_Query object from which a URL can be determined
 477       * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
 478       *         specified URL.
 479       */
 480      public function getWatchOnMobileVideoFeed($location = null)
 481      {
 482          $standardFeedUri = self::STANDARD_WATCH_ON_MOBILE_URI;
 483  
 484          if ($this->getMajorProtocolVersion() == 2) {
 485              $standardFeedUri = self::STANDARD_WATCH_ON_MOBILE_URI_V2;
 486          }
 487  
 488          if ($location == null) {
 489              $uri = $standardFeedUri;
 490          } else if ($location instanceof Zend_Gdata_Query) {
 491              if ($location instanceof Zend_Gdata_YouTube_VideoQuery) {
 492                  if (!isset($location->url)) {
 493                      $location->setFeedType('watch on mobile');
 494                  }
 495              }
 496              $uri = $location->getQueryUrl();
 497          } else {
 498              $uri = $location;
 499          }
 500          return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
 501      }
 502  
 503      /**
 504       * Retrieves a feed which lists a user's playlist
 505       *
 506       * @param string $user (optional) The username of interest
 507       * @param mixed $location (optional) The URL to query or a
 508       *         Zend_Gdata_Query object from which a URL can be determined
 509       * @return Zend_Gdata_YouTube_PlaylistListFeed The feed of playlists
 510       */
 511      public function getPlaylistListFeed($user = null, $location = null)
 512      {
 513          if ($user !== null) {
 514              $uri = self::USER_URI . '/' . $user . '/playlists';
 515          } else if ($location instanceof Zend_Gdata_Query) {
 516              $uri = $location->getQueryUrl();
 517          } else {
 518              $uri = $location;
 519          }
 520          return parent::getFeed($uri, 'Zend_Gdata_YouTube_PlaylistListFeed');
 521      }
 522  
 523      /**
 524       * Retrieves a feed of videos in a particular playlist
 525       *
 526       * @param mixed $location (optional) The URL to query or a
 527       *         Zend_Gdata_Query object from which a URL can be determined
 528       * @return Zend_Gdata_YouTube_PlaylistVideoFeed The feed of videos found at
 529       *         the specified URL.
 530       */
 531      public function getPlaylistVideoFeed($location)
 532      {
 533          if ($location instanceof Zend_Gdata_Query) {
 534              $uri = $location->getQueryUrl();
 535          } else {
 536              $uri = $location;
 537          }
 538          return parent::getFeed($uri, 'Zend_Gdata_YouTube_PlaylistVideoFeed');
 539      }
 540  
 541      /**
 542       * Retrieves a feed of a user's subscriptions
 543       *
 544       * @param string $user (optional) The username of interest
 545       * @param mixed $location (optional) The URL to query or a
 546       *         Zend_Gdata_Query object from which a URL can be determined
 547       * @return Zend_Gdata_YouTube_SubscriptionListFeed The feed of subscriptions
 548       */
 549      public function getSubscriptionFeed($user = null, $location = null)
 550      {
 551          if ($user !== null) {
 552              $uri = self::USER_URI . '/' . $user . '/subscriptions';
 553          } else if ($location instanceof Zend_Gdata_Query) {
 554              $uri = $location->getQueryUrl();
 555          } else {
 556              $uri = $location;
 557          }
 558          return parent::getFeed($uri, 'Zend_Gdata_YouTube_SubscriptionFeed');
 559      }
 560  
 561      /**
 562       * Retrieves a feed of a user's contacts
 563       *
 564       * @param string $user (optional) The username of interest
 565       * @param mixed $location (optional) The URL to query or a
 566       *         Zend_Gdata_Query object from which a URL can be determined
 567       * @return Zend_Gdata_YouTube_ContactFeed The feed of contacts
 568       */
 569      public function getContactFeed($user = null, $location = null)
 570      {
 571          if ($user !== null) {
 572              $uri = self::USER_URI . '/' . $user . '/contacts';
 573          } else if ($location instanceof Zend_Gdata_Query) {
 574              $uri = $location->getQueryUrl();
 575          } else {
 576              $uri = $location;
 577          }
 578          return parent::getFeed($uri, 'Zend_Gdata_YouTube_ContactFeed');
 579      }
 580  
 581      /**
 582       * Retrieves a user's uploads
 583       *
 584       * @param string $user (optional) The username of interest
 585       * @param mixed $location (optional) The URL to query or a
 586       *         Zend_Gdata_Query object from which a URL can be determined
 587       * @return Zend_Gdata_YouTube_VideoFeed The videos uploaded by the user
 588       */
 589      public function getUserUploads($user = null, $location = null)
 590      {
 591          if ($user !== null) {
 592              $uri = self::USER_URI . '/' . $user . '/' .
 593                     self::UPLOADS_URI_SUFFIX;
 594          } else if ($location instanceof Zend_Gdata_Query) {
 595              $uri = $location->getQueryUrl();
 596          } else {
 597              $uri = $location;
 598          }
 599          return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
 600      }
 601  
 602      /**
 603       * Retrieves a user's favorites
 604       *
 605       * @param string $user (optional) The username of interest
 606       * @param mixed $location (optional) The URL to query or a
 607       *         Zend_Gdata_Query object from which a URL can be determined
 608       * @return Zend_Gdata_YouTube_VideoFeed The videos favorited by the user
 609       */
 610      public function getUserFavorites($user = null, $location = null)
 611      {
 612          if ($user !== null) {
 613              $uri = self::USER_URI . '/' . $user . '/' .
 614                     self::FAVORITES_URI_SUFFIX;
 615          } else if ($location instanceof Zend_Gdata_Query) {
 616              $uri = $location->getQueryUrl();
 617          } else {
 618              $uri = $location;
 619          }
 620          return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
 621      }
 622  
 623      /**
 624       * Retrieves a user's profile as an entry
 625       *
 626       * @param string $user (optional) The username of interest
 627       * @param mixed $location (optional) The URL to query or a
 628       *         Zend_Gdata_Query object from which a URL can be determined
 629       * @return Zend_Gdata_YouTube_UserProfileEntry The user profile entry
 630       */
 631      public function getUserProfile($user = null, $location = null)
 632      {
 633          if ($user !== null) {
 634              $uri = self::USER_URI . '/' . $user;
 635          } else if ($location instanceof Zend_Gdata_Query) {
 636              $uri = $location->getQueryUrl();
 637          } else {
 638              $uri = $location;
 639          }
 640          return parent::getEntry($uri, 'Zend_Gdata_YouTube_UserProfileEntry');
 641      }
 642  
 643      /**
 644       * Helper function for parsing a YouTube token response
 645       *
 646       * @param string $response The service response
 647       * @throws Zend_Gdata_App_Exception
 648       * @return array An array containing the token and URL
 649       */
 650      public static function parseFormUploadTokenResponse($response)
 651      {
 652          // Load the feed as an XML DOMDocument object
 653          @ini_set('track_errors', 1);
 654          $doc = new DOMDocument();
 655          $success = @$doc->loadXML($response);
 656          @ini_restore('track_errors');
 657  
 658          if (!$success) {
 659              require_once 'Zend/Gdata/App/Exception.php';
 660              throw new Zend_Gdata_App_Exception(
 661                  "Zend_Gdata_YouTube::parseFormUploadTokenResponse - " .
 662                  "DOMDocument cannot parse XML: $php_errormsg");
 663          }
 664          $responseElement = $doc->getElementsByTagName('response')->item(0);
 665  
 666          $urlText = null;
 667          $tokenText = null;
 668          if ($responseElement != null) {
 669              $urlElement =
 670                  $responseElement->getElementsByTagName('url')->item(0);
 671              $tokenElement =
 672                  $responseElement->getElementsByTagName('token')->item(0);
 673  
 674              if ($urlElement && $urlElement->hasChildNodes() &&
 675                  $tokenElement && $tokenElement->hasChildNodes()) {
 676  
 677                  $urlText = $urlElement->firstChild->nodeValue;
 678                  $tokenText = $tokenElement->firstChild->nodeValue;
 679              }
 680          }
 681  
 682          if ($tokenText != null && $urlText != null) {
 683              return array('token' => $tokenText, 'url' => $urlText);
 684          } else {
 685              require_once 'Zend/Gdata/App/Exception.php';
 686              throw new Zend_Gdata_App_Exception(
 687                  'Form upload token not found in response');
 688          }
 689      }
 690  
 691      /**
 692       * Retrieves a YouTube token
 693       *
 694       * @param Zend_Gdata_YouTube_VideoEntry $videoEntry The video entry
 695       * @param string $url The location as a string URL
 696       * @throws Zend_Gdata_App_Exception
 697       * @return array An array containing a token and URL
 698       */
 699      public function getFormUploadToken($videoEntry,
 700          $url='http://gdata.youtube.com/action/GetUploadToken')
 701      {
 702          if ($url != null && is_string($url)) {
 703              // $response is a Zend_Http_response object
 704              $response = $this->post($videoEntry, $url);
 705              return self::parseFormUploadTokenResponse($response->getBody());
 706          } else {
 707              require_once 'Zend/Gdata/App/Exception.php';
 708              throw new Zend_Gdata_App_Exception(
 709                  'Url must be provided as a string URL');
 710          }
 711      }
 712  
 713      /**
 714       * Retrieves the activity feed for users
 715       *
 716       * @param mixed $usernames A string identifying the usernames for which to
 717       *              retrieve activity for. This can also be a Zend_Gdata_Query
 718       *              object from which a URL can be determined.
 719       * @throws Zend_Gdata_App_VersionException if using version less than 2.
 720       * @return Zend_Gdata_YouTube_ActivityFeed
 721       */
 722      public function getActivityForUser($username)
 723      {
 724          if ($this->getMajorProtocolVersion() == 1) {
 725              require_once 'Zend/Gdata/App/VersionException.php';
 726              throw new Zend_Gdata_App_VersionException('User activity feeds ' .
 727                  'are not available in API version 1.');
 728          }
 729  
 730          $uri = null;
 731          if ($username instanceof Zend_Gdata_Query) {
 732              $uri = $username->getQueryUrl();
 733          } else {
 734              if (count(explode(',', $username)) >
 735                  self::ACTIVITY_FEED_MAX_USERS) {
 736                  require_once 'Zend/Gdata/App/InvalidArgumentException.php';
 737                  throw new Zend_Gdata_App_InvalidArgumentException(
 738                      'Activity feed can only retrieve for activity for up to ' .
 739                      self::ACTIVITY_FEED_MAX_USERS .  ' users per request');
 740              }
 741              $uri = self::ACTIVITY_FEED_URI . '?author=' . $username;
 742          }
 743  
 744          return parent::getFeed($uri, 'Zend_Gdata_YouTube_ActivityFeed');
 745      }
 746  
 747      /**
 748       * Retrieve the activity of the currently authenticated users friend.
 749       *
 750       * @throws Zend_Gdata_App_Exception if not logged in.
 751       * @return Zend_Gdata_YouTube_ActivityFeed
 752       */
 753      public function getFriendActivityForCurrentUser()
 754      {
 755          if (!$this->isAuthenticated()) {
 756              require_once 'Zend/Gdata/App/Exception.php';
 757              throw new Zend_Gdata_App_Exception('You must be authenticated to ' .
 758                  'use the getFriendActivityForCurrentUser function in Zend_' .
 759                  'Gdata_YouTube.');
 760          }
 761          return parent::getFeed(self::FRIEND_ACTIVITY_FEED_URI,
 762              'Zend_Gdata_YouTube_ActivityFeed');
 763      }
 764  
 765      /**
 766       * Retrieve a feed of messages in the currently authenticated user's inbox.
 767       *
 768       * @throws Zend_Gdata_App_Exception if not logged in.
 769       * @return Zend_Gdata_YouTube_InboxFeed|null
 770       */
 771      public function getInboxFeedForCurrentUser()
 772      {
 773          if (!$this->isAuthenticated()) {
 774              require_once 'Zend/Gdata/App/Exception.php';
 775              throw new Zend_Gdata_App_Exception('You must be authenticated to ' .
 776                  'use the getInboxFeedForCurrentUser function in Zend_' .
 777                  'Gdata_YouTube.');
 778          }
 779  
 780          return parent::getFeed(self::INBOX_FEED_URI,
 781              'Zend_Gdata_YouTube_InboxFeed');
 782      }
 783  
 784      /**
 785       * Send a video message.
 786       *
 787       * Note: Either a Zend_Gdata_YouTube_VideoEntry or a valid video ID must
 788       * be provided.
 789       *
 790       * @param string $body The body of the message
 791       * @param Zend_Gdata_YouTube_VideoEntry (optional) The video entry to send
 792       * @param string $videoId The id of the video to send
 793       * @param string $recipientUserName The username of the recipient
 794       * @throws Zend_Gdata_App_InvalidArgumentException if no valid
 795       *         Zend_Gdata_YouTube_VideoEntry or videoId were provided
 796       * @return Zend_Gdata_YouTube_InboxEntry|null The
 797       *         Zend_Gdata_YouTube_Inbox_Entry representing the sent message.
 798       *
 799       */
 800      public function sendVideoMessage($body, $videoEntry = null,
 801          $videoId = null, $recipientUserName)
 802      {
 803          if (!$videoId && !$videoEntry) {
 804              require_once 'Zend/Gdata/App/InvalidArgumentException.php';
 805              throw new Zend_Gdata_App_InvalidArgumentException(
 806                  'Expecting either a valid videoID or a videoEntry object in ' .
 807                  'Zend_Gdata_YouTube->sendVideoMessage().');
 808          }
 809  
 810          $messageEntry = new Zend_Gdata_YouTube_InboxEntry();
 811  
 812          if ($this->getMajorProtocolVersion() == null ||
 813              $this->getMajorProtocolVersion() == 1) {
 814  
 815              if (!$videoId) {
 816                  $videoId = $videoEntry->getVideoId();
 817              } elseif (strlen($videoId) < 12) {
 818                  //Append the full URI
 819                  $videoId = self::VIDEO_URI . '/' . $videoId;
 820              }
 821  
 822              $messageEntry->setId($this->newId($videoId));
 823              // TODO there seems to be a bug where v1 inbox entries dont
 824              // retain their description...
 825              $messageEntry->setDescription(
 826                  new Zend_Gdata_YouTube_Extension_Description($body));
 827  
 828          } else {
 829              if (!$videoId) {
 830                  $videoId = $videoEntry->getVideoId();
 831                  $videoId = substr($videoId, strrpos($videoId, ':'));
 832              }
 833              $messageEntry->setId($this->newId($videoId));
 834              $messageEntry->setSummary($this->newSummary($body));
 835          }
 836  
 837          $insertUrl = 'http://gdata.youtube.com/feeds/api/users/' .
 838              $recipientUserName . '/inbox';
 839          $response = $this->insertEntry($messageEntry, $insertUrl,
 840              'Zend_Gdata_YouTube_InboxEntry');
 841          return $response;
 842      }
 843  
 844      /**
 845       * Post a comment in reply to an existing comment
 846       *
 847       * @param $commentEntry Zend_Gdata_YouTube_CommentEntry The comment entry
 848       *        to reply to
 849       * @param $commentText string The text of the comment to post
 850       * @return A Zend_Gdata_YouTube_CommentEntry representing the posted
 851       *         comment
 852       */
 853      public function replyToCommentEntry($commentEntry, $commentText)
 854      {
 855          $newComment = $this->newCommentEntry();
 856          $newComment->content = $this->newContent()->setText($commentText);
 857          $commentId = $commentEntry->getId();
 858          $commentIdArray = explode(':', $commentId);
 859  
 860          // create a new link element
 861          $inReplyToLinkHref = self::VIDEO_URI . '/' . $commentIdArray[3] .
 862              '/comments/' . $commentIdArray[5];
 863          $inReplyToLink = $this->newLink($inReplyToLinkHref,
 864              self::IN_REPLY_TO_SCHEME, $type="application/atom+xml");
 865          $links = $newComment->getLink();
 866          $links[] = $inReplyToLink;
 867          $newComment->setLink($links);
 868          $commentFeedPostUrl = self::VIDEO_URI . '/' . $commentIdArray[3] .
 869              '/comments';
 870          return $this->insertEntry($newComment,
 871              $commentFeedPostUrl, 'Zend_Gdata_YouTube_CommentEntry');
 872      }
 873  
 874  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1