6

(Để rõ ràng, bài này liên quan đến sự khác biệt giữa Google Documents List APIGoogle Drive API trên Google App Engine với Python)docs Chỉnh sửa Google với ổ API

Với [bây giờ bị phản] Danh sách tài liệu API tôi đã có thể chỉnh sửa Google Documents bằng cách xuất dưới dạng HTML, sửa đổi HTML và sau đó tải lên lại, dưới dạng tài liệu mới hoặc dưới dạng sửa đổi đối với tài liệu gốc. Điều này rất hữu ích cho những thứ như tạo tài liệu PDF từ một mẫu. Tôi đã cố gắng để nhân rộng chức năng này với API Drive mới (V2), tuy nhiên dường như không thể.

đã đưa ra với điều này ...

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) 

Đoạn mã trên tải lên một tập tin html dưới dạng tệp vào Google Drive, thay vì sau đó render HTML vào một tài liệu Google. Đủ công bằng, điều này có ý nghĩa. Nhưng làm cách nào để làm cho nó hiển thị dưới dạng Google Tài liệu, vì tôi có thể thực hiện với API danh sách tài liệu?

Một điều khác - nếu tôi đặt tiếp tục = Đúng, nó sẽ ném lỗi sau trên App Engine - '_StreamSlice' không có len(). Không thể tìm ra cách để có thể tiếp tục = True để làm việc?

Và một điều cuối cùng - sample code in the docs sử dụng đối tượng MediaInMemoryUpload, tuy nhiên if you look at the source hiện không được dùng nữa, ủng hộ MediaIoBaseUpload. Mã mẫu có nên được cập nhật không ?!

Trả lời

7

tôi nghi ngờ vấn đề là mặc định cho chuyển đổi đã thay đổi từ true thành false. Bạn phải đặt rõ ràng chuyển đổi = true khi tải lên. Xem https://developers.google.com/drive/v2/reference/files/insert

+0

Hoàn toàn đúng. Không thể tin rằng tôi đã bỏ lỡ điều đó. Cảm ơn! –

+0

Nhưng bạn đặt chuyển đổi = true ở đâu? Không có ví dụ nào mô tả các tham số được đặt ở đâu. Patching service.files() chèn(). Execute.uri ném lỗi, và không phải tập tin cũng như chèn dường như có tham số đúng. Phiên bản ruby ​​của apiclient có tham số tham số là .execute(). – Sethish

+2

Chuyển làm tham số cho phương thức chèn. Giống như drive_service.files(). Insert (body = body, media_body = media_body, convert = True) .execute(). Nó được ghi lại ở đây https://developers.google.com/drive/v2/reference/files/insert –

Các vấn đề liên quan