web-dev-qa-db-ja.com

Drive v2 APIを使用してCSVをGoogleドライブスプレッドシートにアップロードする

ローカル[〜#〜] csv [〜#〜]ファイルをDrive API v2を使用してGoogleドライブにアップロードするにはどうすればよいですか? native Google Spreadsheet形式。 Pythonが望ましいですが、生のHTTPリクエストで十分です。

私が試したこと:

  1. リクエスト本文のコンテンツタイプ: 'application/vnd.google-apps.spreadsheet'、media_bodyコンテンツタイプ: 'text/csv'。 -> 401不正なリクエスト

  2. リクエストの本文content-type: 'application/vnd.google-apps.spreadsheet'、media_body content-type: 'application/vnd.google-apps.spreadsheet'。 -> 400不正なリクエスト

  3. ...(プロパティを除外するなど、他のいくつかは、通常400を取得するか、ドライブがネイティブスプレッドシートとして認識しませんでした)

24
Zuza

挿入リクエストでは、コンテンツタイプとしてtext/csvを指定する必要があります。ファイルを変換するコツは、リクエストURLに?convert=trueクエリパラメータを追加することです:

https://developers.google.com/drive/v2/reference/files/insert

24

(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']))
_
10
wescpy

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

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'
7
Talos

開始する最良の方法は、 https://developers.google.com/drive/v2/reference/files/insert#try-it にあるWebフォームを使用することです。

0
pinoyyid