Prześlij plik CSV do arkusza kalkulacyjnego Dysku Google za pomocą interfejsu Drive V2 API

Jak mogę przesłać lokalny plik CSV na Dysk Google przy użyciu interfejsu API Dysku Drive v2, aby przesłany plik był w natywnym formacie arkusza kalkulacyjnego Google. Najlepiej w Pythonie, ale wystarczy surowe żądanie HTTP.

Co próbowałem:

  1. Request body content-type: "application / vnd.google-Aplikacje.arkusz kalkulacyjny", media_body content-type: "text / csv". -- >401 Bad Request

  2. Request body content-type: "application / vnd.google-Aplikacje.arkusz kalkulacyjny", media_body content-type: "application / vnd.google-Aplikacje.arkusz kalkulacyjny". -- >400 Bad Request

  3. ... (kilka innych, takich jak pozostawienie nieruchomości na zewnątrz i podobne, Zwykle dostał 400 lub dysk nie rozpoznał go jako natywnego arkusza kalkulacyjnego)

Author: Zuza, 2012-10-07

5 answers

Twoje żądanie Wstawienia powinno określać text/csv jako typ zawartości. Sztuczka, aby przekonwertować plik, polega na dodaniu parametru zapytania ?convert=true do adresu URL żądania:

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

 24
Author: Claudio Cherubino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-08 23:34:38

(Mar 2017) Uwaga, podczas gdy pytanie dotyczy konkretnie Drive API v2, programiści powinni wiedzieć, że zespół Google Drive API wydał v3 pod koniec 2015 roku i w tym wydaniu insert() zmienił nazwy na create(), aby lepiej odzwierciedlić działanie plików. Nie ma też znacznika convert - wystarczy podać typy MIME... wyobraź to sobie!

Dokumentacja została również ulepszona: jest teraz specjalny przewodnik poświęcony uploadom (prosty, multipart i resumable), który zawiera przykładowy kod w Java, Python, PHP, C#/. Net, Ruby, JavaScript / Node.js i iOS / Obj - C, aby przesłać plik i inny, który importuje plik CSV jako arkusz Google.

Aby pokazać się prosto, poniżej jest jedno alternatywne rozwiązanie Pythona (do próbki w dokumentach) dla krótkich plików ("proste przesyłanie"), gdzie nie potrzebujesz klasy apiclient.http.MediaFileUpload. Ten fragment zakłada, że kod auth działa tam, gdzie znajduje się punkt końcowy usługi DRIVE z minimalnym zakresem auth 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']))
 9
Author: wescpy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-03 07:36:38

ODPOWIEDŹ Claudio Cherubino jest poprawna -- musisz dodać parametr ręcznie. Ponieważ zapytałeś w Pythonie, oto konkretny przykład:

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
Author: Talos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-21 20:27:30

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
Author: Cad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-11 00:41:42

Najlepszym sposobem na rozpoczęcie pracy jest korzystanie z formularza internetowego na https://developers.google.com/drive/v2/reference/files/insert#try-it

 0
Author: pinoyyid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-07 10:30:07