我正在使用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 **
解决了我自己的问题。我更新了上面的代码以反映我的解决方案,以防其他人遇到此问题。
答案 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);
}