Zend YouTube API $ yt-> updateEntry не обновляет видео - PullRequest
1 голос
/ 16 марта 2012

Я использую Zend Framework для доступа к API данных YouTube.Приведенная ниже функция просматривает все видео в определенном плейлисте на моем аккаунте и подсчитывает количество просмотров.Прямо сейчас у меня есть только одно видео.

Когда количество просмотров достигает определенного числа (для моих целей тестирования - 5 просмотров), я бы хотел установить для видео значение Private.

Я использую этот пример кода: https://developers.google.com/youtube/2.0/developers_guide_php#Updating_Video_Information

$yt = new Zend_Gdata_YouTube($httpClient, $applicationId, null, $developerKey);

$playlistVideoFeed = $yt->getPlaylistVideoFeed('http://gdata.youtube.com/feeds/api/playlists/XXXXXX');

function playCount($playlistVideoFeed, $yt) {
      $count = 1;
      $totalViews = 0;
      foreach ($playlistVideoFeed as $videoEntry) {

        // ensure the video entry is not private
        if(!$videoEntry->isVideoPrivate()) {        

          // add this episode's play count to the total view count
          $totalViews = $totalViews + $videoEntry->getVideoViewCount();

          // if views are X and I can edit this video, set it to private
          if($totalViews >= 5) {
            $vidID = $videoEntry->getVideoId();
            $videoEntryToEdit = $yt->getFullVideoEntry($vidID);
                if($videoEntryToEdit->getEditLink() !== null) {
                    $putUrl = $videoEntryToEdit->getEditLink()->getHref(); 
                    $videoEntryToEdit->setVideoPublic(); 
                    $yt->updateEntry($videoEntryToEdit, $putUrl); 
                }
          }

          $count++;
        } 
      }
  return $totalViews;
}

* РЕДАКТИРОВАТЬ **

Часть 1 моего выпускабыла решена путем включения global $yt.Приведенный выше код больше не возвращает следующую ошибку: Fatal error: Call to a member function updateEntry() on a non-object.

Теперь остающаяся проблема: это не делает видео закрытым.Тестирование с примером setVideoDescription также ничего не делает ... без ошибок, без изменений.Также да, у меня более 5 просмотров:).

Есть идеи?

* РЕДАКТИРОВАТЬ v2 **

Решил мою собственную проблему.Я обновил приведенный выше код, чтобы отразить мое решение, на случай, если кто-нибудь еще столкнется с этим.

1 Ответ

2 голосов
/ 16 марта 2012

$yt не входит в область действия функции.Если вам нужно получить доступ к нему внутри, используйте ключевое слово global:

function playCount($playlistVideoFeed) {
     // Access the global $yt
     global $yt;

     $count = 1;
      $totalViews = 0;
      foreach ($playlistVideoFeed as $videoEntry) {

        // ensure the video entry is not private
        if(!$videoEntry->isVideoPrivate()) {        

          // add this episode's play count to the total view count
          $totalViews = $totalViews + $videoEntry->getVideoViewCount();

          // if views are X and I can edit this video, set it to private
          if($totalViews >= 5 && $videoEntry->getEditLink() !== null) {
            $putUrl = $videoEntry->getEditLink()->getHref();
            $videoEntry->setVideoPrivate();
            $yt->updateEntry($videoEntry, $putUrl);
          }

          $count++;
        } 
      }
  return $totalViews;
}

или используйте массив $GLOBALS:

$GLOBALS['yt']->updateEntry($videoEntry, $putUrl);

функция:

function playCount($playlistVideoFeed, $yt) {
  // function body
  // etc...
  $yt->updateEntry($videoEntry, $putUrl);
}

Поскольку вы передаете $yt, вам не нужно отдельно передавать $playlistVideoFeed.Вместо этого вы можете создать его внутри функции:

function playCount($yt) {
  // get the feed inside, since $yt is inside...
  $playlistVideoFeed =  $yt->getPlaylistVideoFeed('http://gdata.youtube.com/feeds/api/playlists/XXXXXX');
  // function body
  // etc...
  $yt->updateEntry($videoEntry, $putUrl);
}
...