25

Drive API v2を使用してローカルCSVファイルをGoogleドライブにアップロードし、アップロードされたファイルがネイティブのGoogleスプレッドシート形式になるようにするにはどうすればよいですか。できれば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を取得したか、ドライブがネイティブスプレッドシートとして認識しなかったなど、他のいくつかの例)

4

5 に答える 5

24

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

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

于 2012-10-08T23:34:38.060 に答える
11

(2017年3月)質問は特にDrive API v2について尋ねますが、開発者は、Google Drive APIチームが2015年の終わりにv3をリリースし、そのリリースで、ファイル操作をより適切に反映するようにinsert()名前を変更したことを知っておく必要があります。create()また、変換フラグはもうありません。MIMEtypeを指定するだけです...想像してみてください。

ドキュメントも改善されました。Java、Python、PHP、C#/。NET、Ruby、JavaScript / Node.js、iOSのサンプルコードに付属するアップロード(シンプル、マルチパート、再開可能)に関する特別なガイドがあります。 / Obj-Cを使用してファイルをアップロードし、CSVファイルをGoogleシートとしてインポートする別のファイルをアップロードします。

apiclient.http.MediaFileUploadそれがいかに簡単かを示すために、以下は、クラスを必要としない短いファイル(「単純なアップロード」)用の(ドキュメントのサンプルに対する)1つの代替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']))
于 2017-03-16T02:12:30.567 に答える
7

ClaudioCherubinoの答えは正しいです-パラメータを手動で追加する必要があります。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'
于 2013-04-21T20:27:30.410 に答える
7

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());
于 2014-03-11T00:41:42.607 に答える
0

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

于 2012-10-07T10:30:07.580 に答える