Google APIを介してユーザーのプロファイルから情報を取得することは可能ですか?可能であれば、どのAPIを使用すればよいですか?
私はそのような情報に興味があります:
また、ユーザーのプロファイルから他の情報を取得するのもいいでしょう。
これをスコープに追加します- https://www.googleapis.com/auth/userinfo.profile
そして、承認が完了したら、- https://www.googleapis.com/oauth2/v1/userinfo?alt=json から情報を取得します
名前、公開プロファイルのURL、性別、写真など、さまざまなものがあります。
スコープ- 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'];
このスコープ https://www.googleapis.com/auth/userinfo.profile は非推奨になりました。 https://developers.google.com/+/api/auth-migration#timetable をご覧ください。
プロファイル情報を取得するために使用する新しいスコープは、profileまたは https://www.googleapis.com/auth/plus.login です。
エンドポイントは- https://www.googleapis.com/plus/v1/people/ {userId}-現在ログインしているユーザーのuserIdを「me」にすることができます。
私はPHP
を使用していますが、これを google-api-php-client のバージョン1.1.4を使用して解決しました
次のコードがユーザーを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固有のユーザー名がありません
私は.NET用のGoogle APIを使用していますが、他のバージョンのAPIを使用してこの情報を取得するための同じ方法を見つけることができることは間違いありません。 user872858が述べたように、スコープuserinfo.profileは廃止されました( google article =)。
ユーザープロファイル情報を取得するには、次のコードを使用します( 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>
クライアント側のWeb環境を使用している場合、新しいauth2 javascript APIにはユーザーの名前、メール、画像のURLを返す、非常に必要なgetBasicProfile()
関数が含まれています。
https://developers.google.com/identity/sign-in/web/reference#googleusergetbasicprofile
実行する必要がある3つのステップがあります。
この最も単純な使用法がどこにも明確に記述されていないことは非常に興味深いです。そして、iは危険だと信じています、応答に含まれるverified_email
パラメータに注意する必要があります。 私が間違っていない場合は、アプリケーションを登録するために偽の電子メールを生成する可能性があるためです。 (これは単なる私の解釈であり、間違っている可能性がかなりあります!)
FacebookのOAuthメカニズムが非常に明確に記述されていることがわかりました。