গুগল এপিআইয়ের মাধ্যমে ব্যবহারকারীর তথ্য পান


105

গুগল এপিআইয়ের মাধ্যমে ব্যবহারকারীর প্রোফাইল থেকে তথ্য পাওয়া সম্ভব? যদি এটি সম্ভব হয় তবে আমার কোন API ব্যবহার করা উচিত?

আমি এই ধরনের তথ্য আকর্ষণীয়:

এছাড়াও এটি ব্যবহারকারীর প্রোফাইল থেকে অন্যান্য তথ্য পেতে দুর্দান্ত হবে।

উত্তর:


124

এটিকে স্কোপে যুক্ত করুন - https://www.googleapis.com/auth/userinfo.profile

অনুমোদন সম্পন্ন হওয়ার পরে, থেকে তথ্যটি পান - https://www.googleapis.com/oauth2/v1/userinfo?alt=json

এতে প্রচুর পরিমাণে স্টাফ রয়েছে - নাম, পাবলিক প্রোফাইল ইউআরএল, লিঙ্গ, ফটো ইত্যাদি সহ stuff


4
আমি উপরের urls ব্যবহার করেছি তবে ব্যবহারকারীর প্রোফাইল পেতে অক্ষম। কেবল '{' পাচ্ছেন। Plz আপনি কিছু কোড বা লিঙ্ক পোস্ট করতে পারেন। আগাম ধন্যবাদ.
পানচে

11
আপনার সরবরাহিত url পুরোপুরি কাজ করে, যেমন googleapis.com/oauth2/v1/userinfo । তবে আপনি কী এই urlটি কোথা থেকে পেয়েছেন তা বলতে পারেন। আমি এটি অনুসন্ধান করার চেষ্টা করেছি কিন্তু এটি কোথাও পাইনি। গুগল কি কোনও জায়গায় এই url নথিভুক্ত করে?
অক্ষররাজ

4
নির্দিষ্ট সুযোগের জন্য ফিরে আসা ডেটার স্পেসিফিকেশন আমি কোথায় দেখতে পাব?
মাতকো 5:45

4
"ব্যবহারকারীর তথ্যপ্রযুক্তি" প্রোফাইলে হ্রাস করা হয়েছে বলে মনে হচ্ছে, পরিবর্তে আপনার "প্রোফাইল" এবং "ইমেল" ব্যবহার করা উচিত। ডেভেলপারস
মার্টিন বি

4
ব্যবহারকারীরা আপনাকে এই সুযোগ অ্যাক্সেস করার অনুমতি দেওয়ার পরে আপনি যে অ্যাক্সেস টোকেনটি পেয়েছেন তা ব্যবহার করে আপনি কেবল এই url টি প্রশ্ন করতে পারেন। উদাহরণ:curl -X GET "https://www.googleapis.com/oauth2/v1/userinfo?alt=json" -H"Authorization: Bearer accessTokenHere"
প্রতীক সিংহল

90

সুযোগ - https://www.googleapis.com/auth/userinfo.profile

return youraccess_token = access_token

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

আপনি জেসন পাবেন:

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

তাহির ইয়াসিনকে:

এটি একটি পিএইচপি উদাহরণ।
ইউজারআইএনফোর অ্যারে পেতে আপনি json_decode ফাংশন ব্যবহার করতে পারেন।

$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'];

4
আমি কীভাবে তাদের প্রতিক্রিয়া ব্যবহার করতে পারি?
তাহির ইয়াসিন

আপনার উল্লিখিত অন্যান্য তথ্যের সাথে আমি কীভাবে ইমেল ঠিকানা পেতে পারি?
দিলান্থ

দয়া করে $userInfoArrayবৈশিষ্ট্য অ্যাক্সেস করতে সঠিক ফর্ম্যাট থাকতে কোডটি আপডেট করুন । এটির $userInfoArray['email']থেকে ইমেল ঠিকানা পাওয়ার মতো হওয়া উচিত $userInfoArray। জনপ্রিয়তাগুলি অ্যাক্সেসের জন্য একক উক্তিটি নোট করুন।
শান্ত কুমার

@ শান্থ কুমারা আপনি নিজেই এটি সম্পাদনা করতে পারতেন, তবে এখনই যেমন করলাম তেমন চিন্তা করবেন না। আমরা সবাই জানি যে তারা কোডটি বাদ দিতে পারে define(email, 'email');)
ভারবামসাপিটিটি

আমি ফোন নম্বর এবং বয়স / জন্মদিন পেতে চাই
প্রসাদ

28

এই সুযোগটি https://www.googleapis.com/auth/userinfo.profile এখন অবচয় করা হয়েছে। দয়া করে https://developers.google.com/+/api/auth-migration#টাইম টেবিলটি দেখুন ।

প্রোফাইল তথ্য পেতে আপনি যে নতুন সুযোগ ব্যবহার করবেন তা হ'ল: প্রোফাইল বা https://www.googleapis.com/auth/plus.login

এবং শেষের বিন্দুটি হল - https://www.googleapis.com/plus/v1/people/ {userId user - ইউজারআইডি বর্তমানে লগ ইন করা ব্যবহারকারীদের জন্য কেবল 'আমি' হতে পারে।


এটি একীকরণের ভবিষ্যতের প্রমাণ থাকার দিকে তথ্যের গুরুত্বপূর্ণ শান্তি। অবহেলিত স্কোপগুলি সম্পর্কে আরও তথ্য ডেভেলপারগুলি
google.com/+/web/api/rest/oauth

এবং এখনও ... If you are directly requesting the “plus.me” scope, any other Google+ OAuth scopes, or making any Google+ API calls, please ensure that you remove these requests from your project before March 7, 2019.- গুগল
প্লামসেমপি

26

আমি গুগল-এপিআই-পিএইচপি-ক্লায়েন্টেরPHP ১.১.৪ সংস্করণ ব্যবহার করে এটি সমাধান করছি

নিম্নোক্ত কোডটি গুগল প্রমাণীকরণ পৃষ্ঠাতে একজন ব্যবহারকারীকে পুনর্নির্দেশ করতে ব্যবহার করা হয়েছে বলে ধরে নেওয়া:

 $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

তবে লোকেশন ফেরত দেওয়া হয় না। নতুন ইউটিউব অ্যাকাউন্টে ইউটিউব নির্দিষ্ট ব্যবহারকারীর নাম নেই


কিভাবে অবস্থান পাবেন?
সফটসান

আমি এই সুযোগটি ব্যবহার করে লিঙ্গ সম্পর্কিত তথ্য পেতে পারি না (আমি জেন্ডার তথ্য সর্বজনীন রেখেছি)। আমি এটির জন্য oauth প্লেগ্রাউন্ড ডেভেলপার্স.google.com/oauthplayground চেষ্টা করেছি। আমি সার্ভারের পাশে REST এপিআই ব্যবহার করে এটি করতে চাই। আপনি কি আমার এই সাহায্য করতে পারেন?
বিশানত ধাধা

লিঙ্গও পেতে পারি না। এবং কিছু অ্যাকাউন্টে, ইমেল ব্যতীত আর কিছুই ফিরে আসে না। ধারনা ?
রাজত্ব করুন। 85

5

আমি নেট এর জন্য গুগল এপিআই ব্যবহার করছি, তবে সন্দেহ নেই যে আপনি এপিআই-র অন্যান্য সংস্করণ ব্যবহার করে এই তথ্যটি অর্জন করার জন্য একই উপায়টি পেতে পারেন। ব্যবহারকারীর 872858 হিসাবে উল্লেখ করা হয়েছে, স্কোপ ইউজার ইনফো.প্রোফাইলকে অবমূল্যায়ন করা হয়েছে ( গুগল নিবন্ধ )।

ব্যবহারকারীর প্রোফাইল তথ্য পেতে আমি নিম্নলিখিত কোড ব্যবহার করি (গুগলের উদাহরণ থেকে পুনরায় লিখিত অংশ ):

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();
                    }

এর চেয়ে বেশি, আপনি ব্যবহারকারীর প্রোফাইল ব্যবহার করে যে কোনও কিছুতে অ্যাক্সেস করতে পারবেন।

আপডেট: এই কোডটি কাজ করতে আপনাকে গুগল সাইন ইন বোতামে উপযুক্ত স্কোপগুলি ব্যবহার করতে হবে। উদাহরণস্বরূপ আমার বোতাম:

     <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>

2

3 টি ধাপ রয়েছে যা চালানো দরকার।

  1. গুগল এপিআই কনসোল থেকে আপনার অ্যাপের ক্লায়েন্ট আইডি নিবন্ধন করুন
  2. আপনার শেষ ব্যবহারকারীকে এই এপিআই ব্যবহার করে সম্মতি জানাতে জিজ্ঞাসা করুন https://developers.google.com/identity/protocols/OpenID সংযোগ#sendauthrequest
  3. Https://any-api.com/googleapis_com/oauth2/docs/userinfo/oauth2_userinfo_v2_me_get তে বর্ণিত টোকেনটি দ্বিতীয় ধাপে বর্ণিত হিসাবে গুগলের oauth2 এপি ব্যবহার করুন (যদিও আমি "ফিল্ডস" প্যারামিটারটি সঠিকভাবে পূরণ করতে পারি না) ।

এটি অত্যন্ত আকর্ষণীয় যে এই সাধারণ ব্যবহারটি কোথাও পরিষ্কারভাবে বর্ণিত হয়নি। এবং আমি বিশ্বাস করি যে এখানে একটি বিপদ রয়েছে, আপনার verified_emailপ্রতিক্রিয়াটিতে আসা প্যারামিটারের দিকে মনোযোগ দেওয়া উচিত । কারণ আমি যদি ভুল না করি তবে এটি আপনার আবেদনটি নিবন্ধ করার জন্য ভুয়া ইমেলগুলি পেতে পারে। (এটি কেবল আমার ব্যাখ্যা, আমার ভুল হতে পারে এমন একটি সুস্পষ্ট সুযোগ রয়েছে!)

আমি ফেসবুকের ওআউথ মেকানিক্সকে অনেক স্পষ্টভাবে বর্ণিত পেয়েছি।


1

আপনি যদি ক্লায়েন্ট-সাইড ওয়েব পরিবেশে থাকেন তবে নতুন auth2 জাভাস্ক্রিপ্ট এপিআইতে একটি অতি প্রয়োজনীয় getBasicProfile()ফাংশন রয়েছে যা ব্যবহারকারীর নাম, ইমেল এবং চিত্রের URL দেয়।

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


তবে আসল এপিআই ইউআরএল কী? আমি ডকুমেন্টেশনের দিকে তাকালাম, আমি আসল এপিআইএল URL খুঁজে পাচ্ছি না। গুগল মনে হয় আমাদের তাদের এসডিকে চাপ দিচ্ছে, তবে সবাই এসডিকে ব্যবহার করতে চায় না।
সুপারট্যাকনোবফ

1

আপনি যদি কেবলমাত্র নিজের ওয়েব অ্যাপ্লিকেশনটির জন্য গুগল ব্যবহারকারী আইডি, নাম এবং ছবি আনতে চান - তবে 2020 সালের জন্য আমার খাঁটি পিএইচপি পরিষেবা সাইড সলিউশনটি কোনও বাহ্যিক লাইব্রেরি ব্যবহার না করেই এখানে দেওয়া হয়েছে -

আপনি যদি গুগলের ওয়েব সার্ভার অ্যাপ্লিকেশন গাইডের জন্য ওআউথ ২.০ ব্যবহার করেন (এবং সাবধান, গুগল তার নিজস্ব ডকুমেন্টেশনের লিঙ্কগুলি পরিবর্তন করতে পছন্দ করে), তবে আপনাকে কেবল ২ টি পদক্ষেপ করতে হবে:

  1. আপনার ওয়েব অ্যাপ্লিকেশনের সাথে তার নামটি ভাগ করে নেওয়ার সম্মতি চেয়ে ভিজিটরকে একটি ওয়েব পৃষ্ঠা উপস্থাপন করুন
  2. তারপরে উপরের ওয়েব পৃষ্ঠায় পাস করা "কোড" আপনার ওয়েব অ্যাপ্লিকেশনটিতে নিয়ে যান এবং গুগল থেকে একটি টোকেন (আসলে 2) আনুন।

প্রত্যাবর্তিত টোকেনগুলির মধ্যে একটিকে "আইডি_ টোকেন" বলা হয় এবং এতে ব্যবহারকারীর আইডি, নাম এবং দর্শনার্থীর ফটো থাকে।

আমার দ্বারা একটি ওয়েব গেমের পিএইচপি কোড এখানে । প্রথমদিকে আমি জাভাস্ক্রিপ্ট এসডিকে ব্যবহার করছিলাম তবে আমি লক্ষ্য করেছি যে নকল ব্যবহারকারীর ডেটা কেবলমাত্র আমার ক্লায়েন্ট সাইড এসডিকে (বিশেষত ব্যবহারকারীর আইডি, যা আমার গেমের জন্য গুরুত্বপূর্ণ) ব্যবহার করার সময় আমার ওয়েব গেমটিতে পাঠানো যেতে পারে, তাই আমি ব্যবহারটি স্যুইচ করেছি সার্ভার দিকে পিএইচপি:

<?php

const APP_ID       = '1234567890-abcdefghijklmnop.apps.googleusercontent.com';
const APP_SECRET   = 'abcdefghijklmnopq';

const REDIRECT_URI = 'https://the/url/of/this/PHP/script/';
const LOCATION     = 'Location: https://accounts.google.com/o/oauth2/v2/auth?';
const TOKEN_URL    = 'https://oauth2.googleapis.com/token';
const ERROR        = 'error';
const CODE         = 'code';
const STATE        = 'state';
const ID_TOKEN     = 'id_token';

# use a "random" string based on the current date as protection against CSRF
$CSRF_PROTECTION   = md5(date('m.d.y'));

if (isset($_REQUEST[ERROR]) && $_REQUEST[ERROR]) {
    exit($_REQUEST[ERROR]);
}

if (isset($_REQUEST[CODE]) && $_REQUEST[CODE] && $CSRF_PROTECTION == $_REQUEST[STATE]) {
    $tokenRequest = [
        'code'          => $_REQUEST[CODE],
        'client_id'     => APP_ID,
        'client_secret' => APP_SECRET,
        'redirect_uri'  => REDIRECT_URI,
        'grant_type'    => 'authorization_code',
    ];

    $postContext = stream_context_create([
        'http' => [
            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            'method'  => 'POST',
            'content' => http_build_query($tokenRequest)
        ]
    ]);

    # Step #2: send POST request to token URL and decode the returned JWT id_token
    $tokenResult = json_decode(file_get_contents(TOKEN_URL, false, $postContext), true);
    error_log(print_r($tokenResult, true));
    $id_token    = $tokenResult[ID_TOKEN];
    # Beware - the following code does not verify the JWT signature! 
    $userResult  = json_decode(base64_decode(str_replace('_', '/', str_replace('-', '+', explode('.', $id_token)[1]))), true);

    $user_id     = $userResult['sub'];
    $given_name  = $userResult['given_name'];
    $family_name = $userResult['family_name'];
    $photo       = $userResult['picture'];

    if ($user_id != NULL && $given_name != NULL) {
        # print your web app or game here, based on $user_id etc.
        exit();
    }
}

$userConsent = [
    'client_id'     => APP_ID,
    'redirect_uri'  => REDIRECT_URI,
    'response_type' => 'code',
    'scope'         => 'profile',
    'state'         => $CSRF_PROTECTION,
];

# Step #1: redirect user to a the Google page asking for user consent
header(LOCATION . http_build_query($userConsent));

?>

আপনি JWT স্বাক্ষর যাচাই করে অতিরিক্ত সুরক্ষা যুক্ত করতে পিএইচপি লাইব্রেরি ব্যবহার করতে পারেন। আমার উদ্দেশ্যে এটি অপ্রয়োজনীয় ছিল, কারণ আমি বিশ্বাস করি যে জাল ভিজিটর ডেটা পাঠিয়ে গুগল আমার ছোট ওয়েব গেমটিকে বিশ্বাসঘাতকতা করবে না।

এছাড়াও, আপনি যদি দর্শকের আরও ব্যক্তিগত ডেটা পেতে চান, তবে আপনার তৃতীয় পদক্ষেপের প্রয়োজন:

const USER_INFO    = 'https://www.googleapis.com/oauth2/v3/userinfo?access_token=';
const ACCESS_TOKEN = 'access_token'; 

# Step #3: send GET request to user info URL
$access_token = $tokenResult[ACCESS_TOKEN];
$userResult = json_decode(file_get_contents(USER_INFO . $access_token), true);

অথবা আপনি ব্যবহারকারীর পক্ষ থেকে আরও অনুমতি পেতে পারেন - গুগল এপিআইএস ডকটির জন্য OAuth 2.0 স্কোপে দীর্ঘ তালিকাটি দেখুন ।

অবশেষে, আমার কোডে ব্যবহৃত APP_ID এবং APP_SECRET ধ্রুবক - আপনি এটি Google API কনসোল থেকে পান :

স্ক্রিনশট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.