Получить информацию о пользователе через API Google

Можно ли получить информацию из профиля пользователя через Google API? Если это возможно, какой API я должен использовать?

Мне интересна такая информация:

Также было бы здорово получить другую информацию из профиля пользователя.

Ответ 2

scope - https://www.googleapis.com/auth/userinfo.profile

return youraccess_token = access_token

get https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=youraccess_token

вы получите json:

{
 "id": "xx",
 "name": "xx",
 "given_name": "xx",
 "family_name": "xx",
 "link": "xx",
 "picture": "xx",
 "gender": "xx",
 "locale": "xx"
}

Тахиру Ясину:

Это пример php.
Вы можете использовать функцию json_decode для получения массива userInfo.

$q = 'https://www.googleapis.com/oauth2/v1/userinfo?access_token=xxx';
$json = file_get_contents($q);
$userInfoArray = json_decode($json,true);
$googleEmail = $userInfoArray['email'];
$googleFirstName = $userInfoArray['given_name'];
$googleLastName = $userInfoArray['family_name'];

Ответ 3

Эта область https://www.googleapis.com/auth/userinfo.profile устарела. Посмотрите https://developers.google.com/+/api/auth-migration#timetable.

Новая область, которую вы будете использовать для получения информации о профиле: профиль или https://www.googleapis.com/auth/plus.login

а конечная точка - https://www.googleapis.com/plus/v1/people/ {userId} - userId может быть просто "я" для текущего пользователя.

Ответ 4

Я использую PHP и решил это, используя версию 1.1.4 google-api-php-client

Предполагая, что следующий код используется для перенаправления пользователя на страницу проверки подлинности Google:

 $client = new Google_Client();
 $client->setAuthConfigFile('/path/to/config/file/here');
 $client->setRedirectUri('https://redirect/url/here');
 $client->setAccessType('offline'); //optional
 $client->setScopes(['profile']); //or email
 $auth_url = $client->createAuthUrl();
 header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
 exit();

Предполагая, что действительный код аутентификации возвращается в redirect_url, следующее генерирует токен из кода аутентификации, а также предоставляет базовую информацию профиля:

 //assuming a successful authentication code is return
 $authentication_code = 'code-returned-by-google';
 $client = new Google_Client();
 //.... configure $client object code goes here
 $client->authenticate($authentication_code);
 $token_data = $client->getAccessToken();

 //get user email address
 $google_oauth =new Google_Service_Oauth2($client);
 $google_account_email = $google_oauth->userinfo->get()->email;
 //$google_oauth->userinfo->get()->familyName;
 //$google_oauth->userinfo->get()->givenName;
 //$google_oauth->userinfo->get()->name;
 //$google_oauth->userinfo->get()->gender;
 //$google_oauth->userinfo->get()->picture; //profile picture

Однако местоположение не возвращается. У новых учетных записей YouTube нет пользовательских имен пользователей YouTube

Ответ 5

Я использую API Google для .Net, но, без сомнения, вы можете найти тот же способ получить эту информацию, используя другую версию API. Как указано user872858, область userinfo.profile устарела (статья google).

Чтобы получить информацию о профиле пользователя, я использую следующий код (переписанная часть из пример Google):

IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(
                                  new GoogleAuthorizationCodeFlow.Initializer
                                      {
                                            ClientSecrets = Secrets,
                                            Scopes = new[] { PlusService.Scope.PlusLogin,"https://www.googleapis.com/auth/plus.profile.emails.read"  }
                                       });    
TokenResponse _token = flow.ExchangeCodeForTokenAsync("", code, "postmessage", 
                              CancellationToken.None).Result;

                    // Create an authorization state from the returned token.
                    context.Session["authState"] = _token;

                    // Get tokeninfo for the access token if you want to verify.
                    Oauth2Service service = new Oauth2Service(
                     new Google.Apis.Services.BaseClientService.Initializer());
                    Oauth2Service.TokeninfoRequest request = service.Tokeninfo();
                    request.AccessToken = _token.AccessToken;
                    Tokeninfo info = request.Execute();
                    if (info.VerifiedEmail.HasValue && info.VerifiedEmail.Value)
                    {
                        flow = new GoogleAuthorizationCodeFlow(
                                    new GoogleAuthorizationCodeFlow.Initializer
                                         {
                                             ClientSecrets = Secrets,
                                             Scopes = new[] { PlusService.Scope.PlusLogin }
                                          });

                        UserCredential credential = new UserCredential(flow, 
                                                              "me", _token);
                        _token = credential.Token;
                        _ps = new PlusService(
                              new Google.Apis.Services.BaseClientService.Initializer()
                               {
                                   ApplicationName = "Your app name",
                                   HttpClientInitializer = credential
                               });
                        Person userProfile = _ps.People.Get("me").Execute();
                    }

Более того, вы можете получить доступ практически к любому, используя userProfile.

ОБНОВЛЕНИЕ. Чтобы получить этот код, вы должны использовать соответствующие области действия в кнопке входа в Google. Например, моя кнопка:

     <button class="g-signin"
             data-scope="https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/plus.profile.emails.read"
             data-clientid="646361778467-nb2uipj05c4adlk0vo66k96bv8inqles.apps.googleusercontent.com"
             data-accesstype="offline"
             data-redirecturi="postmessage"
             data-theme="dark"
             data-callback="onSignInCallback"
             data-cookiepolicy="single_host_origin"
             data-width="iconOnly">
     </button>

Ответ 6

Если вы находитесь в клиентской веб-среде, новый API javascript auth2 содержит очень необходимую функцию getBasicProfile(), которая возвращает имя пользователя, адрес электронной почты и URL-адрес изображения.

https://developers.google.com/identity/sign-in/web/reference#googleusergetbasicprofile