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

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);

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

Classroom API

このサンプルでは、Google Classroom の課題としてウェブコンテンツ(URL)を公開する方法を記載しています。

ここで扱うサンプルソースコードは  こちら(github.com) からダウンロードできます。

Classroom に公開する

サイトの公開

コース(クラス)を指定して、サイトを公開します。

このサイトをClassroom に公開する
Classroom でクラスを確認する
/**
* WebサイトをClassroomに公開
* $client: Googleクライアント
* $courseId: Google ClassroomのコースID
*/
public function develUrlShare($client, $courseId) {

    // Google Classroomサービス オブジェクトを生成
    $service = new \Google_Service_Classroom($client);

    try {

        // Google ClassroomのコースワークとしてURLを公開
        $postBody = new \Google_Service_Classroom_CourseWork(array(
            "workType" => "ASSIGNMENT",
            "title" => "Share form API Demo", // コースワークタイトル
            "state" => "PUBLISHED", // 公開状態に設定
            "materials"=>[
                'link'=>[
                    'url'=>'https://apidemo.ddrive.cloud/', // 公開するURL
                    'title'=>'API Demo', // URLの名前
                    'thumbnailUrl'=>'https://classroom.google.com/webthumbnail?url=https://apidemo.ddrive.cloud/'
                    ]
            ]
        ));
        $coursework = $service->courses_courseWork->create($courseId, $postBody, array());

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

サイトへのリンクを貼付して、コースに課題を作成して公開します。

デモを実行すると、選択したコースに本サイト(https://apidemo.ddrive.cloud/)が公開されます

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

Google Picker API

このサンプルでは、Google ドライブのファイルを選択するための Picker API の使い方を紹介します。
ここで扱うサンプル ソースコードは  こちら(github.com) からダウンロードできます。


アプリサンプル Picker を表示する

Google ドライブからのファイル選択

ファイルの選択ダイアログ

Webページに、Google API の JavaScript ファイルをロードします。

<script type="text/javascript" src="https://apis.google.com/js/api.js"></script>

ボタンをクリックしたら API の初期化を行います。
※ 2回目 以降のクリック時は初期化は行いません。

function showPicker() {
    // 初期化が完了していれば、Picker生成
    if (pickerApiLoaded && oauthToken) {
        createPicker();
        return;
    }

    // Auth未初期化の場合は初期化
    if ( !oauthToken ) {
        gapi.load('auth', {'callback': onAuthApiLoad});
    }

    // Picker API 未ロードの場合はロード
    if ( !pickerApiLoaded ) {
        gapi.load('picker', {'callback': onPickerApiLoad});
    }
}
Auth の初期化
function onAuthApiLoad() {
    // Auth初期化
    window.gapi.auth.authorize( {
        'client_id': clientId,
        'scope': scope,
        'immediate': false
    }, function(authResult) {
        if (authResult && !authResult.error) {
            // 取得したアクセストークンを保持
            oauthToken = authResult.access_token;

            // 初期化が完了したら、Picker 生成
            createPicker();
        }
    });
}
Picker の初期化
function onPickerApiLoad() {
    // Picker APIがロードされたらフラグを立てる     
    pickerApiLoaded = true;

    // ロードが完了したら、Picker 生成
    createPicker();
}

2つの API が 初期化されたら Picker を表示します。

function createPicker() {
    //  初期化が完了していればPicker生成        
    if (pickerApiLoaded && oauthToken) {
        let picker = new google.picker.PickerBuilder().
            addView(google.picker.ViewId.DOCS).
            setOAuthToken(oauthToken).
            setDeveloperKey(developerKey).
            setCallback(pickerCallback).
            build();

        // Picker表示
        picker.setVisible(true);
    }
}
ファイルの選択

Picker で選択されたファイルを、 Callback 関数で受け取ります。

function pickerCallback(data) {
        let url = 'nothing';
        document.getElementById('picker_result').innerHTML = '';
        if (data.action == 'picked' ) {
            let doc = data.docs[0];
            if ( doc ) {
                // ...
            }
       }
}

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

Calendar API

このサンプルでは、Calendar API を使用して、登録済みの予定を取得するサンプルを紹介します。
ここで扱うサンプル ソースコードは  こちら(github.com) からダウンロードできます。

カレンダーの操作

予定の取得

Calendar API を使用して、登録された予定(イベント)の一覧を取得します。

アプリサンプル 予定を取得する (新しいタブで予定情報を取得します)
/**
* カレンダーのイベント一覧を取得
* $client: Googleクライアント
*/
public function listEvents($client) {

    // カレンダーサービス オブジェクトを生成
    $calendarClient = new \Google_Service_Calendar($client);

    $param = array(
        'orderBy' => 'startTime', // 開始日時順にソート
        'maxResults' => 10,
        'singleEvents' => true,
        'timeMin' => date('c')
    );

    // イベント一覧を取得
    $result = $calendarClient->events->listEvents($param);

    // レスポンスからイベント一覧を取得
    return $result->getItems();
}

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

Sheets API

このサンプルでは Google Sheets API を使用して、Web アプリケーションからスプレッドシートの作成、書式の設定、ピボットテーブルを生成する方法を紹介します。
ここで扱うサンプル ソースコードは  こちら(github.com) からダウンロードできます。

アプリサンプル 空のスプレッドシートを作成する
ドライブ で確認する

スプレッドシートの操作

スプレッドシートの作成とシートの追加

新しいスプレッドシートを作成し、シートを追加します。

/**
* スプレッドシート の作成
* $client: Googleクライアント
*/
public function createEmptySpreadsheet($client) {

    try {
        // スプレッドシート サービス オブジェクトを生成
        $service = new \Google_Service_Sheets($client);

        // スプレッドシート を作成
        $postBody = new \Google_Service_Sheets_Spreadsheet([
            'properties' => [
                'title' => 'New Spreadsheet 1' // スプレッドシート名
            ]
        ]);

        $optParams = array();
        $spreadsheet = $service->spreadsheets->create($postBody, $optParams);
        $spreadsheetId = $spreadsheet->spreadsheetId;

        // 新しいシートを追加
        $body = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
            'requests' => [
                'addSheet' => [
                    'properties' => [
                        'title' => 'New Sheet 1' // シート名
                    ]
                ]
            ]
        ]);

        $response = $service->spreadsheets->batchUpdate($spreadsheetId, $body);

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

デモを実行すると、[New Spreadsheet 1]という名前のスプレッドシートを作成し、[New Sheet 1]シートを追加します。

データの書き出し

スプレッドシートにデータを出力します。

アプリサンプル スプレッドシートに保存する
ドライブ で確認する
/**
* スプレッドシートへのデータの書き出し
* $client: Googleクライアント
*/
public function develSpreadsheetExportcsv($client) {

    // 出力するデータ
    $values = [
        ["id","class","email","name","math","science","english"],
        ["1","1A","john@example.com","John J. Coons","90","88","96"],
        ["2","1A","crystal@example.com","Crystal C. Burnett","32","44","89"],
        ["3","1B","anthony@example.com","Anthony T. Dudley","72","68","24"],
        ["4","1B","francisca@example.com","Francisca H. Rapp","89","94","92"]
    ];
    $range = 'CSV 1!A1:G5';

    try {
        // スプレッドシートサービス オブジェクトを生成
        $service = new \Google_Service_Sheets($client);

        // スプレッドシートを作成
        $postBody = new \Google_Service_Sheets_Spreadsheet([
            'properties' => [
                'title' => 'CSV import 1' // スプレッドシート名
            ]
        ]);

        $optParams = array();
        $spreadsheet = $service->spreadsheets->create($postBody, $optParams);
        $spreadsheetId = $spreadsheet->spreadsheetId;
        $this->csvSpreadsheetId = $spreadsheetId;

        // 新しいシートを追加
        $body = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
            'requests' => [
                'addSheet' => [
                    'properties' => [
                        'title' => 'CSV 1'
                    ]
                ]
            ]
        ]);
        $response = $service->spreadsheets->batchUpdate($spreadsheetId, $body);

        // 出力するデータを準備
        $body = new \Google_Service_Sheets_ValueRange([
            'values' => $values
        ]);
        $body->setValues($values);

        $params = ['valueInputOption' => 'USER_ENTERED'];

        // データを出力
        $result = $service->spreadsheets_values->update(
            $spreadsheetId, // スプレッドシートID
            $range, // 出力先のデータレンジ
            $body, // 出力データ
            $params // 出力オプション
        );

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

デモを実行すると、[CSV import 1]という名前でスプレッドシート を作成し、データを保存します。

書式の設定

保存したスプレッドシートに書式(セルの色指定)します。

アプリサンプル   書式を設定する
ドライブで確認する
/**
* スプレッドシートの書式設定
* $client: Googleクライアント
*/
public function formatSpreadsheet($client) {

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

        // 名前を指定してドライブ 内のスプレッドシートを検索
        $result = $driveClient->files->listFiles([
            "q" => "name='CSV import 1'"
        ]);
        $file = $result->getFiles()[0];
        $spreadsheet_id = $file->getId();

        // スプレッドシートサービス オブジェクトを生成
        $spreadsheet_service = new \Google_Service_Sheets($client);

        // シートIDを取得
        $sheet_id;
        $response = $spreadsheet_service->spreadsheets->get($spreadsheet_id);
        $sheets = $response->getSheets();
        foreach ($sheets as $sheet) {
            $properties = $sheet->getProperties();
            $sheet_title = $properties->getTitle();
            
            // 名前の一致するシートを検索
            if ($sheet_title == "CSV 1") {
                $sheet_id = $properties->getSheetId();
                break;
            }
        }

        // 書式を設定する範囲と書式を準備
        $request_data = [
            'repeatCell' => [
                'fields' => 'userEnteredFormat(backgroundColor)',
                'range' => [
                    'sheetId' => $sheet_id,
                    'startRowIndex' => 0, // 行の開始位置
                    'startColumnIndex' => 0, // 列の開始位置
                    'endRowIndex' => 5, // 行の終了位置
                    'endColumnIndex' => 7, // 列の終了位置
                ],
                'cell' => [
                    'userEnteredFormat' => [
                        'backgroundColor' => [  // RGB値でセルの背景色を指定
                            'red' => 234/255,
                            'green' => 143/255,
                            'blue' => 143/255
                        ]
                    ],
                ],
            ],
        ];
        $requests = [new \Google_Service_Sheets_Request($request_data)];

        // 書式を設定
        $batchUpdateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
            'requests' => $requests
        ]);
        $response = $spreadsheet_service->spreadsheets->batchUpdate($spreadsheet_id, $batchUpdateRequest);

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

デモを実行すると、userEnteredValue プロパティを設定してスプレッドシートの書式を指定します。

ピボットテーブルの生成

保存したスプレッドシート のデータを元にピボットテーブルを生成します。

アプリサンプル ピボットテーブルを生成する
ドライブ で確認する
/**
* ピボットテーブルの生成
* $client: Googleクライアント
*/
public function develSpreadsheetGenerate($client) {

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

        // 名前を指定してドライブ内のスプレッドシートを検索
        $result = $driveClient->files->listFiles([
            "q" => "name='CSV import 1'"
        ]);
        $file = $result->getFiles()[0];
        $spreadsheet_id = $file->getId();

        // スプレッドシートサービス オブジェクトを生成
        $spreadsheet_service = new \Google_Service_Sheets($client);

        // シートIDを取得
        $sheet_id;
        $response = $spreadsheet_service->spreadsheets->get($spreadsheet_id);
        $sheets = $response->getSheets();
        foreach ($sheets as $sheet) {
            $properties = $sheet->getProperties();
            $sheet_title = $properties->getTitle();

            // 名前の一致するシートを検索
            if ($sheet_title == "CSV 1") {
                $sheet_id = $properties->getSheetId();
                break;
            }
        }

        // ピボットテーブルの設定を準備
        $requests = [
            'updateCells' => [
                'rows' => [
                    'values' => [
                        [
                            'pivotTable' => [
                                'source' => [
                                    'sheetId' => $sheet_id,
                                    'startRowIndex' => 0, // 行の開始位置
                                    'startColumnIndex' => 0, // 列の開始位置
                                    'endRowIndex' => 5, // 行の終了位置
                                    'endColumnIndex' => 7 // 列の終了位置
                                ],
                                'rows' => [
                                    [
                                        'sourceColumnOffset' => 1,
                                        'sortOrder' => 'ASCENDING',
                                        'showTotals' => true,
                                    ],
                                    [
                                        'sourceColumnOffset' => 2,
                                        'sortOrder' => 'ASCENDING',
                                        'showTotals' => true,
                                    ]
                                ],
                                'values' => [
                                    [
                                        'summarizeFunction' => 'AVERAGE', // 平均値を出力
                                        'sourceColumnOffset' => 4
                                    ],
                                    [
                                        'summarizeFunction' => 'AVERAGE', // 平均値を出力
                                        'sourceColumnOffset' => 5
                                    ],
                                    [
                                        'summarizeFunction' => 'AVERAGE', // 平均値を出力
                                        'sourceColumnOffset' => 6
                                    ]
                                ],
                            ]
                        ]
                    ]
                ],
                'start' => [
                    'sheetId' => $sheet_id,
                    'rowIndex' => 7,
                    'columnIndex' => 2
                ],
                'fields' => 'pivotTable'
            ]
        ];

        // ピボットテーブルを生成
        $batchUpdateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
            'requests' => $requests
        ]);
        $response = $spreadsheet_service->spreadsheets->batchUpdate($spreadsheet_id, $batchUpdateRequest);

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

pivotTable プロパティを指定して、ピボットテーブルを生成します。