【问题标题】:Youtube API v2 - Authentication differs between queries?Youtube API v2 - 查询之间的身份验证不同?
【发布时间】:2013-05-04 11:03:16
【问题描述】:

使用 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
            }
        }
    }
}

这会返回正确的结果,但代价是效率、速度和数据传输。由于 Google 每天允许的数据传输量只有这么多,而且视频量很大(并且还在增加),因此这是一个低于标准的解决方案。

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

谢谢!

更新:

我已经和我的雇主讨论过这个问题,OAuth 不是一个选项,2 或 3 条腿。

那么,根本就没有办法对 newVideoQuery() 函数进行身份验证吗?是否故意阻止无法检索视频的个人数据,即使对于视频所有者也是如此?

【问题讨论】:

    标签: php youtube-api oauth-2.0 google-api-php-client


    【解决方案1】:

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

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

    【讨论】:

    • 有没有办法做到这一点,而无需强制用户手动登录,只需使用他们的凭据?这是一个应该在命令行中运行的脚本,在远程服务器上,我不希望重定向。
    • 查看网络应用的 3-legged OAuth。
    • 其实我不相信这能解决问题。我目前正在正确进行身份验证,因为我确实可以在第二次尝试中访问私人列表。问题是从第一次尝试中获得经过身份验证的用户结果。除非 OAuth 进程以不同的方式使用 getVideoFeed() 函数?
    • 确实如此,您将获得一个令牌,然后将该令牌添加到您的查询中。可以重复使用直到过期。
    • 抱歉,我的意思是说你需要使用 2-legged Oauth 而不是 3。
    猜你喜欢
    • 2022-12-10
    • 2020-04-30
    • 2011-01-18
    • 1970-01-01
    • 2022-11-08
    • 2022-01-05
    • 2022-01-04
    • 2012-07-23
    • 1970-01-01
    相关资源
    最近更新 更多