我使用YouTube api v3使用https://developers.google.com/youtube/v3/code_samples/php#retrieve_my_uploads上的示例检索视频列表
我打开页面,应用程序要求授权。我点击要授权的链接,选择我的Gmail帐户,然后获取列表。
问题是,即使只是几秒钟后我又回到应用程序,我必须再次授权该应用程序。
我认为一旦应用程序获得授权,您就可以交换令牌以获得刷新令牌。
是否有任何地方显示某些代码如何获取刷新令牌,因为文档或在线对它的任何引用都很差。
我真的需要一些帮助才能让这项工作得以实现,因为我在过去的几周里一直在尝试并且无处可去。
答案 0 :(得分:3)
我有一个冗长的答案,但它应该是一个很大的帮助。我的文档很差,我也有同样的问题,我也试图从我的项目的播放列表中获取视频列表。在过去几天挣扎之后,API v3神奇地开始为我工作,这就是我所做的。
首先是获得API密钥。我相信你现在已经加入了Google Developers Console,但以下是这里要做的事情:
这是一个主要问题,因为您需要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。例如,柯南的“Clueless Gamer”系列是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一词后面加上网址,然后用您的API密钥替换{YOUR_API_KEY}。
现在您可以在cURL请求中使用此网址,例如, $ request_url 是上面带有API密钥的网址:
//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密钥未获得授权的错误,在这种情况下,您需要等待几个小时。我再次认为谷歌最近一直有真正的服务器问题,所以请耐心等待;这不是你的脚本不起作用,它是谷歌;)
我会注意到
$resp = file_get_contents($request_url);
似乎也有效,但老实说我不知道哪个方法在cURL和file_get_contents()之间“更好”。
答案 1 :(得分:0)
我花了很多时间来解决这个问题,因为我找不到任何关于如何轻松做到这一点的例子。
事实证明,我需要创建一个POST请求来获取访问代码并刷新令牌,这是通过使用Curlfrom命令行实现的
url --data "code=AUHROISATON_CODE&client_id=CLIENT_ID.apps.googleusercontent.com&client_secret=CLINET_SECRET&redirect_uri=http://www.example.com&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token
发现一些错误,例如'Missing grant_type','无效代码'后,它现在可以正常工作。
我撤销了对该应用的访问权限,运行了以下GET请求(取自https://developers.google.com/accounts/docs/OAuth2WebServer#formingtheurl)以获取代码,并且能够使用上述Curl语句中的代码
https://accounts.google.com/o/oauth2/auth? 范围= https://www.googleapis.com/auth/youtube& 状态= security_token%3D138r5719ru3e1%26url%3Dhttps://oa2cb.example.com/myHome& REDIRECT_URI = HTTPS%3A%2F%2Foauth2-login-demo.appspot.com%2Fcode&安培;, RESPONSE_TYPE =代码&安培; CLIENT_ID = 812741506391.apps.googleusercontent.com&安培; approval_prompt =力