Youtube API v2 -不同查询的身份验证不同


Youtube API v2 - Authentication differs between queries?

使用Youtube API,我试图编写一个脚本,列出用户拥有的所有未加字幕的视频,无论是公共的,私人的还是未列出的。首先,我使用用户的凭证进行身份验证:

require_once 'Zend/Loader.php'; // the Zend dir must be in your include_path
Zend_Loader::loadClass('Zend_Gdata_YouTube');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
try {
    $httpClient = Zend_Gdata_ClientLogin::getHttpClient(
    $username = $Youtube_Login["Username"],
    $password = $Youtube_Login["Password"],
    $service = 'youtube',
    $client = null,
    $source = 'NAME', // a short string identifying your application
    $loginToken = null,
    $loginCaptcha = null,
    $authenticationURL);
    $yt = new Zend_Gdata_YouTube($httpClient, $applicationId, $clientId, $developerKey);
} catch ( Exception $e ) {
    $err[] = $e->getMessage();
    return false;
}

然后,我尝试用两种方式返回一个列表。我首先尝试使用查询从数据库中提取没有字幕的视频:

try{
    $query = $yt->newVideoQuery();
    $query->setParam('caption', 'false');
    $query->setParam('author', $Youtube_Login["Username"]);
    $query->orderBy = 'viewCount';
    $videoFeed = $yt->getVideoFeed($query);
} catch (Zend_Gdata_App_Exception $e) {
    $err[] = $e->getMessage();
    end_script(false);
}

然而,结果中缺少私人和未列出的视频。因此,对于第二次尝试,我使用getUserUploads()函数拉出所有视频,然后检查它们是否缺少字幕:

try{
    $videoFeed = $yt->getuserUploads($Youtube_Login["Username"]);
} catch (Zend_Gdata_App_Exception $e) {
    $err[] = $e->getMessage();
    end_script(false);
}
foreach ($videoFeed as $videoEntry) {
    foreach ($videoEntry->link as $link) {
        if($link->rel == "http://gdata.youtube.com/schemas/2007#video.captionTracks"){
            if($link->extensionAttributes['http://gdata.youtube.com/schemas/2007:hasEntries']['value'] == 'false'){
                // Video has no caption entries, print entry info
            }
        }
    }
}

返回正确的结果,但以效率、速度和数据传输为代价。因为谷歌每天只允许这么多的数据传输,而且视频的数量很大(而且还在增加),所以这是一个不合格的解决方案。

是否有任何方法可以正确验证第一次尝试,以便找到未发布和未列出的视频,我的客户也需要列出?或者,另一种完全不需要下载和遍历整个视频列表的方式?

谢谢!

更新:

我已经和我的雇主讨论过了,OAuth不是一个选择,2条腿或3条腿。

那么,是否完全没有办法对newVideoQuery()函数进行身份验证?是否有故意阻碍无法检索视频的个人数据,即使是视频所有者?

使用Oauth认证过程。这样会更安全,你最终会得到一个可以使用的令牌,而不是每次都重复验证过程。

https://developers.google.com/youtube/2.0/developers_guide_protocol_oauth2