(Dla jasności, ten post odnosi się do różnicy pomiędzy Google Documents List API i Google Drive API na Google App Engine z Pythona)Edycja Google Docs z napędem API
Z [obecnie przestarzałe] liście Dokumenty API mogłem edytować Google Dokumenty eksportując jako HTML, modyfikując HTML, a następnie przesyłając ponownie jako nowy dokument lub jako modyfikację oryginału. Przydaje się to na przykład do generowania dokumentów PDF z szablonu. Próbowałem zreplikować tę funkcjonalność nowym interfejsem Drive API (V2), jednak wydaje się, że nie można tego zrobić.
mają pochodzić z tego ...
http = # authenticated http client
drive_service = build('drive', 'v2', http=http)
# get the file ...
file = drive_service.files().get(fileId=FILE_ID).execute()
# download the html ...
url = file['exportLinks']['text/html']
response, content = http.request(url)
# edit html
html = content.replace('foo', 'bar')
# create new file with modified html ...
body = {'title':'Modified Doc',
'description':'Some description',
'mimeType':'text/html'}
media_body = MediaIoBaseUpload(StringIO.StringIO(html), 'text/html', resumable=False)
drive_service.files().insert(body=body, media_body=media_body)
Powyższy kod ładuje plik HTML w postaci pliku na Dysk Google, a następnie renderowania HTML do dokumentu Google. Wystarczająco uczciwe, to ma sens. Ale w jaki sposób mogę go renderować jako dokument Google, tak jak mogłem to zrobić za pomocą interfejsu API listy dokumentów?
Jeszcze jedno - jeśli ustawię resumable = True, generuje następujący błąd w App Engine - "_StreamSlice" nie ma len(). Nie można wymyślić, jak uzyskać wznowienie = Prawdziwe do pracy?
I ostatnia rzecz - sample code in the docs używa obiektu MediaInMemoryUpload, jednak jest on już nieaktualny, na rzecz MediaIoBaseUpload. Czy powinien zostać zaktualizowany przykładowy kod ?!
Całkowicie rację. Nie mogę uwierzyć, że to przegapiłem. Dzięki! –
Ale gdzie ustawić convert = true? Żaden z przykładów nie opisuje miejsca ustawienia parametrów. Patching service.files(). Insert(). Execute.uri generuje błędy, a pliki i pliki nie wydają się przyjmować właściwego argumentu. Ruby wersja apiclient pobiera argument parametru do .execute(). – Sethish
Przekaż jako parametr do metody wstawiania. Podobnie jak to drive_service.files(). Insert (body = body, media_body = media_body, convert = True) .execute(). Jest to udokumentowane tutaj https://developers.google.com/drive/v2/reference/files/insert –