Thursday, May 4, 2017

Gmail API を使って最初にMessageをダウンロードするときに設定する権限

Gmail APIを試してみようと思ったら最初にサンプルにあるQuick Startを実装してみてラベルの一覧を出してみると思います。
そのあと、メッセージの一覧を取得しようということになると思いますが、
私の様によく考えないで最短距離を行こうとするとこのメッセージでエラーになります。
Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Insufficient Permission",
    "reason" : "insufficientPermissions"
  } ],
  "message" : "Insufficient Permission"
}

チュートリアルにはGoogle APIで権限の設定について
手取り足取り書いてくれていないので、
これを説明しておいて欲しかったということを下記に。

Quick Startサンプルではこうなっていると思います。
    /** Global instance of the scopes required by this quickstart.
     *
     * If modifying these scopes, delete your previously saved credentials
     * at ~/.credentials/gmail-java-quickstart
     */
    private static final List SCOPES =

            Arrays.asList(GmailScopes.GMAIL_LABELS);

これを以下の様に
    private static final List SCOPES =
            Arrays.asList(GmailScopes.GMAIL_READONLY);

あるいはこんな風に
    private static final List SCOPES
    Arrays.asList(GmailScopes.MAIL_GOOGLE_COM);

その他authorizationの中から一つ以上を選んで下さい。

これでMessageにアクセスする権限がつく筈ですが、
Quick Startのソースを流用して作成していると上手く行きません。

実は下記のパスに権限情報のファイルをキャッシュしているので、
このファイルを削除してクリアするか、


ファイルのパスをQuick Startのものから変更しないといけません。

/** Directory to store user credentials for this application. */
private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"),
".credentials/gmail-java-quickstart");

以上でQuick Startサンプルからの修正で





No comments:

Post a Comment