it-swarm.com.de

Laden Sie CSV mit der API von Drive v2 zu Google Drive Spreadsheet hoch

Wie kann ich eine lokaleCSV-Datei mit der Drive API v2 auf Google Drive hochladen, damit die hochgeladene Datei das native Google Spreadsheet - Format hat. Vorzugsweise in Python, aber eine reine HTTP-Anfrage reicht aus.

Was ich probiert habe:

  1. fordern Sie Body-Inhaltstyp an: "application/vnd.google-apps.spreadsheet", media_body content-type: "text/csv". -> 401 Falsche Anforderung

  2. fordern Sie Body-Inhaltstyp an: 'application/vnd.google-apps.spreadsheet', media_body Inhaltstyp: 'application/vnd.google-apps.spreadsheet'. -> 400 Falsche Anforderung

  3. ... (ein paar andere wie das Auslassen einer Eigenschaft und ähnliches, normalerweise 400 oder das Laufwerk hat es nicht als native Kalkulationstabelle erkannt)

23
Zuza

Ihre Einfügeanforderung sollte text/csv als Inhaltstyp angeben. Der Trick, die Datei zu konvertieren, besteht darin, den Abfrageparameter ?convert=true zur Anforderungs-URL hinzuzufügen:

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

24

(Mär 2017) Während die Frage speziell zu Drive API v2 fragt, sollten Entwickler wissen, dass die Google Drive API team v3 Ende 2015 veröffentlicht wurde und dass dies der Fall ist insert() hat die Namen in create() geändert, um die Dateivorgänge besser wiederzugeben. Es gibt auch kein Konvertierungsflag mehr - Sie geben nur MIME-Typen an ... stellen Sie sich das vor!

Die Dokumentation wurde ebenfalls verbessert: Es gibt jetzt einen speziellen Leitfaden für Uploads (einfach, mehrteilig und wiederaufnehmbar), der mit Beispielcode in Java, Python, PHP, C # /. NET, Ruby, JavaScript/Node geliefert wird. js und iOS/Obj-C, um eine Datei hochzuladen, und eine andere, die eine CSV-Datei als Google Sheet importiert.

Um es einfach zu zeigen, ist es unten, eine alternative Python-Lösung (zum Beispiel in den Dokumenten) für kurze Dateien ("einfaches Hochladen"), bei der Sie die Klasse apiclient.http.MediaFileUpload nicht benötigen. In diesem Snippet wird davon ausgegangen, dass Ihr Auth-Code funktioniert, wenn Ihr Service-Endpunkt DRIVE mit einem minimalen Auth-Gültigkeitsbereich von https://www.googleapis.com/auth/drive.file ist.

# 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

Die Antwort von Claudio Cherubino ist richtig - Sie müssen den Parameter manuell hinzufügen. Da Sie jedoch in Python gefragt haben, hier ein konkretes Beispiel:

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
0
pinoyyid