カテゴリー
 開発者向けサンプル

Drive API

このサンプルでは、Google ドライブへのファイル保存、共有ドライブへのファイルの保存についてのコードを記載しています。
Google ドライブは Google_Service_Drive サービス使用して操作します。
ここで扱うサンプル ソースコードは  こちら(github.com) からダウンロードできます。

Google ドライブでのファイル操作

フォルダへのファイルの保存
アプリサンプル ファイルを保存する
Google ドライブ で確認する

マイフォルダにファイルを作成するには、Google_Service_Drive_Files_Resource.create を使用します。

/**
* ドライブにファイルを作成
* $client: Googleクライアント
*/
public function createFile($client) {

    try {
        // ドライブサービス オブジェクトを生成
        $driveClient = new \Google_Service_Drive($client);

        // 作成するファイルの情報を準備
        $fileMetadata = new \Google_Service_Drive_DriveFile([
            'name' => 'sample.txt' // ファイル名
        ]);

        // ファイルを作成
        $driveClient->files->create($fileMetadata, [
            'data' => 'This is a sample file.', // ファイルの内容
            'mimeType' => ' text/plain', // MIMEタイプ: テキストファイル
            'uploadType' => 'media',
            'fields' => 'id',
        ]);

    } catch(\Exception $e) {
        $msg = $e -> getMessage();
        return $msg;
    }
}

保存するファイル名、ファイルの内容、ファイルタイプを指定して、Google_Service_Drive_Files_Resource.create関数を呼び出します。
保存が完了すると、ファイルオブジェクトが返されます。

ファイルのコピー
アプリサンプル ファイルをコピーする
Google ドライブ で確認する

マイフォルダにあるファイルのコピーは、Google_Service_Drive_Files_Resource.copy メソッド を使用して行います。

/**
* ドライブ内のファイルをコピー
* $client: Googleクライアント
*/
public function copyFile($client) {

    try {
        // ドライブサービス オブジェクトを生成
        $driveClient = new \Google_Service_Drive($client);

        // 作成するファイルの情報を準備
        $fileMetadata = new \Google_Service_Drive_DriveFile([
            'name' => 'sampleのコピー.txt', // コピー後のファイル名
            'parents' => ['root'], // コピー先
        ]);

        // ドライブ内のファイルを検索
        $result = $driveClient->files->listFiles([
            "q" => "name='sample.txt'" // ファイル名を指定
        ]);
        $file = $result->getFiles()[0];

        // ファイルをコピー
        $driveClient->files->copy($file->getId(), $fileMetadata);

    } catch(\Exception $e) {
        $msg = $e -> getMessage();
        return $msg;
    }
}

デモを実行すると、ドライブ内の [sample.txt] ファイルを [sampleのコピー.txt] にコピーします。

ファイルのリネーム
アプリサンプル ファイルのリネームを試す
Google ドライブ で確認する

Google_Service_Drive_Files_Resource.update でファイルの名前を変更します。

/**
* ドライブ内のファイルの名前を変更
* $client: Googleクライアント
*/
public function renameFile($client) {

    try {
        // ドライブサービス オブジェクトを生成
        $driveClient = new \Google_Service_Drive($client);

        // 変更後のファイルの情報を準備
        $fileMetadata = new \Google_Service_Drive_DriveFile();
        $fileMetadata->setName('Google.txt');

        // ドライブ内のファイルを検索
        $result = $driveClient->files->listFiles([
            "q" => "name='sample.txt'"
        ]);
        $file = $result->getFiles()[0];

        // ファイル名を変更
        $driveClient->files->update($file->getId(), $fileMetadata, array());

    } catch(\Exception $e) {
        $msg = $e -> getMessage();
        return $msg;
    }
}

デモを実行すると、ドライブ内の [sample.txt] ファイルを [Google.txt]にリネームします。

共有ドライブでのファイル操作

共有ドライブの作成

Google Apps Script を利用して共有ドライブを操作するには、新しいドライブ を作成し、共有ドライブ 下に挿入します。

    // 共有ドライブ名"Shared Folder 1"を準備
    let teamDrive = Drive.newTeamDrive();
    teamDrive.name = 'Shared Folder 1';

    // 共有ドライブの下に新しいドライブを作成
    let driveId = Utilities.getUuid();
    let newTeamDrive = Drive.Teamdrives.insert(teamDrive, driveId);

Drive.newTeamDrive で、新しいドライブを作成し、名前を設定します。 作成されたドライブ は、このままでは利用できません。Drive.Teamdrives.insert を呼び出して共有ドライブの下に配置することで、共有ドライブとしてアクセスできるようになります。

共有ドライブのドライブ を通常のフォルダとして扱う

共有ドライブ は、DriveApp のフォルダに変換することで、通常の Google ドライブ内のフォルダと同じように扱うことができます。

    // 共有ドライブ名"Shared Folder 1"を準備
    let teamDrive = Drive.newTeamDrive();
    teamDrive.name = 'Shared Folder 1';

    // 共有ドライブを通常フォルダのオブジェクトとして扱う
    let teamFolder = DriveApp.getFolderById ( newTeamDrive.id );
    let subFolder = teamFolder.createFolder('Sub Shared Folder 1');

DriveApp.Folder.crateFolder でフォルダを作成することができます。

フォルダにファイルを作成

ファイルの作成も Googleドライブと同じ方法で実行できます。

  // マイフォルダと同様の順でファイルを作成
  let file = subFolder.createFile('OK.txt', 'OK Google.', MimeType.PLAIN_TEXT);