0

使用 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() 函数进行身份验证吗?是否故意阻止无法检索视频的个人数据,即使对于视频所有者也是如此?

4

1 回答 1

0

使用 Oauth 身份验证过程。它将更加安全,您最终将获得一个可以使用的令牌,而不是每次都重复身份验证过程。

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

于 2013-05-09T21:00:19.203 回答