编程语言
首页 > 编程语言> > php-YouTube API v3每次都在要求授权

php-YouTube API v3每次都在要求授权

作者:互联网

我正在使用YouTube api v3,以https://developers.google.com/youtube/v3/code_samples/php#retrieve_my_uploads处的示例检索视频列表

我打开页面,应用程序要求授权.我单击授权的链接,选择我的Gmail帐户,然后得到列表.

问题是,即使几秒钟后我又回到该应用程序,我都必须再次授权该应用程序.

我以为一旦授权该应用程序,您就可以将令牌交换为刷新令牌.

由于文档或在线对其进行的引用非常贫乏,因此在任何地方都可以显示一些代码以获取刷新令牌的代码.

我真的需要一些帮助,以使它正常工作,因为我已经尝试了过去几周,却一无所获.

解决方法:

我的回答很长,但这应该是很大的帮助.对于糟糕的文档,我也遇到了同样的问题,并且我也尝试从我的项目的播放列表中获取视频列表.经过几天的苦苦挣扎之后,API v3才开始为我神奇地工作,这就是我所做的.

首先实际上是获取API密钥.我确定您目前已经进入Google Developers Console,但以防万一,请按以下步骤进行操作:

>在Google Developers Console中创建一个项目
>启用YouTube数据API v3 API
>在“凭据”下,如果您遇到与我相同的问题,则可以创建新的客户端ID,但不能创建API密钥.

这是一个主要问题,因为您需要API密钥才能未经授权进行简单的数据请求,例如,从播放列表中获取视频列表.要获取API密钥,请返回“ API”部分,单击“ YouTube Data API v3”,这是带有加载指示器的屏幕,该指示器永远不会加载任何内容.但是,您可以在此处单击“配额”,它会带您到开发人员控制台的旧版本.

从此旧版本中,您可以转到“ API访问”并添加您的简单API访问密钥(API密钥在此旧版本上起作用,而在新版本的Developers Console上不起作用).我对此可能是错的,但我认为“创建新的服务器密钥…”适用于PHP等服务器端语言,而“创建新的浏览器密钥…”适用于Javascript等客户端语言.还有用于Android和iOS键的按钮,但我认为您不需要这些按钮.无论如何,我在PHP中使用cURL,并且Server密钥对我有用,我将其设置为在我的项目仍在开发中时允许任何引荐来源.

在“简单API访问”下获取服务器应用程序的密钥后,可能需要一段时间才能真正使用该密钥进行任何请求.对我来说,我的脚本没有运行约4-5个小时(我认为Google本周服务器出现了实际问题,这也是为什么我不得不“欺骗”它给我一个API密钥的原因.这可能是因为为什么“凭据”页面不加载任何内容).

现在,使用https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.playlists.list上的工具来帮助创建GET请求.在零件字段中输入“片段”,如有必要,为maxResults输入一个整数.然后从Youtube上的URL获取播放列表的ID.例如,柯南的“无提示玩家”系列是https://www.youtube.com/playlist?list=PLVL8S3lUHf0RqD7TZ6hohWk8Sd3asaqnY,因此ID是PLVL8S3lUHf0RqD7TZ6hohWk8Sd3asaqnY.然后单击执行.

现在,它将向您发送GET请求,例如

GET https://www.googleapis.com/youtube/v3/playlists?part=snippet&id=PLVL8S3lUHf0RqD7TZ6hohWk8Sd3asaqnY&maxResults=20&key={YOUR_API_KEY}

X-JavaScript-User-Agent:  Google APIs Explorer

只需在单词GET之后加上URL,然后将{YOUR_API_KEY}替换为您的API密钥即可.

现在,您可以在cURL请求中使用此URL,如下所示,其中$request_url是上面带有API密钥的URL:

//http://codular.com/curl-with-php
// Get cURL resource
$curl = curl_init();
// Set some options - we are passing in a useragent too here
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $request_url,
    CURLOPT_USERAGENT => 'Codular Sample cURL Request'
));
// Send the request & save response to $resp
$resp = curl_exec($curl);
// Close request to clear up some resources
curl_close($curl);

现在,$resp将包含一个JSON字符串,您可以解析该字符串并获取该播放列表的视频的数据.我将留给您JSON解析,但这就是您获取类似于v2中旧gdata方式的数据的方式.而且没有身份验证:)

它可能会报告错误,表明您的API密钥未获得授权,在这种情况下,您需要等待几个小时.同样,我认为Google最近一直遇到服务器问题,请耐心等待;不是您的脚本不起作用,而是Google;)

我会注意到

$resp = file_get_contents($request_url);

似乎也可以,但是老实说,我不知道cURL和file_get_contents()之间哪种方法“更好”.

标签:google-oauth,youtube-api,php
来源: https://codeday.me/bug/20191121/2050569.html