Google API一覧

Google Api PHP Client の インストール

Googleが提供しているPHP用のAPIクライアントをComposerを使ってインストールする。

 

ディレクトリを作成する

[sepg@sv6115 ~]$ mkdir myproject2
[sepg@sv6115 ~]$ cd myproject2

composer.pharをインストールする

[sepg@sv6115 myproject2]$ curl -s https://getcomposer.org/installer | php
[sepg@sv6115 myproject2]$ ll
-rwxr-xr-x 1 sepg members 1861877 4月 8 22:50 composer.phar

initで初期設定

[sepg@sv6115 myproject2]$ php composer.phar init

基本enterでよいかと

  Welcome to the Composer config generator



This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [sepg/myproject2]:
Description []:
Author [, n to skip]: n
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []:

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]?
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]?
Search for a package:

{
    "name": "sepg/myproject2",
    "require": {}
}

Do you confirm generation [yes]?

composer.jsonが出来上がる

[sepg@sv6115 myproject2]$ ll
合計 1824
-rw-r--r-- 1 sepg members      53  4月  9 20:30 composer.json
-rwxr-xr-x 1 sepg members 1861877  4月  8 22:50 composer.phar

requireコマンドでgoogle api clientを入れ込む

[sepg@sv6115 myproject2]$ php composer.phar require google/apiclient:^2.0

インストール中…

./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 14 installs, 0 updates, 0 removals
  - Installing psr/http-message (1.0.1): Downloading (100%)
  - Installing guzzlehttp/psr7 (1.4.2): Downloading (100%)
  - Installing react/promise (v2.5.1): Downloading (100%)
  - Installing guzzlehttp/streams (3.0.0): Downloading (100%)
  - Installing guzzlehttp/ringphp (1.1.0): Downloading (100%)
  - Installing guzzlehttp/guzzle (5.3.2): Downloading (100%)
  - Installing phpseclib/phpseclib (2.0.10): Downloading (100%)
  - Installing psr/log (1.0.2): Loading from cache
  - Installing monolog/monolog (1.23.0): Downloading (100%)
  - Installing firebase/php-jwt (v5.0.0): Downloading (100%)
  - Installing google/apiclient-services (v0.54): Downloading (100%)
  - Installing psr/cache (1.0.1): Downloading (100%)
  - Installing google/auth (v1.3.0): Downloading (100%)
  - Installing google/apiclient (v2.2.1): Downloading (100%)

完了するとvendor配下にgoogle apiが依存関係を保持しながら配置される

[sepg@sv6115 myproject2]$ ll vendor/
合計 4
-rw-r--r-- 1 sepg members 178  4月  9 20:45 autoload.php
drwxr-xr-x 2 sepg members 269  4月  9 20:45 composer
drwxr-xr-x 3 sepg members  29  4月  9 20:45 firebase
drwxr-xr-x 5 sepg members  77  4月  9 20:45 google
drwxr-xr-x 6 sepg members  82  4月  9 20:45 guzzlehttp
drwxr-xr-x 3 sepg members  29  4月  9 20:45 monolog
drwxr-xr-x 3 sepg members  31  4月  9 20:45 phpseclib
drwxr-xr-x 5 sepg members  66  4月  9 20:45 psr
drwxr-xr-x 3 sepg members  29  4月  9 20:45 react

実際にgoogle apiを使用する場合はvendor配下のautoload.phpをrequreすればOK

<?php
  require 'vendor/autoload.php';
?>

 


Gmail API 署名取得 方法(PHP)

署名を取得するには、まずsendAsの一覧を取得し、その中から署名を取り出す。
sendAsとはGmailのエイリアス設定のこと。

Google_Service_Gmailクラスのメンバ変数 $users_settings_sendAslistUsersSettingsSendAs() メソッドを呼び出してsendAsの一覧を取得する。

//サービスオブジェクトを生成
$service = new Google_Service_Gmail($client);
//sendAs一覧レスポンスを取得
$sendAsRes = $service->users_settings_sendAs->listUsersSettingsSendAs($userId);
//sendAs一覧を取得
$sendAs = $sendAsRes->getSendAs();
//デフォルトの署名を取得
foreach ($sendAs as $sendas) {
  if($sendas->isDefault) {
    $signature = $sendas.getSignature();
    echo $signature;
  }
}

Gmail API メール送信 方法(PHP)

送信メッセージの作成を関数化

function createMessage() {
    $msg = new Google_Service_Gmail_Message();
    $data = "";
    $data.= "To: hoge\n"; //送信先
    $data.= "Cc: fuga\n"; //CC
    $subject = "[タイトル]"; //タイトル
    $data.= "Subject: " . mb_encode_mimeheader($subject, 'utf-8') . "\n";
    $data.= "\n"; //改行2回でヘッダー部分を区別
    $body = <<<EOF
    [本文内容]
EOF;
    $data.= $body;
    $data = base64_encode($data); //base64エンコードする
    $data = strtr($data, '+/', '-_'); //サニタイジング
    $data = rtrim($data, '='); //最後の'='を除去
    $msg->setRaw($data); //データをセット
    return $msg;  //返却
}
ポイント
  • Google_Service_Gmail_Messageクラスのオブジェクトを生成
  • タイトルをUTF-8でMIMEエンコード
  • BODY部はbase64エンコード

 

上記の関数を使用してメッセージを送信する

//オブジェクト生成
$service = new Google_Service_Gmail($client);
//メッセージ作成
$message = createMessage();
//メッセージ送信
$message = $service->users_messages->send($userId, $message);

赤アンダーラインがメッセージ送信の肝のメソッド

参考 sendメソッドの詳細はこちら


Gmail API メール取得 方法(PHP)

Gmail APIを使用してメッセージを取得するサンプル

メッセージ一覧取得

Gmail APIを使用したメッセージ一覧取得処理を関数化したもの

メッセージ一覧は一度に取得するのではなく、何回かに分割して取得し前回分にマージしていく。

その際の取得範囲を決定する情報がページトークン

function listMessages($service, $userId) {
  $pageToken = NULL; //ページトークン
  $messages = array(); //メッセージ
  $opt_param = array(); //オプションパラメータ
  do {
    try {
      if ($pageToken) {
        $opt_param['pageToken'] = $pageToken; //ページトークンをセット
      }
      //メッセージ一覧を取得
      $messagesResponse = $service->users_messages->listUsersMessages($userId, $opt_param);
      if ($messagesResponse->getMessages()) {
        //マージする
        $messages = array_merge($messages, $messagesResponse->getMessages());
        //ページトークン取得
        $pageToken = $messagesResponse->getNextPageToken();
      }
    } catch (Exception $e) {
      print 'An error occurred: ' . $e->getMessage();
    }
  } while ($pageToken);
  //メッセージを返却
  return $messages;
}

赤アンダーラインの箇所がメッセージ一覧を取得する肝のメソッド

メッセージ一覧は正確にはメッセージIDの一覧だと思ってください。

メッセージの具体的な内容の取得は次に説明するメッセージ取得でおこなう。

参考 listUsersMessagesメソッドの詳細についてはこちら

メッセージ取得

個々のメッセージを取得する場合の処理を関数化したもの

function getMessage($service, $userId, $messageId) {
  try {
    //メッセージ取得
    $message = $service->users_messages->get($userId, $messageId);
    //返却
    return $message;
  } catch (Exception $e) {
    print 'An error occurred: ' . $e->getMessage();
  }
}

赤アンダーラインの箇所がメッセージ取得の肝のメソッド

参考 getメソッドの詳細についてはこちら

メッセージ本文取得

function getMessageBody($message) {
  //bodyを取得
  $body = $message->getPayload()->getBody();
  $rawData = $body->data;
  $sanitizeData = strtr($rawData, '-_', '+/'); //サニタイジングを戻す
  $decodeMessage = base64_decode($sanitizeData); //base64デコード
  //返却
  return $decodeMessage;
}
メッセージ本文はbase64エンコードされているためデコードする

一連の処理サンプル

//サービスオブジェクト
$service = new Google_Service_Gmail($client);
//ユーザーID(当該ユーザーの場合は'me'を渡す)
$userId = 'me';
//メッセージ(ID)一覧
$messages = listMessages($service, $userId);
//ループ
foreach ($messages as $msg) {
  //メッセージID
  $messageId = $msg->getId();
  //メッセージ(オブジェクト)取得
  $message = getMessage($service, $userId, $messageId);
  //メッセージ本文取得
  $messageBody = getMessageBody($message);
  //出力
  echo $messageBody;
}

Gmail API PHP の手引き2

Google_Service_Gmail_UsersMessages
_Resourceクラス

Google_Service_Gmailクラスのメンバ変数 $users_messages の型(クラス)となる。

ユーザーメッセージの取得や送信などGmailの基本的な処理に使用

主なメソッドは以下のとおり

getメソッド

指定されたメッセージを取得する。

  /**
   * @引数1 string $userId //ユーザーID
   * @引数2 string $id //メッセージID
   * @引数3 array $optParams //オプションパラメータ
   * @返り値 Google_Service_Gmail_Message //オブジェクト
   */
public Google_Service_Gmail_Message get($userId, $id, $optParams = array())

listUsersMessagesメソッド

ユーザーのメールボックスにあるメッセージを一覧表示する。

  /**
   * @引数1 string $userId //ユーザーID
   * @引数2 array $optParams //オプションパラメータ
   * @返り値 Google_Service_Gmail_ListMessagesResponse //オブジェクト
   */
  public Google_Service_Gmail_ListMessagesResponse listUsersMessages($userId, $optParams = array())

sendメソッド

指定したメッセージを送信する。

  /**
   * @引数1 string $userId //ユーザーID
   * @引数2 Google_Service_Gmail_Message $message//メッセージ
   * @引数3 array $optParams //オプションパラメータ
   * @返り値 Google_Service_Gmail_Message //オブジェクト
   */
  public Google_Service_Gmail_Message send($userId, $message, $optParams = array())

参考 その他のメソッドについてはこちら

ソースコードサンプル

メール取得方法

メール送信方法

 

Gmail API Client PHP の手引き1

 

Google_Service_Gmail
_UsersSettingsSendAs_Resourceクラス

Google_Service_Gmailクラスのメンバ変数 $users_settings_sendAs の型(クラス)となる。

署名の取得など、Gmailのエイリアス情報にアクセスする。

listUsersSettingsSendAsメソッド

/**
 * @引数1 string $userId //ユーザーID
 * @引数2 array $optParams //オプションパラメータ
 * @返り値 e_Service_Gmail_ListSendAsResponse //オブジェクト
 */
listUsersSettingsSendAs( string $userId, array $optParams = array() )

ソースコードサンプル

署名取得方法


Gmail API PHP の手引き1

Gmail APIの概要

googleが提供しているgmail用APIの主な使い方。

実際に使用する際にはgoogleの管理コンソールで設定したりクライアントライブラリを取得したりといろいろお膳立てがあるが、ここでは主にAPIの使い方に重きをおいて書く。

グーグルのAPIを使用する際に基本となるサービスクラスがあるが、Gmailの場合はそのサービスクラスがGoogle_Service_Gmailクラスになる。

このサービスクラスにクライアント情報(認証用キーファイル、ユーザーアカウントなど)を付随させつつ、しかるべきメソッドにアクセスして目的を果たすというようなイメージ

google-api-php-clientのインストール

composerを使ってgoogle-api-php-clientをインストールする。

参照 google-api-php-clientのインストール

クライアント情報(オブジェクト)の生成

実際にGmail APIを使用する場合、まずはじめにクライアント情報となるオブジェクトを生成し、必要な情報をセットする。

$client = new Google_Client();
$client->setApplicationName([アプリケーション名]); //たぶん何でもよい
$client->setAuthConfig([認証用キーファイル]); //JSONファイル
$client->setScopes([スコープ]); //グーグルの管理コンソールで設定する値
$client->setSubject([ユーザーアカウント]); //メールボックスにアクセスするユーザーのメールアカウント

このオブジェクト($client)を、以下で説明するGoogle_Service_Gmailクラスのオブジェクトを生成する際の引数としてセットする。

Google_Service_Gmailクラス

gmailのAPIを使用する際にメインとなるサービスクラス

使い方としてはまずGoogle_Service_Gmailクラスのオブジェクトを生成し、そのオブジェクトのメンバ変数がもつメソッドを呼び出すことによりメッセージの取得や送信などさまざまな処理をおこなう。

//クラスのオブジェクトを生成する
$service = new Google_Service_Gmail($client)
//メンバ変数のメソッドを呼び出す
$messages = $service->user_messages->get(userId, $id, optParams)

メンバ変数(プロパティ)

$users
$users_drafts
$users_history
$users_labels
$users_messages
$users_messages_attachments
$users_settings
$users_settings_filters
$users_settings_forwardingAddresses
$users_settings_sendAs
$users_settings_sendAs_smimeInfo
$users_threads

リンクをクリックするとそのメンバ変数がもつクラスとそのメソッドを参照できます。

これで基本的なメソッドの使用方法がご理解いただけたかと。しかしメソッドを使ってメッセージ(オブジェクト)を取得した場合、その内部構造はどうなるのか?

それが以下で説明するGoogle_Service_Gmail_Messageクラス

Google_Service_Gmail_Messageクラス

gmailメッセージ本体の型(クラス)

例えばメッセージ取得メソッドによって取得したオブジェクトの型がこれに相当する。

//@返り値 Google_Service_Gmail_Message $message
$message = $service->users_messages->get($userId, $messageId);

そのオブジェクトからさらにメールタイトルや本文内容を取得したい場合はゲッターメソッド(get○○)を使用する。

また、メッセージを送信する場合はこのクラスのオブジェクトを生成して、セッターメソッド(set○○)で必要な値をセットした後、メッセージ送信メソッドで送信する。

//オブジェクトを生成
$message = new Google_Service_Gmail_Message();
//必要な値をセット
$message->setRaw($raw);
//メソッド呼び出し
$service->user_messages->send($userId, $message);


Google_Service_Gmail_Messageクラスの内部構造(プロパティ)は以下のようになっている。

{
  "id": string,
  "threadId": string,
  "labelIds": [
    string
  ],
  "snippet": string,
  "historyId": unsigned long,
  "internalDate": long,
  "payload": {
    "partId": string,
    "mimeType": string,
    "filename": string,
    "headers": [
      {
        "name": string,
        "value": string
      }
    ],
    "body": users.messages.attachments Resource,
    "parts": [
      (MessagePart)
    ]
  },
  "sizeEstimate": integer,
  "raw": bytes
}

各プロパティに対して以下のようなゲッター、セッターが存在する。

ゲッター・セッター一覧

setHistoryId( mixed $historyId )
getHistoryId()
setId( mixed $id )
getId()
setInternalDate( mixed $internalDate )
getInternalDate()
setLabelIds( mixed $labelIds )
getLabelIds()
setPayload( Google_Service_Gmail_MessagePart $payload )
getPayload()
setRaw( mixed $raw )
getRaw()
setSizeEstimate( mixed $sizeEstimate )
getSizeEstimate()
setSnippet( mixed $snippet )
getSnippet()
setThreadId( mixed $threadId )
getThreadId()

ソースコードサンプル

以上がGmail APIを使用する際のおおまかな説明

具体的なサンプルを記載しましたので上記を踏まえた上でご覧いただければと

メール取得方法

メール送信方法

署名取得方法

 

Gmail API Client PHP の手引き2