2014-09-01 15 views
18

Ich schreibe eine E-Mail-basierte Anwendung mit der gmail-API, und ich muss die öffentlichen Bilder des Benutzers für die von google stammende E-Mail-Adresse abrufen. Ich habe gesehen, andere Anwendungen tun, aber ich kann nicht eine Möglichkeit, diese Daten zuverlässig zu bekommen.Abrufen des öffentlichen google/gmail-Bildes eines Benutzers

einige weitere Informationen:

  • ich verwende oauth2 der Benutzer sich anmelden - und ich habe kein Problem, da jede Art von Berechtigungen anfordern.
  • Ich habe versucht, das Bild mit der Google + API abrufen - aber es erfordert eine userID dafür - und ich weiß nicht, wie man die userId für die E-Mail-Adresse (gmail-api gibt es nicht, afaik) .
  • Ich habe versucht, mit der Kontakte-API - aber es gibt nur Bilder für die Kontakte des Benutzers, während die E-Mail-Clients können auch Bilder von anderen Benutzern angezeigt werden.

Vielen Dank!

Edit:

weiß, dass ich ich die erforderlichen Bilder von Google erhalten kann plus, wenn ich die anderen Benutzer-Benutzer-ID haben. Ich finde jedoch keine Möglichkeit, die Benutzer-ID basierend auf einer E-Mail-Adresse zu erhalten.

+0

Bitte erwähnen Sie die Programmiersprache, die Sie gerade verwenden ?? –

+0

Ich benutze Objective C (aber eine Antwort in jeder Sprache wäre ok) – shaish

+0

@shaish hat das jemals gelöst? Ich frage mich das Gleiche. –

Antwort

40

Ist sehr einfach erhalten

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

nur hat ein kleines Problem. verwenden war zu http://picasaweb.google.com/data/entry/api/user/

Sie können nur das Bild von Ihrem Google+ Profil erhalten, nicht direkt von Ihrem gmail

+0

überraschend funktioniert das! – shaish

+0

Funktioniert nur mit Google Mail-Konten, nicht mit Google Apps-Konten –

+2

Kann auch Dienste wie zum Beispiel versuchen: http://www.avatarapi.com – Guillaume

5

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

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

Es sei denn, es ist ein Fehler/ungültigen Token/etc, das eine Reihe von Informationen über den Benutzer als JSON zurück. In diesen Daten ist ein URI für das Profilbild des Benutzers enthalten.

EDIT:

Um das Profilbild für einen auf der E-Mail-Adresse basierten Benutzer zu erhalten, erste Suche nach dem Benutzer

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

können Sie dann den richtigen Benutzer-ID aus dem für diesen Benutzer abrufen gab JSON zurück und verwendete es, um ein Profilbild zu erhalten.

+1

Dies ist für das Abrufen des Abbilds des Benutzers, der derzeit angemeldet ist - kein Problem damit. aber ich muss das Bild von anderen Benutzern bekommen. – shaish

+0

Danke für die Bearbeitung. Dies gibt mir jedoch nur den Kontakt-Feed des anfragenden Benutzers. Da ist ein Profilbild (das ist nicht das richtige), aber ich kann die google + Benutzer-ID in keinem Feld finden.Auch ich denke, es ignoriert die q = Abfrage, aber wahrscheinlich ist das einfach zu lösen. – shaish

+0

''YOUR_ACCESS_TOKEN_HERE' läuft nicht ab? – Satyadev

1

können Sie Google App-Profil verwenden API

hier den Beispielcode profile pic

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"}; 
} 

zugreifen können Sie weitere Informationen here

+1

Wenn ich richtig verstehe, wird diese API für Google-Domains verwendet, nicht für allgemeine Google Mail-Benutzer. Außerdem ist es veraltet .. und die neue Admin API sieht nicht so aus, als würde sie auch mein Problem lösen. – shaish

1

kann es zu spät sein, um die Frage zu beantworten, aber die beste Weise, die ich zuerst gefunden?alt = json

aus der JSON-Antwort werden Sie Autor Abschnitt erhalten, das hat uri: $ t: https: picasaweb.google.com/0000000000000

jetzt die Zahlen am Ende ist die Benutzer-ID, die sein kann www.googleapis.com/plus/v1/people/userId

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

https Abrufen von Benutzerprofil unter Verwendung dieser API verwendet

+0

Bitte formatieren Sie Ihre Antwort zum besseren Lesen. – moritzg

+0

Neben den Formatierungsproblemen funktionierte diese Antwort perfekt für mich. Beachten Sie auch, dass Sie einen gültigen Zugriffsschlüssel in der Google-Konsole benötigen, um den letzten Endpunkt abzufragen. '? key = XXX' muss zu dieser URL hinzugefügt werden. – cameronmoreau

0

ein einfaches Javascript, um PU zu holen Blic Profil-Bild von Google:

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

Basierend auf @ jose920405 Antwort, habe ich das kostenlose öffentliche API Service Pikmail API genannt 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 für die Zuordnung der Antwort schreiben.

Hier ist der Blogpost über how Pikmail API works internally.

Verbrauch:

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 Anträge zu ziehen, öffnen Sie Fehler oder fordern Sie neue Funktionen here.

Hinweis: Dieser Dienst basiert auf einer unabhängigen Bibliothek namens Pikmail, das als Gradle Abhängigkeit in Ihre Java-Projekte (Server oder Android-Anwendungen) verwendet werden können.

0

Wenn Sie Nutzer in Ihrer App mit Google sind die Authentifizierung des OAuth 2.0 API -Für Beispiel mit Pass mit ->https://www.npmjs.com/package/passport-google-oauth20

Sie können den „Profil“ scope beantragen, die Ihnen eine Reihe von Informationen aus display gibt zu die Benutzer Profilfotos "profile.photos [0]"

Verwandte Themen