Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Youtube API v2-查询之间的身份验证不同?_Php_Youtube Api_Oauth 2.0_Google Api Php Client - Fatal编程技术网

Php Youtube API v2-查询之间的身份验证不同?

Php Youtube API v2-查询之间的身份验证不同?,php,youtube-api,oauth-2.0,google-api-php-client,Php,Youtube Api,Oauth 2.0,Google Api Php Client,使用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');

使用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身份验证过程。它将更加安全,您将得到一个可以使用的令牌,而不是每次都重复身份验证过程


是否有一种方法可以做到这一点,而不必强制用户手动登录,只需使用他们的凭据?这是一个应该在远程服务器上的命令行中运行的脚本,我不希望重定向。请查看用于web应用的3腿OAuth。实际上,我不相信这能解决问题。我目前正在正确地进行身份验证,因为我在第二次尝试中确实可以访问私有列表。问题是从第一次尝试中获取经过身份验证的用户结果。除非OAuth进程以不同的方式使用getVideoFeed()函数,否则您将获得一个令牌,并将该令牌添加到查询中。它可以重复使用多次,直到过期。对不起,我的意思是说你需要使用2条腿的Oauth,而不是3条腿的Oauth。