私はgmail-apiを使用して電子メールベースのアプリケーションを作成していますが、Googleから発信された電子メールアドレスのユーザーのパブリックイメージを取得する必要があります。他のアプリケーションがこれを行うのを見てきましたが、このデータを確実に取得する方法はありません。
さらなる情報:
ありがとう!
編集:
他のユーザーのユーザーIDを持っている場合、Google Plusから必要な画像を受け取ることができることを知っています。ただし、メールアドレスに基づいてユーザーIDを取得する方法が見つかりません。
更新:
このAPIは廃止され、2019年1月に廃止されます。アプリケーションの中断を避けるため、できるだけ早くGoogle Photos Library APIに移行してください。
情報 こちら
@ jose920405の回答に基づいて、 Pikmail API と呼ばれるこの無料のパブリックAPIサービスを作成しました。ここでいくつかの利点。
これは、Pikmail APIが内部的にどのように機能するかについての ブログ投稿です 。
使用法:
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);
プルリクエスト、オープンバグ、新機能のリクエスト こちら でお気軽に貢献してください。
注:このサービスは、 Pikmail と呼ばれる独立したライブラリに基づいており、Gradleの依存関係として使用できます。 Javaプロジェクト(サーバーまたはAndroidアプリ)。
Google+はこれを行う正しい方法です。これは実際にはGmail APIとは関係ありません。ユーザーのユーザーIDは必要ありません。適切なスコープを持つ有効なアクセストークンだけが必要です。
https://www.googleapis.com/plus/v1/people/me?access_token=YOUR_ACCESS_TOKEN_HERE
エラー/無効なトークンなどがない限り、これはユーザーに関する多くの情報をJSONとして返します。このデータには、ユーザーのプロフィール画像のURIが含まれます。
編集:
メールアドレスに基づいてユーザーのプロフィール写真を取得するには、まずユーザーを検索します
https://www.google.com/m8/feeds/contacts/default/thin?q=EMAIL_ADDRESS_HERE
その後、返されたJSONからそのユーザーの正しいユーザーIDを取得し、それを使用してプロファイルイメージを取得できます。
グーグルからパブリックプロファイル画像を取得するための簡単なJavaScript:
<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>
答えがもう機能しないように思えたので、私はこれに対して何日も頭を打ちました。機能し、将来の変更に対してより堅牢に見えるものは次のとおりでした(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>
Google OAuth2クライアントIDが必要です-詳細については https://developers.google.com/identity/protocols/OAuth2UserAgent をご覧ください。 APIキーだけでは機能しないようです-応答から、APIへの認証されていないアクセスのクォータを設定しました(つまり、ClientIDではなくキーを使用するだけ)。
リンクに記載されているように、クライアントIDはクラウドコンソールから入手できます-資格情報を作成するためにプロジェクトを作成する必要があると思いますが、使用していない場合は請求されないため、問題はありません。ログインします-そうでない場合、このコードはログインします。しかし、とにかくあなたのページにGoogleログインを使用していない場合-なぜそれらのサムネイルが必要ですか?画像URLは基本ユーザープロファイルから入手できるためです。 -APIリクエストは特定のスコープを必要としないようで、コード内のAPI呼び出しには何もありません。
Googleコンソールでクライアント認証情報の一部として呼び出し元のページのURLを識別する必要があります。そうでない場合、リクエストは拒否されます。割り当てがあります-1日あたり20,000であると思います-無料のAPI呼び出しがあり、その後はAPIの使用に対して課金されます。それは私が集めることができる限りです。
質問に答えるのが遅すぎるかもしれませんが、私が見つけた最良の方法は最初に使用することでした http://picasaweb.google.com/data/entry/api/user/ ?alt = json
jSONレスポンスから、uri:$ t:https:picasaweb.google.com/0000000000000を持つ著者セクションを取得します
末尾の数字は、このAPIを使用してユーザープロファイルを取得するために使用できるUSER IDです
https:www.googleapis.com/plus/v1/people/userId
例:https:www.googleapis.com/plus/v1/people/0000000000000
GoogleアプリプロファイルAPIを使用できます
こちらがプロフィール写真にアクセスするためのサンプルコードです
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"};
}
詳細情報を取得できます こちら
Googleプロフィール写真を取得するための最も便利なリンクを次に示します。
1)プロジェクトを構成します https://developers.google.com/identity/sign-in/web/sign-in#before_you_begin
2)GOOGLE PHOTOS LIBRARY APIを有効にします https://developers.google.com/photos/library/guides/get-started
上記の手順を設定すると、認証後の応答としてユーザーのプロフィール画像リンクが取得されます。
注:Google PhotosライブラリAPIを有効にした後、別のクライアントIDとクライアントシークレットも取得します。上記のクライアントシークレットとクライアントIDのいずれかを使用できますステップ。認証の成功後にユーザーがそのURLにリダイレクトされるように、上記の両方の手順でリダイレクトURLを指定する必要があります。
次のようなものを試すことができます:
<?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'];
?>
これがうまくいくことを願っています。
OAuth 2.0 APIを使用してアプリでユーザーを認証している場合-たとえば、パスポートを使用している場合-> https://www.npmjs.com/package/passport-google -oauth2
「profile」スコープを要求できます。これにより、displayNameからユーザーのプロフィール写真「profile.photos [0]」までの一連の情報が得られます