J'ai l'autorisation oauth avec google fonctionne correctement et je reçois des données de l'api de contacts. Maintenant, je veux programmer le prénom, le nom et l'image d'un utilisateur gmail. Quelle API Google puis-je utiliser pour obtenir ces données?Quelle API Google utiliser pour obtenir le nom, le prénom, l'image, etc. de l'utilisateur?
Répondre
J'ai trouvé la réponse en regardant autour de moi dans le forum de l'API des contacts. Lorsque vous obtenez le résultat d'alimentation, il suffit de ce qui suit dans Java-
String Name = resultFeed.getAuthors().get(0).getName();
String emailId = resultFeed.getId();
Je cherche toujours un moyen d'obtenir l'image de profil d'utilisateur.
pouvez-vous poster un échantillon de code pour obtenir le prénom, le nom, l'adresse e-mail de google. L'URL que vous demandez. Je fais la même chose dans l'application Android. Merci d'avance. – Panache
Qu'est-ce que Java a à voir avec les API Google? –
Pour l'image, vous pouvez utiliser les contacts Google API de données aussi: voir http://code.google.com/intl/fr/apis/contacts/docs/3.0/developers_guide_protocol.html#retrieving_photo
mais comment récupérer la photo pour l'utilisateur connecté? J'ai essayé https: //www.google.com/m8/feeds/photos/media/default/[email protected]? Access_token = ... mais j'ai reçu l'erreur "Echec de la requête photo - ID de contact invalide". –
Dans votre URL, URLencode juste l'adresse e-mail (écrire% 40 au lieu de @) et cela devrait fonctionner ... – olivierlemasle
Je viens de découvrir une nouvelle API Google que vous pouvez utiliser: Portable Contacts API (http: // code. google.com/intl/fr-FR/apis/contacts/docs/poco/1.0/developers_guide.html) Il est plus facile de récupérer la photo de l'utilisateur: vous authentifiez avec la portée https://www-opensocial.googleusercontent.com/api/gens /, vous obtenez des informations d'utilisateur avec la demande https://www-opensocial.googleusercontent.com/api/people/@me/@self et il contient l'URL de la photo ... – olivierlemasle
L'API de contacts fonctionne peut-être, mais vous devez demander la permission de l'utilisateur d'accéder à tous les contacts. Si j'étais un utilisateur, cela me rendrait méfiant d'accorder la permission (parce que cela vous donne essentiellement la permission de spammer tous mes contacts ...)
J'ai trouvé la réponse ici pour être utile, et ne demande que "basic" informations sur le profil ":
J'ai utilisé avec succès cette approche, et peut le confirmer retourne l'objet JSON suivant:
{
"id": "..."
"email": "...",
"verified_email": true,
"name": "....",
"given_name": "...",
"family_name": "...",
"link": "...",
"picture": "...",
"gender": "male",
"locale": "en"
}
+1 pour cette réponse car elle adresse réellement les API Google que la question posée, par opposition à la réponse acceptée actuellement qui est juste du code Java aléatoire. –
la façon la plus simple d'obtenir cette information serait de Google + API Plus précisément, le
https://developers.google.com/+/api/latest/people/get
Lorsque vous utilisez l'api utiliser les éléments suivants HTTP GET:
GET https://www.googleapis.com/plus/v1/people/me
Cela renverra toutes les informations ci-dessus demandée à l'utilisateur.
Utilisez ce code pour accéder Google Gmail Connexion Credential oauth2:
Nom de la classe: OAuthHelper
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map.Entry;
import java.util.SortedSet;
import oauth.signpost.OAuth;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.OAuthProvider;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthProvider;
import oauth.signpost.commonshttp.HttpRequestAdapter;
import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
import oauth.signpost.exception.OAuthNotAuthorizedException;
import oauth.signpost.http.HttpParameters;
import oauth.signpost.signature.HmacSha1MessageSigner;
import oauth.signpost.signature.OAuthMessageSigner;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.util.Log;
public class OAuthHelper {
private static final String TAG = "OAuthHelper";
private OAuthConsumer mConsumer;
private OAuthProvider mProvider;
private String mCallbackUrl;
public OAuthHelper(String consumerKey, String consumerSecret, String scope, String callbackUrl) throws UnsupportedEncodingException {
mConsumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);
mProvider = new CommonsHttpOAuthProvider("https://www.google.com/accounts/OAuthGetRequestToken?scope=" + URLEncoder.encode(scope, "utf-8"), "https://www.google.com/accounts/OAuthGetAccessToken", "https://www.google.com/accounts/OAuthAuthorizeToken?hd=default");
mProvider.setOAuth10a(true);
mCallbackUrl = (callbackUrl == null ? OAuth.OUT_OF_BAND : callbackUrl);
}
public String getRequestToken() throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException {
String authUrl = mProvider.retrieveRequestToken(mConsumer, mCallbackUrl);
System.out.println("Gautam AUTH URL : " + authUrl);
return authUrl;
}
public String[] getAccessToken(String verifier) throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException {
mProvider.retrieveAccessToken(mConsumer, verifier);
return new String[] { mConsumer.getToken(), mConsumer.getTokenSecret() };
}
public String[] getToken() {
return new String[] { mConsumer.getToken(), mConsumer.getTokenSecret() };
}
public void setToken(String token, String secret) {
mConsumer.setTokenWithSecret(token, secret);
}
public String getUrlContent(String url) throws OAuthMessageSignerException, OAuthExpectationFailedException, OAuthCommunicationException, IOException {
HttpGet request = new HttpGet(url);
// sign the request
mConsumer.sign(request);
// send the request
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
// get content
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null)
sb.append(line + NL);
in.close();
System.out.println("gautam INFO : " + sb.toString());
return sb.toString();
}
public String getUserProfile(String t0, String t1, String url) {
try {
OAuthConsumer consumer = new CommonsHttpOAuthConsumer(t0, t1);
HttpGet request = new HttpGet(url);
// sign the request
consumer.sign(request);
// send the request
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
//String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null)
sb.append(line);
in.close();
System.out.println("Gautam Profile : " + sb.toString());
return sb.toString();
} catch (Exception e) {
System.out.println("Error in Geting profile Info : " + e);
return "";
}
}
public String buildXOAuth(String email) {
String url = String.format("https://mail.google.com/mail/b/%s/smtp/", email);
HttpRequestAdapter request = new HttpRequestAdapter(new HttpGet(url));
// Sign the request, the consumer will add any missing parameters
try {
mConsumer.sign(request);
} catch (OAuthMessageSignerException e) {
Log.e(TAG, "failed to sign xoauth http request " + e);
return null;
} catch (OAuthExpectationFailedException e) {
Log.e(TAG, "failed to sign xoauth http request " + e);
return null;
} catch (OAuthCommunicationException e) {
Log.e(TAG, "failed to sign xoauth http request " + e);
return null;
}
HttpParameters params = mConsumer.getRequestParameters();
// Since signpost doesn't put the signature into params,
// we've got to create it again.
OAuthMessageSigner signer = new HmacSha1MessageSigner();
signer.setConsumerSecret(mConsumer.getConsumerSecret());
signer.setTokenSecret(mConsumer.getTokenSecret());
String signature;
try {
signature = signer.sign(request, params);
} catch (OAuthMessageSignerException e) {
Log.e(TAG, "invalid oauth request or parameters " + e);
return null;
}
params.put(OAuth.OAUTH_SIGNATURE, OAuth.percentEncode(signature));
StringBuilder sb = new StringBuilder();
sb.append("GET ");
sb.append(url);
sb.append(" ");
int i = 0;
for (Entry<String, SortedSet<String>> entry : params.entrySet()) {
String key = entry.getKey();
String value = entry.getValue().first();
int size = entry.getValue().size();
if (size != 1)
Log.d(TAG, "warning: " + key + " has " + size + " values");
if (i++ != 0)
sb.append(",");
sb.append(key);
sb.append("=\"");
sb.append(value);
sb.append("\"");
}
Log.d(TAG, "xoauth encoding " + sb);
Base64 base64 = new Base64();
try {
byte[] buf = base64.encode(sb.toString().getBytes("utf-8"));
return new String(buf, "utf-8");
} catch (UnsupportedEncodingException e) {
Log.e(TAG, "invalid string " + sb);
}
return null;
}
}
// ================ ===================
Créer: WebViewActivity.class
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Window;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebViewActivity extends Activity {
//WebView webview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_PROGRESS);
WebView webview = new WebView(this);
webview.getSettings().setJavaScriptEnabled(true);
setContentView(webview);
// Load the page
Intent intent = getIntent();
if (intent.getData() != null) {
webview.loadUrl(intent.getDataString());
}
webview.setWebChromeClient(new WebChromeClient() {
// Show loading progress in activity's title bar.
@Override
public void onProgressChanged(WebView view, int progress) {
setProgress(progress * 100);
}
});
webview.setWebViewClient(new WebViewClient() {
// When start to load page, show url in activity's title bar
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
setTitle(url);
if (url.startsWith("my-activity")) {
Intent result = new Intent();
System.out.println("Gautam my-activity : " + url);
result.putExtra("myurl", url);
setResult(RESULT_OK, result);
finish();
}
}
@Override
public void onPageFinished(WebView view, String url) {
System.out.println("Gautam Page Finish...");
CookieSyncManager.getInstance().sync();
// Get the cookie from cookie jar.
String cookie = CookieManager.getInstance().getCookie(url);
System.out.println("Gautam Cookie : " + cookie);
if (cookie == null) {
return;
}
// Cookie is a string like NAME=VALUE [; NAME=VALUE]
String[] pairs = cookie.split(";");
for (int i = 0; i < pairs.length; ++i) {
String[] parts = pairs[i].split("=", 2);
// If token is found, return it to the calling activity.
System.out.println("Gautam=> "+ parts[0] + " = " + parts[1]);
if (parts.length == 2 && parts[0].equalsIgnoreCase("oauth_token")) {
Intent result = new Intent();
System.out.println("Gautam AUTH : " + parts[1]);
result.putExtra("token", parts[1]);
setResult(RESULT_OK, result);
finish();
}
}
}
});
}
}
// =========================
appeler depuis: MainActivity.class
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.http.HttpResponse;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener{
Button btnLogin;
OAuthHelper MyOuthHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnLogin = (Button)findViewById(R.id.btnLogin);
btnLogin.setOnClickListener(this);
}
@Override
protected void onResume() {
/*System.out.println("On Resume call ");
try {
String[] token = getVerifier();
if (token != null){
String accessToken[] = MyOuthHelper.getAccessToken(token[1]);
}
} catch (Exception e) {
System.out.println("gautam error on Resume : " + e);
}*/
super.onResume();
}
private String[] getVerifier(String url) {
// extract the token if it exists
Uri uri = Uri.parse(url);
if (uri == null) {
return null;
}
String token = uri.getQueryParameter("oauth_token");
String verifier = uri.getQueryParameter("oauth_verifier");
return new String[] { token, verifier };
}
@Override
public void onClick(View v) {
try {
MyOuthHelper = new OAuthHelper("YOUR CLIENT ID", "YOUR SECRET KEY", "https://www.googleapis.com/auth/userinfo.profile", "my-activity://localhost");
} catch (Exception e) {
System.out.println("gautam errorin Class call : " + e);
}
try {
String uri = MyOuthHelper.getRequestToken();
Intent intent = new Intent(MainActivity.this, WebViewActivity.class);
intent.setData(Uri.parse(uri));
startActivityForResult(intent, 0);
/* startActivity(new Intent("android.intent.action.VIEW",
Uri.parse(uri)));*/
} catch (Exception e) {
System.out.println("Gautm Error in getRequestTokan : " + e);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 0:
if (resultCode != RESULT_OK || data == null) {
return;
}
// Get the token.
String url = data.getStringExtra("myurl");
try {
String[] token = getVerifier(url);
if (token != null){
String accessToken[] = MyOuthHelper.getAccessToken(token[1]);
System.out.println("Gautam Final [0] : " + accessToken[0] + " , [1] : " + accessToken[1]);
//https://www.googleapis.com/oauth2/v1/userinfo?alt=json
// String myProfile = MyOuthHelper.getUserProfile(accessToken[0], accessToken[1], "https://www.googleapis.com/oauth2/v1/userinfo?alt=json");
String myProfile = MyOuthHelper.getUrlContent("https://www.googleapis.com/oauth2/v1/userinfo?alt=json");
}
} catch (Exception e) {
System.out.println("gautam error on Resume : " + e);
}
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
// =================================
Et enfin vos informations de profil à venir, il suffit de regarder dans votre Logcat message d'impression.
Note: Non oublié de mettre la permission Internet dans le fichier Manifest
Et votre application enregistrer dans Google Console ID client et clé secrète Pour App Inscription S'il vous plaît Recherche cette étape: App Registration Step
Si vous utilisez l'API google javascript, vous pouvez utiliser la nouvelle API "auth2" après l'authentification pour obtenir le profil de l'utilisateur, contenant:
- Nom
- URL de l'image
https://developers.google.com/identity/sign-in/web/reference#googleusergetbasicprofile
utiliser ce code se firstName et lastName d'un utilisateur Google
final HttpTransport transport = new NetHttpTransport();
final JsonFactory jsonFactory = new JacksonFactory();
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
.setAudience(Arrays.asList(clientId))
.setIssuer("https://accounts.google.com")
.build();
GoogleIdToken idToken = null;
try {
idToken = verifier.verify(googleAuthenticationPostResponse.getId_token());
} catch (GeneralSecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
GoogleIdToken.Payload payload = null;
if (idToken != null) {
payload = idToken.getPayload();
}
String firstName = payload.get("given_name").toString();
String lastName = payload.get("family_name").toString();
- 1. Android: comment puis-je obtenir le nom d'utilisateur, le prénom et le nom du compte google après login réussi
- 2. android obtenir le prénom de contact
- 3. Chaîne fractionnée pour le prénom et le nom dans vb.net
- 4. Quelle est la syntaxe de REGEXP php pour changer LastName, Prénom en Prénom Nom?
- 5. Utiliser ActiveX pour obtenir le nom d'utilisateur
- 6. Trier une structure par le prénom puis le prénom
- 7. Comment obtenir le prénom de chaque liste?
- 8. Java - entrée prénom prénom et nom?
- 9. Django, enregistrer l'utilisateur avec le prénom et le nom?
- 10. comment obtenir le nom de l'application pour un google doc?
- 11. Comment puis-je utiliser Lucene pour la recherche de nom (prénom, nom de famille)?
- 12. Javascript Expression régulière pour tenter de diviser le nom en Titre/Prénom (s)/Nom
- 13. comment utiliser les clés google api basé sur le nom de l'application heroku
- 14. Quelle API iPhone dois-je utiliser pour le streaming audio?
- 15. Java: Obtenir le prix de la position API Google Finance
- 16. Comment obtenir le prénom et le nom de l'utilisateur Windows connecté?
- 17. fonction pour obtenir le nom de n'importe quelle méthode?
- 18. Trier la liste après le nom, puis le prénom?
- 19. API Google Maps - Comment obtenir le nom de constante type de carte (G_NORMAL_MAP, G_SATELLITE_MAP ...)?
- 20. Formats Django: Comment obtenir le prénom et le nom d'un formulaire HTML?
- 21. Extrait le nom et prénom de l'adresse e-mail?
- 22. Utiliser JDT pour obtenir le nom complet de la méthode
- 23. Comment obtenir Lat, Alt sur Google Maps API ayant seulement le nom de la ville
- 24. Quelle clé de l'API Google Maps devrais-je utiliser pour le développement?
- 25. Comment utiliser Django pour obtenir le nom du serveur hôte?
- 26. Quelle API CouchDB utiliser pour Rails?
- 27. Comment puis-je utiliser le json google translate api?
- 28. PHP5 - Quel est le coût de RTTI (obtenir le nom de classe et etc.) en PHP5?
- 29. quelle API cloud utiliser - simplecloud?
- 30. facebook-flash-api obtenir le nom d'utilisateur sans PHP
Personne n'a la moindre idée de ce? J'ai été surpris moi-même quand je n'ai pas trouvé de réponse simple sur le site de google ... – Pranav
Est-ce que oauth est identique à openid? – anon
Essayez-vous d'obtenir le nom et l'image des contacts ou de l'utilisateur authentifié? –