2017年2月28日火曜日

Gmail APIでシステムとGmail(G Suite)を連携【調査編】

gmail-accessPOP3とSMTPを使うのは面白くないので、Gmail API経由でラベルを付けることでメールを削除することなくシステムと連携できると思い、試したときの覚書。

公式サイトを参考に

 

目次

  1. APIの使用制限
  2. システム用アカウントをGoogle Apps(G Suite)に追加
  3. Server-to-Serverのサービスアカウントを作成
  4. PHPサンプルを試す
  5. ウェブアプリケーションのOAuth2.0で認証

 


1.APIの使用制限

APIの使用制限がある。1日10億Quota Unit。メソッドごとに消費ユニットが違う。例えばメール送信は100ユニット消費する。

一秒間に250ユニットの制限がある。同時に3つ以上送信しようとすると制限に引っかかる。詳しくは公式サイトで。

メール送信はローカルのPostfixに任せた方がいいかもしれない。

 

クライアントライブラリが未成熟(?)

PHPはベータ版

Node.jsはまだアルファ版

 


2.システム用アカウントをGoogle Apps(G Suite)に追加

やろうと思っていることの概要。

システム専用のアカウントを作って、そのアカウント宛てに届いたメールを順次処理していく。

処理が終わったら「既読」ラベルを付けてアーカイブ。

Node.jsはアルファ版なのでWordPressのプラグインとしてPHPで開発することにした。

 


3.Server-to-Serverのサービスアカウントを作成

システム専用アカウントでGoogle Developer Consoleにアクセスして、API Keyを生成する。

公式サイトを参考に

簡単な手順

Gmail APIを有効にする(プロジェクトの作成)

認証情報を生成
「役割」はよく分からないので「ログ書き込み」を選択

キー情報のファイルがダウンロードされる

 


4.PHPサンプルを試す

GitHubからPHP用のクライアントライブラリをダウンロードする。

Releasesに置いてあるのは依存関係も含んでいるので、そのまま解凍すれば使える。

今のバージョンはv2.1.1

公式サイトのサンプルをGmail API用に変更して実行しても「アクセストークンがない」と怒られる。

"error": "unauthorized_client",
"error_description": "Client is unauthorized to retrieve access tokens using this method."

クライアントライブラリが自動でアクセストークンを取得すると思ったら違った。

よく分からないので「サービスアカウントキー」での認証は諦め。

前にやったことのある「ウェブアプリケーション」の認証方式で実装することにした。

 


5.ウェブアプリケーションのOAuth2.0で認証

公式サイトと前の記事を参考に。あとクライアントライブラリの仕様が変わってる。

 

スコープの設定メモ。

google-api-php-client\vendor\google\apiclient-services\src\Google\Service\Gmail.php
の最初の方にconstされている。

 

部下がこれやろうとしてたら「PHPMailerを使ってPOP3とSMTPでいいじゃん」というのは間違いない。

 

< Related Posts >

2017年2月27日月曜日

【PHP】composerをインストールして依存関係管理

php_composerGoogle先生の巨大ライブラリをリポジトリにコミットしたくなかったので、composerをインストールしたときの覚書。

環境: CentOS 7, PHP 7.0.16

 

参考サイト

 

目次

  1. composerとは
  2. YUM経由でインストール
  3. composerを使ってライブラリをインストール

 


1.composerとは

PHPの依存関係管理ツール。Node.jsのNPMやRubyのBundlerを参考にしている。

composer installするとcomposer.jsonを参照して「vendor」ディレクトリにライブラリがインストールされる。

composer.lockというファイルがあるとそちらを参照してそのバージョンをインストールするので、作った人と同じ環境を構築できる。

WordPressのプラグインみたいに別ディレクトリに設置してほしい場合も対応可能。

 


2.YUM経由でインストール

remiリポジトリにあった。バージョンは1.3.2
# yum install composer

依存関係で結構な数のライブラリがインストールされる。

確認
# composer --version

Do not run Composer as root/super user! See https://getcomposer.org/root for details
Composer version 1.3.2 2017-01-27 18:23:41

 


3.composerを使ってライブラリをインストール

インストールするライブラリはこちら。

今回WordPressプラグインの中で使う。
$ cd /path/to/wordpress/wp-content/plugins/hoge/

対話形式でcomposer.jsonを作ってみる。
$ composer init

{
    "name": "dksg/hoge",
    "type": "wordpress-plugin",
    "license": "MIT"
}

項目の意味はあとで公式ドキュメントを読む。

ライブラリインストール
$ composer require google/apiclient:^2.0

vendorディレクトリにライブラリがダウンロードされた。

.gitignoreでコミットしないようにする。
$ vi .gitignore

vendor/

 

ひとまず環境が整った。

 

< Related Posts >

2017年2月15日水曜日

Twitter Bootstrap利用サイトでIE8だとimgが表示されない

ie8_picture作ったサイトを念のためIE8で確認したら画像が表示されないので対応したときの覚書。

環境: Bootstrap 3.3.7, WordPress 4.7.2

 


1.【準備編】Windows7 + IE8の環境を作る(Hyper-V)

公式サイトでIE8を搭載した仮想マシンがダウンロードできる。

認証が必要。デスクトップに書いてあるのでそのままcmdで叩く。

 


2.IE8だけ読み込むCSSを用意

試した結果表示されない原因はdisplay: tableを指定していたから。

画像は基本的に中央揃えにしたかったので、次のように設定していた(lessを使ってる)。

.img-responsive {
    &:extend(.img-responsive all);
    display: table;
    margin: 0 auto;
}

 

他のに影響与えないでIE8のみに対応したかったので、IE8だけ読み込むCSSを用意して、そちらで対応することにした。

bootstrapを使うときにお約束の記述に追記(WordPressの関数を使ってる)。

<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<link rel='stylesheet' href='<?php echo get_template_directory_uri();?>/assets/css/ie8.css' type='text/css' />
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->

ie8.cssはこんな感じ。

.img-responsive {
    /* img tag disappear in IE8 when using display:table */
    display: block;
}

あとの細かいところは気にしない。

 

< Related Posts >

Related Posts Plugin for WordPress, Blogger...

Blog Archives