- この記事は、Google Drive™ APIに関する記事を和訳したものです。
- 原文: Integrate with Drive UI "New" button
- 元記事のライセンスは CC-BYで、この和訳記事のライセンスは CC-BYです。
- 自己責任でご利用ください。
- 和訳した時期は 2019年6月ころです。
ユーザが My Drive あるいは Team Driveに移動し、Google Driveにて New > Moreをクリックしたとき、ファイルを作成するために登録された URLを伴うアプリケーションが表示されます。 ひとたび選択されたならば、Driveは、ユーザをそのアプリの Open URLにリダイレクトします(この URLは、あなたがDriveプラットフォームを有効にするときに定義されます)。
ユーザのブラウザからのリダイレクトリクエストは、state
パラメータに、以下の重要な情報を含んでいます:
-
action
、それはcreate
にセットされています。 -
folderId
、それは、親フォルダを識別します。 -
userId
、それは、認証されたユーザを識別します。
state
パラメータの代わりに、リクエスト URLを構築するためにテンプレート変数置換を使用することを選択するかもしれません。
stateパラメータは URLエンコードされているので、エスケープ文字を処理し、JSONとしてそれをパースする必要があるでしょう。 JSON記法では、"create" URLからの state情報は、次のようになります:
{
"action":"create",
"folderId":"0ADK06pfg",
"userId":"103354693083460731603"
}
アプリは、これが新しいファイルを作成するためのリクエストであることを検証するために、state
パラメータ内の create
値を検出することができます。
Driveに新しいファイルのメタデータおよびコンテンツをアップロードする方法については、files.create
メソッドの例とリファレンス情報をご覧ください。
ファイルへのショートカットを作成する
Drive内に格納されたファイルの代わりにショートカットを作成するには、APIの files.create
メソッドを使用し、MIMEタイプ application/vnd.google-apps.drive-sdk
をセットしていることを確認してください。
ファイルを作成するとき、コンテンツをアップロードしないでください。
Java
File fileMetadata = new File();
fileMetadata.setName("Project plan");
fileMetadata.setMimeType("application/vnd.google-apps.drive-sdk");
File file = driveService.files().create(fileMetadata)
.setFields("id")
.execute();
System.out.println("File ID: " + file.getId());
Python
file_metadata = {
'name': 'Project plan',
'mimeType': 'application/vnd.google-apps.drive-sdk'
}
file = drive_service.files().create(body=file_metadata,
fields='id').execute()
print 'File ID: %s' % file.get('id')
PHP
$fileMetadata = new Google_Service_Drive_DriveFile(array(
'name' => 'Project plan',
'mimeType' => 'application/vnd.google-apps.drive-sdk'));
$file = $driveService->files->create($fileMetadata, array(
'fields' => 'id'));
printf("File ID: %s\n", $file->id);
.NET
var fileMetadata = new File()
{
Name = "Project plan",
MimeType = "application/vnd.google-apps.drive-sdk"
};
var request = driveService.Files.Create(fileMetadata);
request.Fields = "id";
var file = request.Execute();
Console.WriteLine("File ID: " + file.Id);
Ruby
file_metadata = {
name: 'Project plan',
mime_type: 'application/vnd.google-apps.drive-sdk'
}
file = drive_service.create_file(file_metadata, fields: 'id')
puts "File Id: #{file.id}"
Node.js
var fileMetadata = {
'name': 'Project plan',
'mimeType': 'application/vnd.google-apps.drive-sdk'
};
drive.files.create({
resource: fileMetadata,
fields: 'id'
}, function (err, file) {
if (err) {
// Handle error
console.error(err);
} else {
console.log('File Id: ', file.id);
}
});
Objective-C
GTLRDrive_File *metadata = [GTLRDrive_File object];
metadata.name = @"Project plan";
metadata.mimeType = @"application/vnd.google-apps.drive-sdk";
GTLRDriveQuery_FilesCreate *query = [GTLRDriveQuery_FilesCreate queryWithObject:metadata
uploadParameters:nil];
query.fields = @"id";
[driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
GTLRDrive_File *file,
NSError *error) {
if (error == nil) {
NSLog(@"File ID %@", file.identifier);
} else {
NSLog(@"An error occurred: %@", error);
}
}];
ショートカットを更新するとき、ファイルの modifiedTime
をセットするために files.updateを使用することができます。
これは、それを表示すること、および、Drive UIにて正しくソートされることを保証します。
Java
String fileId = "1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ";
File fileMetadata = new File();
fileMetadata.setModifiedTime(new DateTime(System.currentTimeMillis()));
File file = driveService.files().update(fileId, fileMetadata)
.setFields("id, modifiedTime")
.execute();
System.out.println("Modified time: " + file.getModifiedTime());
Python
file_id = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ'
file_metadata = {
'modifiedTime': datetime.utcnow().isoformat() + 'Z'
}
file = drive_service.files().update(fileId=file_id,
body=file_metadata,
fields='id, modifiedTime').execute()
print 'Modified time: %s' % file.get('modifiedTime')
PHP
$fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
$fileMetadata = new Google_Service_Drive_DriveFile(array(
'modifiedTime' => date('Y-m-d\TH:i:s.uP')));
$file = $driveService->files->update($fileId, $fileMetadata, array(
'fields' => 'id, modifiedTime'));
printf("Modified time: %s\n", $file->modifiedTime);
.NET
var fileId = "1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ";
var fileMetadata = new File()
{
ModifiedTime = DateTime.Now
};
var request = driveService.Files.Update(fileMetadata, fileId);
request.Fields = "id, modifiedTime";
var file = request.Execute();
Console.WriteLine("Modified time: " + file.ModifiedTime);
Ruby
file_id = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
file_metadata = {
modified_time: DateTime.now
}
file = drive_service.update_file(file_id,
file_metadata,
fields: 'id, modifiedTime')
puts "Modified time: #{file.modified_time}"
Node.js
fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
var fileMetadata = {
'modifiedTime': new Date().toISOString()
};
drive.files.update({
fileId: fileId,
resource: fileMetadata,
fields: 'id, modifiedTime'
}, function (err, file) {
if (err) {
// Handle error
console.error(err);
} else {
console.log('Modified time: ', file.modifiedTime);
}
});
Objective-C
NSString *fileId = @"1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ";
GTLRDrive_File *metadata = [GTLRDrive_File object];
metadata.modifiedTime = [GTLRDateTime dateTimeWithDate:[NSDate date]];
GTLRDriveQuery_FilesUpdate *query = [GTLRDriveQuery_FilesUpdate queryWithObject:metadata
fileId:fileId
uploadParameters:nil];
query.fields = @"id, modifiedTime";
[driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
GTLRDrive_File *file,
NSError *error) {
if (error == nil) {
NSLog(@"Modified time: %@", [file.modifiedTime stringValue]);
} else {
NSLog(@"An error occurred: %@", error);
}
}];
カスタムサムネイルおよびインデックス可能なテキストを追加する
ショートカットを用いて関連付けられたファイルの検出可能性を高めるために、ファイルのメタデータを挿入あるいは修正するとき、サムネイル画像およびインデックス可能なテキストの両方をアップロードすることができます。 詳細については、ファイルのメタデータを管理するを参照してください。