it-swarm.com.de

Öffentliches Google/Google Mail-Bild eines Benutzers abrufen

Ich schreibe eine E-Mail-basierte Anwendung mit der Google Mail-API, und ich muss öffentliche Bilder für die E-Mail-Adresse abrufen, die von Google stammt. Ich habe gesehen, dass andere Anwendungen das tun, aber ich kann keinen Weg finden um diese Daten zuverlässig zu erhalten.

einige weitere informationen:

  • ich benutze oauth2, um den Benutzer anzumelden - und ich habe kein Problem, dort irgendwelche Berechtigungen anzufordern.
  • ich habe versucht, das Bild mit Google + API abzurufen - aber dazu ist eine Benutzer-ID erforderlich. Ich weiß nicht, wie ich die Benutzer-ID für die E-Mail-Adresse abrufen kann (gmail-api gibt es nicht, afaik).
  • ich habe versucht, die Kontakt-API zu verwenden - es werden jedoch nur Bilder für die Kontakte des Benutzers angezeigt, während die E-Mail-Clients auch Bilder von anderen Benutzern anzeigen können.

Vielen Dank!

Bearbeiten:

Ich weiß, dass ich die erforderlichen Bilder von Google Plus erhalten kann, wenn ich die Benutzer-ID des anderen Benutzers habe. Ich kann jedoch keine Möglichkeit finden, die Benutzer-ID anhand einer E-Mail-Adresse zu erhalten.

32
shaish

Ist sehr leicht

http://picasaweb.google.com/data/entry/api/user/<hereYourUserIdOrYourEmail>?alt=json

hat nur ein kleines problem.

Das Bild Ihres Google+ Profils erhalten Sie nur, nicht direkt von Google Mail.

UPDATE:

Diese API ist veraltet und wird im Januar 2019 deaktiviert. Migrieren Sie so bald wie möglich auf die Google Photos Library-API, um Unterbrechungen in Ihrer Anwendung zu vermeiden.

Info Hier

Migrationshandbuch

64
jose920405

UPDATE:

Diese API ist veraltet und wird im Januar 2019 deaktiviert. Migrieren Sie so bald wie möglich auf die Google Photos Library-API, um Unterbrechungen in Ihrer Anwendung zu vermeiden.

Info Hier

Basierend auf der Antwort von @ jose920405 habe ich diesen kostenlosen öffentlichen API-Dienst namens Pikmail API geschrieben. Hier einige Vorteile.

  • Keine Authentifizierung erforderlich.
  • Es ist völlig kostenlos und Open Source.
  • Es ist in Kotlin geschrieben.
  • Sie müssen keinen Wrapper schreiben, um die Antwort abzubilden.

Hier ist der Blogbeitrag über wie Pikmail-API intern arbeitet .

Verwendungszweck:

Html

<img src="https://pikmail.herokuapp.com/[email protected]?size=50" alt="Profile Picture">

Profile Picture

Java Android

Picasso.with(context).load("https://pikmail.herokuapp.com/[email protected]?size=50").into(imageView);

Fühlen Sie sich frei, mit Ihnen Pull-Anfragen beizutragen, Fehler zu öffnen oder neue Funktionen anzufordern hier .

Hinweis: Dieser Dienst basiert auf einer unabhängigen Bibliothek namens Pikmail , die als Gradle-Abhängigkeit in Ihren Java-Projekten (Server oder Android-Apps) verwendet werden kann.

19
epool

Google+ ist der richtige Weg, dies zu tun. Dies hat eigentlich nichts mit der Google Mail-API zu tun. Sie benötigen keine Benutzer-ID des Benutzers, sondern nur ein gültiges Zugriffstoken mit entsprechenden Bereichen.

https://www.googleapis.com/plus/v1/people/me?access_token=YOUR_ACCESS_TOKEN_HERE

Wenn kein Fehler/ungültiges Token/etc vorhanden ist, wird eine Reihe von Informationen über den Benutzer als JSON zurückgegeben. In diesen Daten ist ein URI für das Profilbild des Benutzers enthalten.

BEARBEITEN:

Um das Profilbild für einen Benutzer basierend auf der E-Mail-Adresse zu erhalten, suchen Sie zunächst nach dem Benutzer

https://www.google.com/m8/feeds/contacts/default/thin?q=EMAIL_ADDRESS_HERE

Sie können dann die richtige Benutzer-ID für diesen Benutzer von der zurückgegebenen JSON abrufen und diese verwenden, um ein Profilbild abzurufen.

6
James

ein einfaches Javascript, um ein öffentliches Profilbild von Google abzurufen:

<html>
<body>


<script type="text/javascript">
function getPhoto() {

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myArr = JSON.parse(this.responseText);
        try { 
            profilePic = myArr["feed"]["entry"][0]["media$group"]["media$thumbnail"][0]["url"]; 
            document.getElementById("demo").innerHTML="<img src='" + profilePic + "' width='160px' height='160px'>"
            }
        catch(err) { }

        }
    }
xmlhttp.open("GET", "https://picasaweb.google.com/data/feed/api/user/<EMAIL>?kind=album&alt=json", true);
xmlhttp.send();
}

</script>

<div id="demo" onclick="javascript:getPhoto();">click here to load photo</div>

</body>
</html>
2
eyal

Ich habe tagelang meinen Kopf dagegen gestoßen, da keine der Antworten mehr zu funktionieren schien. Was bei zukünftigen Änderungen robuster war und aussieht, war (es verwendet jQuery):

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://apis.google.com/js/api.js"></script>
<script type="text/javascript">
function image_attach(GA){
        user=GA.currentUser.get();
        url = user.getBasicProfile().getImageUrl();
        $('#thumbnail').attr('src', url);
}

function google_init() {
    gapi.load('auth2', function() {
            GA = gapi.auth2.init({
                    'client_id': '{YOUR_GOOGLE_CLIENT_ID}',
                    'fetch_basic_profile': true,
            });
            GA.then(function () {
                if (GA.isSignedIn.get()) {
                    image_attach(GA)
                }
                else {
                    GA.signIn().then( function() {
                        image_attach(GA)
                })}
            })
        });
}
</script>

Sie benötigen eine Google OAuth2-Client-ID - siehe https://developers.google.com/identity/protocols/OAuth2UserAgent für Details. Es scheint nicht nur mit einem API-Schlüssel zu funktionieren - aus den Antworten, die ich erhielt, haben sie die Quote für den nicht authentifizierten Zugriff auf die API (d. H. Nur mit dem Schlüssel und nicht mit der ClientID) auf Null gesetzt. 

Die Client-ID ist in der Cloud-Konsole verfügbar, wie im Link beschrieben. Ich denke, Sie müssen ein Projekt erstellen, um die Anmeldeinformationen zu erstellen. Wenn Sie sie jedoch nicht verwenden, wird Ihnen dies nicht in Rechnung gestellt. Dies stellt kein Problem dar. Der Benutzer muss dies tun angemeldet sein - wenn nicht, wird sich dieser Code dann anmelden. Wenn Sie jedoch ohnehin kein Google-Login für Ihre Seite verwenden, warum möchten Sie dann deren Miniaturbild? Weil die Bild-URL im Basisbenutzerprofil verfügbar ist. - Die API-Anforderung scheint keinen bestimmten Bereich zu benötigen, und der API-Aufruf enthält keinen Code.

Sie müssen die URL für die Seite, von der Sie anrufen, als Teil Ihrer Client-Anmeldeinformationen in der Google-Konsole angeben. Andernfalls wird die Anforderung abgelehnt. Es gibt ein Kontingent - ich glaube, es sind 20.000 am Tag - an kostenlosen API-Aufrufen, nach deren Ablauf Sie für die Verwendung der API berechnet werden. Das ist so viel, wie ich sammeln kann.

2
Paul Harwood

Bei der Beantwortung der Frage kann es zu spät sein, aber der beste Weg, den ich gefunden habe, war, __. http://picasaweb.google.com/data/entry/api/user/ ? Alt = json

in der JSON-Antwort erhalten Sie den Autorabschnitt, der Folgendes enthält: uri: $ t: https: picasaweb.google.com/0000000000000

jetzt sind die Zahlen am Ende die USER-ID, mit der das Benutzerprofil mithilfe dieser API abgerufen werden kann

https: www.googleapis.com/plus/v1/people/userId

Beispiel: https: www.googleapis.com/plus/v1/people/0000000000000

2
Ricky

Sie können die Google-App-Profil-API verwenden

hier ist der Beispielcode für den Zugriff auf das Profilbild

function getProfilePic(userName){
  userName = '[email protected]'; 
  var scope = 'https://www.google.com/m8/feeds/';
  var fetchArgs = googleOAuth_('Profile', scope);
  fetchArgs.method = 'GET';
  var domain = UserManager.getDomain();
  var url = 'https://www.google.com/m8/feeds/photos/profile/'+domain+'/'+userName+'?v=3';
  var rawData = UrlFetchApp.fetch(url, fetchArgs).getContentText();

 //here you get data into rawData variable

}

//google oAuth
function googleOAuth_(name,scope) {
  var oAuthConfig = UrlFetchApp.addOAuthService(name);
  oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
  oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
  oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
  oAuthConfig.setConsumerKey("anonymous");
  oAuthConfig.setConsumerSecret("anonymous");
  return {oAuthServiceName:name, oAuthUseToken:"always"};
}

weitere Informationen erhalten Sie hier

1
Satish Shinde

Nachdem Sie sich authentifiziert haben, können Sie Ihre Benutzerinformationen über die URL erhalten: https://www.googleapis.com/oauth2/v1/userinfo?alt=json

0
Gregory Buiko

Hier sind die nützlichsten Links, um ein Google-Profilbild zu erhalten.

1) Konfigurieren Sie ein Projekt https://developers.google.com/identity/sign-in/web/sign-in#before_you_begin

2) Aktivieren Sie die GOOGLE PHOTOS LIBRARY-API https://developers.google.com/photos/library/guides/get-started

Nachdem Sie die obigen Schritte eingerichtet haben, erhalten Sie nach der Authentifizierung den Link zum Profilbild des Benutzers.

Hinweis: Nachdem Sie die Google Photos Library-API aktiviert haben, erhalten Sie auch eine andere Client-ID und ein Client-Geheimnis. Sie können eines der oben genannten Client-Geheimnisse und Client-IDs von oben verwenden Schritte. Stellen Sie sicher, dass Sie in beiden obigen Schritten eine Weiterleitungs-URL angeben, damit der Benutzer nach erfolgreicher Authentifizierung zu dieser URL weitergeleitet werden kann.

0
Hasan Badshah

Sie können etwas wie : versuchen.

<?php 
$email = "YOUR_EMAIL_TO_FETCH";
$fetch_profile = "http://picasaweb.google.com/data/entry/api/user/".$email."?alt=json";
    $jsonURL = file_get_contents($fetch_profile);
    $json = json_decode($jsonURL);
    $profile_img = get_object_vars($json->entry);
    $profile_img = get_object_vars($profile_img['gphoto$thumbnail']);
    $profile_img = $profile_img['$t'];
?>

Ich hoffe das klappt.

0
JO JO

Wenn Sie Benutzer in Ihrer App bei Google mit der OAuth 2.0-API authentifizieren - beispielsweise mit Pass -> https://www.npmjs.com/package/passport-google-oauth20

Sie können den Bereich "Profil" anfordern, der Ihnen eine Reihe von Informationen von "displayName" zu den Fotos der Benutzerprofile "profile.photos [0]" liefert.

0
Dan Perry