UnityWebRequest を利用して Google Drive を利用できるライブラリ
現状以下の機能に対応しています
- SpreadSheet の読み書き
- ディレクトリ一覧の表示
- 画像のロードに対応しています
公開ファイルじゃない場合は Google Developers Console より ClientId と ClientSecret を発行する必要があります
サンプルとして、3つのEditorWindowがある
ディレクトリ一覧を表示する
公開されている Spread Sheet の読み込み
Spread Sheet の読み込み
GoogleSpreadSheetApi.GetSheet(spreadSheetId, sheetName, v => /* string[,] */);
private class Sample
{
public int IntValue;
}
GoogleSpreadSheetApi.GetSheet<Sample>(spreadSheetId, sheetName, v => /* List<Sample> */);
// ClientId と ClientSecret を登録
var clientData = GoogleOAuthClientData.Load("GoogleAuthData");
var data = new GoogleSpreadSheetOAuthData(clientData);
data.SetToken(new EditorOAuthToken(EditorApplication.applicationPath));
// ブラウザを開いて認証コードを取得
data.GetOAuthCode();
// 取得した認証コードを適応してアクセストークンを取得
data.SetOAuthCode(code);
data.GetToken();
// Spread Sheet のロード
data.LoadSpreadSheet(_spreadSheetId, data =>
{
// SpreadSheet の情報を取得
});
// SpreadSheet のデータをもとにシートをロード
data.LoadSheet(_sheetData, sheet, v =>
{
// string[,]
});
ランタイムでは Private な Google Drive にアクセスするのは厳しいので AppsScript を利用してお手軽にアクセスする
var deployId = "";
var p = new Dictionary<string, string>()
{
{"sheetName", "シート1"}
};
// string[,] で取得する
AppsScriptApi.GetAppsScriptCSV(deployId, p, ar => {});
// CSV形式で取得する
AppsScriptApi.GetAppsScriptCSV(deployId, p, csv => {});
// 特定のクラスにパースする
AppsScriptApi.GetAppsScript<Sample>(deployId, p, list => {});
上記スクリプトを利用する際に使える全セルデータを取得するGAS
function doGet(e) {
if (e.parameter == null)
return;
var sheetName = e.parameter.sheetName;
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadSheet.getSheetByName(sheetName);
if (sheet == null)
return;
var csv = "";
var range = sheet.getDataRange();
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
var rows = [];
for (var j = 0; j < values[i].length; j++) {
rows[j] = "\"" + values[i][j] + "\"";
}
csv += rows.join(",");
if (i < values.length - 1) {
csv += "\r\n";
}
}
var output = ContentService.createTextOutput();
output.setMimeType(ContentService.MimeType.CSV);
output.setContent(csv);
return output;
}
var deployId = "";
var json = "";
// 独自Json を利用して AppsScript を POST で呼び出す
AppsScriptApi.PostAppsScript(deployId, json);
var sheetName = "シート1";
var rows = new[] {"a", "b"};
// 以下のスクリプトを利用して指定したシートの最後に文字を追加する
AppsScriptApi.PostAppsScript(deployId, sheetName, rows, 1);
function doPost(e) {
var params = JSON.parse(e.postData.getDataAsString());
var text = addLast(params);
// レスポンス作成
var output = ContentService.createTextOutput();
output.setMimeType(ContentService.MimeType.JSON);
output.setContent(JSON.stringify({ message: text }));
return output;
}
// 最後に追加する
function addLast(params) {
var sheetName = params.sheetName;
var rows = params.rows;
var skip = params.skip;
if (sheetName == null || rows == null)
return "Invalid Param";
if (skip == null)
skip = 0;
var active = SpreadsheetApp.getActive();
var sheet = active.getSheetByName(sheetName);
if (sheet == null)
return "Sheet Not Found";
var last = sheet.getLastRow();
// rowsは2次元配列
var count = rows[0].length;
if (count <= 0)
return "Rows is Empty";
var cell = sheet.getRange(last + 1, 1 + skip, 1, count);
cell.setValues(rows);
// 成功した場合は空文字列を返す
return "";
}