PHPのコマンドラインアプリでGoogle Driveに繋いでファイル一覧を取得する

2019年2月17日

自分用の備忘録の意味も込めてPHPで必要ソフトのインストールからファイル一覧の取得までを書きました。

ここでやるのは…

・サーバーのコマンドライン環境で認証ページへのリンクを発行

・発行したリンクに遷移し、Webブラウザでユーザー認証する。

・認証後に発行されたコードをコマンドラインに入力し、トークンを取得。

・トークンを使用して、認証したユーザがGoogle Driveにアップロードしたファイル一覧を表示する。

です。

環境

OSCentOS7
PHP7.2.13
(※APIクライアントはPHPバージョン5.4以上で動作します。)

API使用に最低必要なもの

・PHP実行環境

・API Client Library for PHP (Beta) 

・資格情報ファイル(credentials.json)

APIライブラリでGoogle DriveのAPIを検索

Google APIsのページに移動してGoogle Drive APIを検索します。

https://console.developers.google.com/apis/library

Google Drive APIを押下し、有効化します。

有効化完了。

Composerのインストール

PHPクライアントはパッケージ管理ツールのComposerを使用します。

yum install composer

続いてcomposer.jsonの作成です。
クライアントを使用する作業フォルダを作成。

mkdir gdrive
cd gdrive/

作業フォルダへ移動したら 以下コマンドを実行。

今回は全部Enterで保存します。

[root@localhost gdrive]# composer init
Do not run Composer as root/super user! See https://getcomposer.org/root for details


  Welcome to the Composer config generator



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

Package name (<vendor>/<name>) [root/gdrive]:
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": "root/gdrive",
    "require": {}
}

Do you confirm generation [yes]?

composer.jsonに以下を追記して保存します。

"require": {
  "google/apiclient": "^2.0"
}

PHPクライアントのインストール

Google Driveに接続するためのクライアントをインストールします。

依存パッケージも同時に自動インストールされます。

[root@localhost gdrive]# composer install
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 13 installs, 0 updates, 0 removals
  - Installing ralouphie/getallheaders (2.0.5): Downloading (100%)
  - Installing psr/http-message (1.0.1): Downloading (100%)
  - Installing guzzlehttp/psr7 (1.5.2): Downloading (100%)
  - Installing guzzlehttp/promises (v1.3.1): Downloading (100%)
  - Installing guzzlehttp/guzzle (6.3.3): Downloading (100%)
  - Installing phpseclib/phpseclib (2.0.13): Downloading (100%)
  - Installing psr/log (1.1.0): Downloading (100%)
  - Installing monolog/monolog (1.24.0): Downloading (100%)
  - Installing firebase/php-jwt (v5.0.0): Downloading (100%)
  - Installing google/apiclient-services (v0.79): Downloading (100%)
  - Installing psr/cache (1.0.1): Downloading (100%)
  - Installing google/auth (v1.4.0): Downloading (100%)
  - Installing google/apiclient (v2.2.2): Downloading (100%)
phpseclib/phpseclib suggests installing ext-libsodium (SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.)
phpseclib/phpseclib suggests installing ext-mcrypt (Install the Mcrypt extension in order to speed up a few other cryptographic operations.)
phpseclib/phpseclib suggests installing ext-gmp (Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.)
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
google/apiclient suggests installing cache/filesystem-adapter (For caching certs and tokens (using Google_Client::setCache))
Writing lock file
Generating autoload files

資格情報ファイル作成

APIの認証に使用するcredentials.jsonファイルを作成します。

以下のページに移動し「ENABLE THE DRIVE API」ボタンを押下。

https://developers.google.com/drive/api/v3/quickstart/php

プロジェクトを選択、もしくは新規作成したらNEXTを押します。

「DOWNLOAD CLIENT CONFIGURATION」を押して credentials.jsonをダウンロードし、クライアントの実行フォルダに配置します。

サンプルコードの配置

「Step 3: Set up the sample」にあるサンプルコードをquickstart.phpとして保存し、配置します。

ここまでで実行フォルダが以下のようになっていると思います。

./composer.json
./composer.lock
./credentials.json
./quickstart.php
./vendor

いよいよ実行

quickstart.phpを実行します。

php quickstat.php

実行すると、コマンドラインに認証ページへのリンクが表示されるのでリンク先へ移動し、認証します。

許可を押下すると、コードが表示されるので、そのコードをコマンドラインの

「Enter verification code:」の後に張り付けEnter。

すると、自分がGoogle Driveにアップロードしたファイル一覧が表示されます。

また、認証時にそのトークンを保存するtoken.jsonが作成されます。

有効期限が切れるまでは、毎回コードを求められません。