Youtube API会返回其他用户

时间:2017-05-01 22:24:13

标签: javascript node.js oauth youtube-api

我正在使用google的node.js API https://www.npmjs.com/package/googleapis

我正在尝试获取属于该人的所有频道的数组 谁用他的谷歌帐户登录我的网站。 我在这个问题上使用这个范围: ''https://www.googleapis.com/auth/youtube.readonly

现在这是我的代码的一部分:

 app.get("/oauthcallback", function(req, res) {
        //google redirected us back in here with random token
        var code = req.query.code;
        oauth2Client.getToken(code, function(err, tokens) { //let's check if the query code is valid.
            if (err) { //invalid query code.
                console.log(err);
                res.send(err);
                return;
            }
            //google now verified that the login was correct.
            googleAccountVerified(tokens, res); //now decide what to do with it
        });
    });

    function googleAccountVerified(tokens, res){ //successfully verified.
        //user was verified by google, continue.
        oauth2Client.setCredentials(tokens);  //save tokens to an object

        //now ask google for the user's details
        //with the verified tokens you got. 
        youtube.channels.list({
        forUsername: true,
        part: "snippet",
        auth: oauth2Client 
        }, function (err, response) { 
        if(err) {           
            res.send("Something went wrong, can't get your google info");
            return;
        }

        console.log(response.items[0].snippet);
        res.send("test");


        });
    }

现在,在这个console.log中:

console.log(response.items[0].snippet);

无论我使用什么帐户登录我的网站,我都会收到相同的信息:

{ title: 'True',
  description: '',
  publishedAt: '2005-10-14T10:09:11.000Z',
  thumbnails:
   { default: { url: 'https://i.ytimg.com/i/G9p-zLTq1mO1KAwzN2h0YQ/1.jpg?v=51448e08' },
     medium: { url: 'https://i.ytimg.com/i/G9p-zLTq1mO1KAwzN2h0YQ/mq1.jpg?v=51448e08' },
     high: { url: 'https://i.ytimg.com/i/G9p-zLTq1mO1KAwzN2h0YQ/hq1.jpg?v=51448e08' } },
  localized: { title: 'True', description: '' } }

如果我做console.log(响应)这是整个响应

我明白了:

{ kind: 'youtube#channelListResponse',
  etag: '"m2yskBQFythfE4irbTIeOgYYfBU/ch97FwhvtkdYcbQGBeya1XtFqyQ"',
  pageInfo: { totalResults: 1, resultsPerPage: 5 },
  items:
   [ { kind: 'youtube#channel',
       etag: '"m2yskBQFythfE4irbTIeOgYYfBU/bBTQeJyetWCB7vBdSCu-7VLgZug"',
       id: 'UCG9p-zLTq1mO1KAwzN2h0YQ',
       snippet: [Object] } ] }

所以,这里有两个问题:

1)如何通过登录用户获取所拥有的频道数组, 在数组内部,我需要代表每个频道的对象和基本信息,如频道名称,个人资料图片。

2)为什么我会得到一些名为“True”的随机YouTube频道的信息

2 个答案:

答案 0 :(得分:0)

不确定问题一,但对于问题二,您获得了名为true的频道的信息,因为您要求它。 forUsername: true

我希望一旦你纠正这个,如果用户名不止一个,那么回复可能包含多个频道。

答案 1 :(得分:0)

关注基本信息的问题。

您不使用Youtube API来获取帐户的个人资料信息。相反,请尝试Retrieve Profile Information with G+

要检索用户的配置文件信息,请使用people.get API方法。要获取当前授权用户的配置文件信息,请使用我的userId值。

JavaScript示例:

// This sample assumes a client object has been created.
// To learn more about creating a client, check out the starter:
//  https://developers.google.com/+/quickstart/javascript
gapi.client.load('plus','v1', function(){
 var request = gapi.client.plus.people.get({
   'userId': 'me'
 });
 request.execute(function(resp) {
   console.log('Retrieved profile for:' + resp.displayName);
 });
});

Google登录网站还支持Getting profile information

使用默认范围登录Google用户后,您可以访问用户的Google ID,姓名,个人资料网址和电子邮件地址。

要检索用户的配置文件信息,请使用getBasicProfile()方法。例如:

if (auth2.isSignedIn.get()) {
  var profile = auth2.currentUser.get().getBasicProfile();
  console.log('ID: ' + profile.getId());
  console.log('Full Name: ' + profile.getName());
  console.log('Given Name: ' + profile.getGivenName());
  console.log('Family Name: ' + profile.getFamilyName());
  console.log('Image URL: ' + profile.getImageUrl());
  console.log('Email: ' + profile.getEmail());
}