Drive UIの "New" ボタンと統合する



  • この記事は、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);
    }
}];

カスタムサムネイルおよびインデックス可能なテキストを追加する

ショートカットを用いて関連付けられたファイルの検出可能性を高めるために、ファイルのメタデータを挿入あるいは修正するとき、サムネイル画像およびインデックス可能なテキストの両方をアップロードすることができます。 詳細については、ファイルのメタデータを管理するを参照してください。