【发布时间】:2018-11-26 21:59:16
【问题描述】:
我想在一个用户帐户上创建一个 YouTube 播放列表,但我很难对 YouTube v3 api 的 POST 进行身份验证。
我将首先展示我在这个问题上的进展。
YouTube API 文档
Youtube API Documentation 提供有关创建播放列表的详细信息,API Explorer 中有一个工作示例
我在请求正文中输入了以下代码:
{
"snippet":
{
"title":"Test Playlist"
}
}
这成功地在我的 YouTube 帐户上创建了一个具有相同标题的播放列表。因此,我可以看出,正文中需要一个标题,并且需要使用以下范围之一进行 OAuth 2.0 身份验证(如果未启用,则会显示错误):youtube、youtube.force-ssl、youtubepartner。
第一次尝试反应
我尝试的第一件事是这样的:
fetch('/youtube/v3/playlists', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Bearer' + api.youtube,
},
body: JSON.stringify({
"snippet":
{
"title":"Test"
}
})
}).then(response => response.json()).then(data => {
console.log(data)
})
api.youtube 包含我的 YouTube api 密钥。 大部分格式来自我在同一程序中的另一个 API,用于从 spotify 获取数据,该程序有效。 我从中得到的响应会说“登录失败”或“身份验证错误”(类似这些内容)
无论如何,这是相关的,因为我知道我的第一个障碍是获得身份验证。
认证
YouTube API 文档包含标题为 Implementing OAuth 2.0 Authorization 的指南,我遵循了 client side web apps 的指南。 我注意到的第一件事是他们正在使用一个库,我在 googleapis 下的 npm 上找到了它并安装了它。 当我尝试在 React 中调用它时使用
const {google} = require('googleapis');
我不会深入了解该错误,但 react 说“无法将未定义转换为对象”并发现一个问题,说 googleapis 用于服务器端而不是客户端,我尝试构建 react 应用程序并将其放入在 herokuapp 上,但得到了同样的错误。其他人建议在 npm 上使用 gapi-client,这是 googleapis 的节点包装器。
接下来我尝试了 npm 页面上的示例,这与配置客户端对象的 google 示例非常相似。我有它,所以导入部分和函数位于我的 app.js 的顶部,然后按下按钮后 gapi.load 部分激活(这可能是无用的信息,但 w/e)
import gapi from 'gapi-client';
//On load, called to load the auth2 library and API client library.
gapi.load('client:auth2', initClient);
function initClient() {
gapi.client.init({
discoveryDocs: ["https://www.googleapis.com/discovery/v1/apis/drive/v3/rest"],
clientId: 'YOUR_CLIENT_ID',
scope: 'https://www.googleapis.com/auth/drive.metadata.readonly'
}).then(function () {
// do stuff with loaded APIs
console.log('it worked');
});
}
我从 API 控制台复制了我的客户端 ID,这是我得到的确切响应:
火狐
铬
获取 https://apis.google.com//scs/apps-static//js/k=oz.gapi.en.WcpMzqgmJZU.O/m=auth2,client/rt=j/sv=1/d=1/ed=1/am=AQ/rs=AGLTcCNsTS1p4dx0iMhlrwEpiaXw4iMjOg/cb=gapi.loaded_0 净::ERR_ABORTED 404
就我所知,我不知道从这里做什么,所以非常感谢任何帮助。我希望这不会太令人费解,但我已尝试尽可能清楚地表达我的问题。
【问题讨论】:
标签: javascript node.js reactjs youtube youtube-api