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:
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.
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
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.
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">
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.
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.
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>
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.
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
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
Nachdem Sie sich authentifiziert haben, können Sie Ihre Benutzerinformationen über die URL erhalten: https://www.googleapis.com/oauth2/v1/userinfo?alt=json
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.
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.
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.