When I try to connect with YouTube API (by node.js) this error show up:
var redirectUrl = credentials.installed.redirect_uris[0]; ^ TypeError: Cannot read property '0' of undefined at authorize (D:\Node.js\yt-api\server.js:37:56) at processClientSecrets (D:\Node.js\yt-api\server.js:24:3) at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:511:3)
var express = require('express'); var server = express(); var fs = require('fs') var readline = require('readline'); var {google} = require('googleapis'); var OAuth2 = google.auth.OAuth2; server.use(express.static('public')); // If modifying these scopes, delete your previously saved credentials // at ~/.credentials/youtube-nodejs-quickstart.json var SCOPES = ['https://www.googleapis.com/auth/youtube.readonly']; var TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE) + '/.credentials/'; var TOKEN_PATH = TOKEN_DIR + 'youtube-nodejs-quickstart.json'; // Load client secrets from a local file. fs.readFile('client_secret.json', function processClientSecrets(err, content) { if (err) { console.log('Error loading client secret file: ' + err); return; } // Authorize a client with the loaded credentials, then call the YouTube API. authorize(JSON.parse(content), getChannel); }); /** * Create an OAuth2 client with the given credentials, and then execute the * given callback function. * * @param {Object} credentials The authorization client credentials. * @param {function} callback The callback to call with the authorized client. */ function authorize(credentials, callback) { var clientSecret = credentials.installed.client_secret; var clientId = credentials.installed.client_id; var redirectUrl = credentials.installed.redirect_uris[0]; var oauth2Client = new OAuth2(clientId, clientSecret, redirectUrl); // Check if we have previously stored a token. fs.readFile(TOKEN_PATH, function(err, token) { if (err) { getNewToken(oauth2Client, callback); } else { oauth2Client.credentials = JSON.parse(token); callback(oauth2Client); } }); } /** * Get and store new token after prompting for user authorization, and then * execute the given callback with the authorized OAuth2 client. * * @param {google.auth.OAuth2} oauth2Client The OAuth2 client to get token for. * @param {getEventsCallback} callback The callback to call with the authorized * client. */ function getNewToken(oauth2Client, callback) { var authUrl = oauth2Client.generateAuthUrl({ access_type: 'offline', scope: SCOPES }); console.log('Authorize this app by visiting this url: ', authUrl); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('Enter the code from that page here: ', function(code) { rl.close(); oauth2Client.getToken(code, function(err, token) { if (err) { console.log('Error while trying to retrieve access token', err); return; } oauth2Client.credentials = token; storeToken(token); callback(oauth2Client); }); }); } /** * Store token to disk be used in later program executions. * * @param {Object} token The token to store to disk. */ function storeToken(token) { try { fs.mkdirSync(TOKEN_DIR); } catch (err) { if (err.code != 'EEXIST') { throw err; } } fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => { if (err) throw err; console.log('Token stored to ' + TOKEN_PATH); }); console.log('Token stored to ' + TOKEN_PATH); } /** * Lists the names and IDs of up to 10 files. * * @param {google.auth.OAuth2} auth An authorized OAuth2 client. */ function getChannel(auth) { var service = google.youtube('v3'); service.channels.list({ auth: auth, part: 'snippet,contentDetails,statistics', forUsername: 'GoogleDevelopers' }, function(err, response) { if (err) { console.log('The API returned an error: ' + err); return; } var channels = response.data.items; if (channels.length == 0) { console.log('No channel found.'); } else { console.log('This channel\'s ID is %s. Its title is \'%s\', and ' + 'it has %s views.', channels[0].id, channels[0].snippet.title, channels[0].statistics.viewCount); } }); } var port = process.env.port || 4001; server.listen(port, () => { console.log(`Listening on port ${port}`) })
怎么修好?oAuth2有问题吗?
您的client_secret.json
文件缺少“redirect_uris”
的键
请参阅下面的示例文件:
{
"installed": {
"client_id": "YOUR_CLIENT_ID_HERE",
"client_secret": "YOUR_CLIENT_SECRET_HERE",
"redirect_uris": ["http://localhost:8080/oauth2callback"],
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token"
}
}
我正试图通过YouTube API访问我的私人视频。当前,当我的应用程序执行请求时,我收到一个错误,错误如下: "请求包含无效的搜索筛选器和/或限制组合。请注意,如果为eventType、videoCaption、videoCategoryId、videoDefinition、videoDimension、videoDuration、videoEmbeddable、videoLicense、vid
现在,您可以创建多个Youtube频道。在我的Android应用程序中,我需要让用户选择其中一个频道并使用它(获取订阅视频等)。 我想效仿官方YouTube应用程序,您可以在其中选择我在YouTube帐户中创建的频道之一。 编辑: 最后,我用易卜拉欣的建议解决了这个问题。在webview中,我使用了oAuth2身份验证,如下所示: https://accounts.google.com/o/oau
我一直在使用v3版本的Youtube API来获取Youtube的播放列表。 示例网址:https://www.googleapis.com/youtube/v3/playlistItems?playlistId=xxxxxxxxx 但是我发现有时YouTubeAPI响应带有错误消息“500内部服务器错误” 如何使用Youtube API修复或防止此错误?
所以我试图从用户上传的视频中抓取10个最新视频。 现在唯一的问题是,播放列表请求中唯一可见的日期是已发布的,这是视频上传的日期 - 而不是公开的日期,这会产生巨大的差异。 我注意到我可以通过视频请求获取正确的日期,但它似乎不是最好的地方。 让我给你看一个我正在处理的例子。 我们走Maroon5频道吧。 forUserName: Maroon5VEVO 获取 https://www.googleap
我尝试使用以下指南在youtube上上传缩略图:https://developers.google.com/youtube/v3/docs/thumbnails/set 我能够使用以下curl在postman上成功运行它: 然而,我很难将其翻译成js,到目前为止我所做的是: (为了简化逻辑,我只手动键入上面的代码,如果有任何输入错误,请原谅。) 但是这抛出的
我们有一个网站,显示我们的YouTube视频频道和我们频道中最喜欢的视频等。我们使用YouTube数据API v2.0来获取数据。 例如: https://gdata.youtube.com/feeds/api/users/“ 用户标识 ”/播放列表?v=2 但现在这些链接返回“NetworkError: 410 Gone”。我们检查了新的YouTube Javascript API,但我们不知道
我需要提取5年前公司YouTube频道上的活动。我遇到了一个YouTube分析API的问题,因为它限制了我最近30天的活动。我正在考虑接下来尝试YouTube数据API V3,但我想首先在这里问一下,是否有人知道如何从YouTube频道中提取深层历史数据。我感兴趣的主要是每天每个视频的浏览量。我正在使用谷歌云平台,需要将数据存储在BigQuery中。 https://developers.goog
目前,我正在处理一个项目,该项目需要为Oauth 2登录用户返回不公开的视频。因为我试图获得不公开的视频,所以我必须使用ForMine变量。所以我得到的是 https://content.googleapis.com/youtube/v3/search?part =片段 它工作正常。但是,我想做一个增量加载。这需要仅在特定时间后发布视频。一旦我添加发布后参数“发布后=1970-01-01T00:0