poem

PHP で Google Drive を活用

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

$ composer require google/apiclient

https://console.developers.google.com/start/api?id=drive

からプロジェクトを選択して、APIを有効にする。

認証方法の追加で、認証用のクライアントを作成する。

使い方

google-api-php-client があるのでコレを使うと便利。

https://github.com/google/google-api-php-client

composer require google/apiclient:^2.0

基本的なコードは、認証関連の client 作成してソレを Google_Service_Drive に注入する感じ。

$service = new \Google_Service_Drive($client);

$service->files->get(...)

client の作成方法には、Oauthを使う方法と、サービスアカウントを作成する方法とがある。

そのへんは https://github.com/google/google-api-php-client#examples アタリを参考に

APIの発行

Google_Service_Drive 内のプロパティ構成は以下のAPI リファレンスと対になっている。

https://developers.google.com/drive/v3/reference/

フォルダ内のファイルを取得

https://developers.google.com/drive/v3/reference/files/list

$result = $service->files->listFiles([
    "q" => "'xxxxxxxxxxx' in parents"
]);

foreach ( $result->getFiles() as $file) {
    assert($file instanceof \Google_Service_Drive_DriveFile);
    $file->getName();
    $file->getMime();
}

ファイルのダウンロード

https://developers.google.com/drive/v3/reference/files/get

リファレンスにはなぜか載っていないが、 alt=media を付けるとダウンロード出来る。

/** @var GuzzleHttp\Psr7\Response $response */
$response = $service->files->get($file->getId(),[
    "alt" => "media"
]);
$response->getBody()->getSize());

ファイルの作成

https://developers.google.com/drive/v3/reference/files/create

Request Body の file Resource は基本 Google_Service_Drive_DriveFile で作成する。

$body = new \Google_Service_Drive_DriveFile();
$body->setId($service->files->generateIds()->getIds());
....
$service->files->create($file);

ファイルのコピー

https://developers.google.com/drive/v3/reference/files/copy

$body = new \Google_Service_Drive_DriveFile();
$body->setMimeType("application/vnd.google-apps.spreadsheet");
$body->setParents([$tarDir]);
$body->setName(Str::random());
$service->files->copy("xxxxxxxx",$body);