web-dev-qa-db-ja.com

ユーザーの公開Google / Gmail画像の取得

私はgmail-apiを使用して電子メールベースのアプリケーションを作成していますが、Googleから発信された電子メールアドレスのユーザーのパブリックイメージを取得する必要があります。他のアプリケーションがこれを行うのを見てきましたが、このデータを確実に取得する方法はありません。

さらなる情報:

  • 私はoauth2を使用してユーザーをサインインしています-そして、そこにどんなタイプの許可を要求しても問題ありません。
  • 私はgoogle + apiを使用して画像を取得しようとしましたが、そのためにはuserIDが必要です-そして、私は電子メールアドレスのuserIdを取得する方法がわかりません(gmail-apiはそれを与えません、afaik)。
  • 連絡先APIを使用しようとしましたが、ユーザーの連絡先の画像のみを提供しますが、メールクライアントは他のユーザーの画像も表示できます。

ありがとう!

編集:

他のユーザーのユーザーIDを持っている場合、Google Plusから必要な画像を受け取ることができることを知っています。ただし、メールアドレスに基づいてユーザーIDを取得する方法が見つかりません。

33
shaish

とても簡単です

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

少し問題があります。

Gmailから直接ではなく、Google +プロフィールの写真のみを取得できます。

更新:

このAPIは廃止され、2019年1月に廃止されます。アプリケーションの中断を避けるため、できるだけ早くGoogle Photos Library APIに移行してください。

情報 ここ

移行ガイド

63
jose920405

更新:

この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">

Profile Picture

Java Android

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

プルリクエスト、オープンバグ、新機能のリクエスト こちら でお気軽に貢献してください。

注:このサービスは、 Pikmail と呼ばれる独立したライブラリに基づいており、Gradleの依存関係として使用できます。 Javaプロジェクト(サーバーまたはAndroidアプリ)。

19
epool

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を取得し、それを使用してプロファイルイメージを取得できます。

4
James

グーグルからパブリックプロファイル画像を取得するための簡単な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>
2
eyal

答えがもう機能しないように思えたので、私はこれに対して何日も頭を打ちました。機能し、将来の変更に対してより堅牢に見えるものは次のとおりでした(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の使用に対して課金されます。それは私が集めることができる限りです。

2
Paul Harwood

質問に答えるのが遅すぎるかもしれませんが、私が見つけた最良の方法は最初に使用することでした 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

2
Ricky

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

詳細情報を取得できます こちら

1
Satish Shinde

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を指定する必要があります。

0
Hasan Badshah

次のようなものを試すことができます:

<?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'];
?>

これがうまくいくことを願っています。

0
JO JO

OAuth 2.0 APIを使用してアプリでユーザーを認証している場合-たとえば、パスポートを使用している場合-> https://www.npmjs.com/package/passport-google -oauth2

「profile」スコープを要求できます。これにより、displayNameからユーザーのプロフィール写真「profile.photos [0]」までの一連の情報が得られます

0
Dan Perry