Zend YouTube API $ yt-> updateEntry不更新视频

时间:2012-03-16 02:14:36

标签: php zend-framework youtube-api

我正在使用Zend框架访问YouTube Data API。下面的功能会循环显示我帐户中特定播放列表中的所有视频,并统计查看次数。现在我只有一个视频。

当视图计数达到一定数量时(为了我的测试目的,有5个视图),我想将视频设置为私有。

我正在使用此代码示例: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 个答案:

答案 0 :(得分:2)

$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);
}