[Gmail API] Javaでメールボックス内のラベルを取得する

Gmail API v1（Java）を使用して、
Gmailのメールボックス内のラベルを取得する方法
についてご紹介します。

**ラベルとは**
メールにつける印みたいなものです。
ラベルを作ることでラベル毎に整理、管理することができます。

Gmailの「設定」 -> 「ラベル」 から確認・設定できます。
作成可能なラベルは10,000個までです。
<img width=480 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/e839e8e4-897b-863e-5279-667793b3f265.png">
ラベルにはシステムが用意したsystemとユーザーが作成したuserが存在します。
systemのラベルは作成したり削除することはできません。([3. システムラベル](#3-システムラベル))

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Gmail API] JavaでGmail APIを使う](https://qiita.com/doran/items/a078e966bfd93c4b19c2)
を参照ください。
:::

本文中の引数にある「メールアドレス」の指定は、
OAuth 2.0使用の場合は「me」（自身）と指定してください。
「me」は認証されたユーザーを示します。

|No||目次|
|---|---|---|
|1||[ラベル一覧を取得](#1-ラベル一覧を取得)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[ラベルを取得](#2-ラベルを取得)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|
|3||[システムラベル](#3-システムラベル)|


## 1. ラベル一覧を取得
メールボックス内のラベル一覧を取得します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
GmailScopes.MAIL_GOOGLE_COM
GmailScopes.GMAIL_MODIFY
GmailScopes.GMAIL_READONLY
GmailScopes.GMAIL_LABELS
GmailScopes.GMAIL_METADATA
```
[⧉[Gmail API] JavaでGmail APIを使う(2.2 Gmailインスタンスを取得)](https://qiita.com/doran/items/a078e966bfd93c4b19c2#22-gmailインスタンスを取得)
でスコープを指定してください。
### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    Gmail gmail = getGmail();
    Gmail.Users users = gmail.users();
    
    Gmail.Users.Labels labels = users.labels();
    Gmail.Users.Labels.List list = labels.list("メールアドレス");
    
    ListLabelsResponse res = list.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/labels
が実行されます。

#### 1.2.2. クエリパラメータ
クエリパラメータはありません。

### 1.3. レスポンスの内容

#### ListLabelsResponse

|メソッド|戻り値|説明|
|---|---|---|
|getLabels|List\<[Label](#label)\>|ラベルのリスト|

#### Label

|メソッド|戻り値|説明|
|---|---|---|
|getId|String|ラベルID|
|getName|String|ラベルの表示名<br>階層で親がある場合は、「/」でつなげた名前になる<br>例："親/子/孫"|
|getMessageListVisibility|[MessageListVisibility(enum)](#messagelistvisibility)|「メール リストに表示」の設定|
|getLabelListVisibility|[LabelListVisibility(enum)](#labellistvisibility)|「ラベル リストに表示」の設定|
|getType|[Type(enum)](#type)|所有者タイプ|
|getMessagesTotal|Integer|メッセージの総数|
|getMessagesUnread|Integer|未読メッセージの数|
|getThreadsTotal|Integer|スレッドの総数|
|getThreadsUnread|Integer|未読のスレッドの数|
|getColor|[Color](#color)|ラベルに割り当てる色|

#### MessageListVisibility
Gmailのラベル設定メニューの「メール リストに表示」の内容です。
|定義値|内容|
|---|---|
|show|メールリストに表示|
|hide|メールリストに非表示|

#### LabelListVisibility
Gmailのラベル設定メニューの「ラベル リストに表示」の内容です。
|定義値|内容|
|---|---|
|labelShow|ラベルリストに表示|
|labelShowIfUnread|未読の場合はラベルリストに表示|
|labelHide|ラベルリストに非表示|

#### Type

|定義値|内容|
|---|---|
|system|Gmailで作成されたラベル|
|user|ユーザーまたはアプリケーションによって作成されたカスタムラベル|

#### Color

|メソッド|戻り値|説明|
|---|---|---|
|getTextColor|String|ラベルのテキスト色<br>例："#684e07"|
|getBackgroundColor|String|背景色<br>例："#fdedc1"|

## 2. ラベルを取得
指定したラベルの詳細内容を取得します。

### 2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
GmailScopes.MAIL_GOOGLE_COM
GmailScopes.GMAIL_MODIFY
GmailScopes.GMAIL_READONLY
GmailScopes.GMAIL_LABELS
GmailScopes.GMAIL_METADATA
```
[⧉[Gmail API] JavaでGmail APIを使う(2.2 Gmailインスタンスを取得)](https://qiita.com/doran/items/a078e966bfd93c4b19c2#22-gmailインスタンスを取得)
でスコープを指定してください。

### 2.2. 実行
```java
public static void main(String[] args) throws Exception{
    Gmail gmail = getGmail();
    Gmail.Users users = gmail.users();
    
    Gmail.Users.Labels labels = users.labels();
    Gmail.Users.Labels.Get get = labels.get("メールアドレス","ラベルID");
    
    Label res = get.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/labels/{ラベルID}
が実行されます。

#### 2.2.2. クエリパラメータ
クエリパラメータはありません。

### 2.3. レスポンスの内容

#### Label

[1.3. レスポンスの内容(Label)](#label)の内容と同じです。

## 3. システムラベル
typeが「system」であるラベル一覧を下記に示します。
(あくまで筆者の環境で取得した情報です。)

|id|name|説明|
|---|---|---|
|INBOX|INBOX|受信トレイ|
|STARRED|STARRED|スター付き|
|IMPORTANT|IMPORTANT|重要|
|CHAT|CHAT|チャット|
|SENT|SENT|送信済み|
|DRAFT|DRAFT|下書き|
|SPAM|SPAM|迷惑メール|
|TRASH|TRASH|ゴミ箱|
|CATEGORY_SOCIAL|CATEGORY_SOCIAL|ソーシャル(カテゴリ)|
|CATEGORY_UPDATES|CATEGORY_UPDATES|新着(カテゴリ)|
|CATEGORY_FORUMS|CATEGORY_FORUMS|フォーラム(カテゴリ)|
|CATEGORY_PROMOTIONS|CATEGORY_PROMOTIONS|プロモーション(カテゴリ)|

<br>
<br>
おしまい。。