我想在一个用户帐户上创建一个YouTube播放列表,但我一直在努力通过YouTubeV3 API验证一个帖子。
我将首先说明我在这个问题上取得了多大的进展。
Youtube API文档提供了关于创建播放列表的详细信息,并在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)
})
包含我的YouTube api密钥。大部分的格式设置来自我在同一程序中的另一个API,它可以从spotify获取数据。我得到的响应是“登录失败”或“身份验证错误”(类似的)
无论如何,这是相关的,因为我知道我的第一个障碍是获得身份验证。
YouTube API文档包含一个名为Implementing OAuth2.0 Authorization I followed The guide for client side web Apps的指南。我注意到的第一件事是他们正在使用一个库,我在GoogleAPI下的npm上找到了这个,并安装了它。当我尝试在React中使用
const {google} = require('googleapis');
我不会深入探讨这个错误,但react说“不能将未定义转换为对象”,并且发现了一个问题,即GoogleAPI是用于服务器端而不是客户端的,我尝试构建react应用程序并将其放在herokuapp上,但得到了同样的错误。其他人建议在npm上使用gapi-client,这是GoogleAPI的节点包装器。
我做的下一件事是尝试npm页面上的示例,它与配置客户端对象的google示例非常相似。我有它,所以导入部分和函数在我的app.js的顶部,然后gapi.load部分在按下一个按钮后激活(这可能是无用的信息,但不是这样)
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”的文件加载失败。
铬
获取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 net::err_aborted 404
这是大约我所得到的,我不确定从这里做什么,所以任何帮助是非常感谢的。我希望这件事不会太复杂,但我已经尽可能清楚地表达了我的问题。
所以我能够授权YouTube API并创建一个播放列表。我有一个托管在localhost上的后端:8888(并不重要,只是react托管在什么上)。
下面是我放在server.js文件中的示例代码(用于后端)
var express = require('express');
var app = express();
var passport = require('passport');
app.use(passport.initialize());
var YoutubeV3Strategy = require('passport-youtube-v3').Strategy;
passport.use(new YoutubeV3Strategy({
clientID: YOUR_CLIENT_ID,
clientSecret: YOUR_CLIENT_SECRET,
callbackURL: 'http://localhost:8888/redirect',
scope: ['https://www.googleapis.com/auth/youtube']
},
function (accessToken, refreshToken, profile, cb) {
var user = {
accessToken: accessToken,
refreshToken: refreshToken
};
return cb(null, user)
}
));
passport.serializeUser(function(user, cb) {
cb(null, user);
});
passport.deserializeUser(function(obj, cb) {
cb(null, obj);
});
app.get('/authenticate', passport.authenticate('youtube'))
app.get('/redirect', passport.authenticate('youtube', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('http://localhost:3000' + '?access_token=' + req.user.accessToken)
})
app.listen(8888)
这是使用passport.js为我做oauth,很多文档可以在站点上找到。
在react中,我有一个按钮将打开localhost:8888/authenticate,然后它将重定向回我的应用程序。如果您正在使用这种方法,则需要确保在google API凭据上javascript源为http://localhost:8888,重定向URI为http://localhost:8888/redirect以及正确的作用域和应用程序类型。
这是我在app.js(react)中用来发布帖子的函数
getAPIdata() {
let parsed = queryString.parse(window.location.search);
let accessToken = parsed.access_token
fetch('https://www.googleapis.com/youtube/v3/playlists?part=snippet', {
method: 'POST',
headers: {
'Content-type': 'application/json',
'Authorization': 'Bearer ' + accessToken,
},
body: JSON.stringify({
'snippet':
{
'title':this.state.inputTitle
}
})
}).then(response => response.json()).then(data => {
console.log(data)
window.alert('https://www.youtube.com/playlist?list=' + data.id)
})
}
我实际上基本上是正确的,第一次尝试,我只是有授权不正确。
以下几个消息来源帮助我制定了解决方案:
希望这对某人有帮助,您可以使用我在server.js中使用的相同代码来验证大多数服务,只需更改策略。
我的应用程序的实时版本可以在这里找到。在控制台中,它显示了来自POST请求的响应,如果您有任何问题,这将会有所帮助。我知道警报是错误的用户界面,但这不是预期的用途。
感谢阅读:)
我正在使用youtube v3 API检索播放列表的视频,并通过此链接获得50个项目,没有任何问题:- https://www.googleapis.com/youtube/v3/playlistItems?part=snippet 但是视频数是100,我只有50个。我如何获得接下来的50个项目?我尝试了start index,但它不适用于v3 API。感谢任何帮助。
我已经设法使用YouTubePlayer播放YouTube视频。然而,当我尝试使用YouTubePlayer播放直播流时,什么也没有发生。API支持播放实时流吗?如果是,我该怎么做?
我正试图找出在给定频道频道ID的情况下获取频道上传播放列表ID的最佳方法。E、 g.对于具有channelID的信道 UC9CuvdOVfMPvKCiwdGKL3cQ 对应的上传playlistID为 UU9CuvdOVfMPvKCiwdGKL3cQ 请注意,第二个字符已从“C”更改为“U” 我可以通过字符串操作进行此转换,但我很好奇是否有更好,更不麻烦的方式通过官方youtube api找到上传
我收到这个错误“无法加载现代控件UI。升级到Android YouTube API的最新版本。”我使用了youtubePlayer。addFullscreenControlFlag(YouTubePlayer.FULLSCREEN\u FLAG\u CONTROL\u SYSTEM\u UI) 但仍然得到同样的错误也我去无法播放一些YouTube视频使用YouTubeAndroid Player
我正在尝试从播放列表中下载所有视频: 我使用youtube-dl进行此操作,命令如下: 但这只下载第一个视频。不知道我做错了什么。
我试图使用下面的json url显示我的youtube频道中的所有视频。但它只有25个视频显示从这个网址。 https://gdata.youtube.com/feeds/api/videos?author=Anklespankin 实际上,用户已经上传了500多个视频 https://www.youtube.com/user/Anklespankin 如何获取所有视频。给我一个json解决方案。