ローカル[〜#〜] csv [〜#〜]ファイルをDrive API v2を使用してGoogleドライブにアップロードするにはどうすればよいですか? native Google Spreadsheet形式。 Pythonが望ましいですが、生のHTTPリクエストで十分です。
私が試したこと:
リクエスト本文のコンテンツタイプ: 'application/vnd.google-apps.spreadsheet'、media_bodyコンテンツタイプ: 'text/csv'。 -> 401不正なリクエスト
リクエストの本文content-type: 'application/vnd.google-apps.spreadsheet'、media_body content-type: 'application/vnd.google-apps.spreadsheet'。 -> 400不正なリクエスト
...(プロパティを除外するなど、他のいくつかは、通常400を取得するか、ドライブがネイティブスプレッドシートとして認識しませんでした)
挿入リクエストでは、コンテンツタイプとしてtext/csv
を指定する必要があります。ファイルを変換するコツは、リクエストURLに?convert=true
クエリパラメータを追加することです:
https://developers.google.com/drive/v2/reference/files/insert
(2017年3月)注:この質問では特にDrive API v2について尋ねていますが、開発者は Google Drive API チームを知っている必要があります released v 2015年の終わりに、そのリリースでは、insert()
がファイル操作をより反映するように名前をcreate()
に変更しました。また、変換フラグはもうありません-MIMEタイプを指定するだけです...想像してみてください!
ドキュメントも改善されました。Java、Python、PHP、C#/。NET、Ruby、JavaScriptのサンプルコードに付属する アップロードに特化した特別なガイド (シンプル、マルチパート、再開可能)があります。 /Node.js、iOS/Obj-Cを使用して、ファイルと、CSVファイルをGoogleスプレッドシートとしてインポートするファイルをアップロードします。
簡単に説明すると、以下は、_apiclient.http.MediaFileUpload
_クラスが不要な短いファイル(「単純なアップロード」)の代替のPythonソリューション(ドキュメントのサンプルに対する)です。 。このスニペットは、サービスエンドポイントがDRIVE
であり、最小認証範囲が_https://www.googleapis.com/auth/drive.file
_である認証コードが機能することを前提としています。
_# filenames & MIMEtypes
DST_FILENAME = 'inventory'
SRC_FILENAME = DST_FILENAME + '.csv'
SHT_MIMETYPE = 'application/vnd.google-apps.spreadsheet'
CSV_MIMETYPE = 'text/csv'
# Import CSV file to Google Drive as a Google Sheets file
METADATA = {'name': DST_FILENAME, 'mimeType': SHT_MIMETYPE}
rsp = DRIVE.files().create(body=METADATA, media_body=SRC_FILENAME).execute()
if rsp:
print('Imported %r to %r (as %s)' % (SRC_FILENAME, DST_FILENAME, rsp['mimeType']))
_
Java:
//Insert a file
File body = new File();
body.setTitle("CSV");
body.setDescription("A test document");
body.setMimeType("text/csv");
Java.io.File fileContent = new Java.io.File("document.csv");
FileContent mediaContent = new FileContent("text/csv", fileContent);
Insert insert = service.files().insert(body, mediaContent);
insert.setConvert(true);
File file = insert.execute();
System.out.println("File ID: " + file.getId());
Claudio Cherubinoの答えは正しいです。手動でパラメーターを追加する必要があります。 Python=で質問したので、具体的な例を次に示します。
body = {
'mimeType':'text/csv',
'title': 'title'
}
# service: your authenticated service
# media: your apiclient.http.MediaFileUpload object, with 'text/csv' mimeType
req = service.files().insert(media_body=media, body=body)
# patch the uri to ensure conversion, as the documented kwarg seems to be borked.
# you may need to use '?convert=true' depending on the uri, not taking that into
# account here for sake of simplicity.
req.uri = req.uri + '&convert=true'
# now we can execute the response.
resp = req.execute()
# should be OK
assert resp['mimeType'] == u'application/vnd.google-apps.spreadsheet'
開始する最良の方法は、 https://developers.google.com/drive/v2/reference/files/insert#try-it にあるWebフォームを使用することです。