2013-03-16 40 views
6

Tôi có ứng dụng Python App Engine hiện tại với rất nhiều chức năng. Bây giờ tôi muốn tích hợp Google Drive vào ứng dụng. Cụ thể là tôi muốn ứng dụng của mình có thể:Truy cập Google Drive từ ứng dụng Python của Google App Engine

  1. Tạo tệp trống trong Google Drive của người dùng nơi người dùng của tôi có thể tạo tài liệu Google.
  2. Truy xuất tệp đó từ Google Drive để xử lý thêm trong ứng dụng của tôi.
  3. Gửi lại cho Google Drive định kỳ để người dùng có thể thực hiện chỉnh sửa thêm trên đó dưới dạng Google Tài liệu.

Tôi luôn biết ơn nếu ai đó biết cách làm những gì tôi đang cố gắng có thể hướng dẫn tôi đến (các) trang web cụ thể của Google giải quyết yêu cầu SPECIFIC của tôi (không phải là câu trả lời chung). Xem ví dụ DrEdit "). Cảm ơn trước!

Cập nhật:

Dựa trên mã mẫu được tạo ra trong drive-v2-python-appengine theo gợi ý trong trả lời 1, đây là chương trình của tôi với một RequestHandler để tạo một tập tin rỗng:

import os 
import webapp2 

import io 

from google.appengine.api import memcache 

import httplib2 
from apiclient.discovery import build 
from apiclient.http import MediaIoBaseUpload 
from oauth2client.appengine import oauth2decorator_from_clientsecrets 


decorator = oauth2decorator_from_clientsecrets(
    os.path.join(os.path.dirname(__file__), 'client_secrets.json'), 
    scope=[ 
     'https://www.googleapis.com/auth/drive', 
    ]) 

http = httplib2.Http(memcache) 
drive_service = build("drive", "v2", http=http) 


class CreateEmptyFile(webapp2.RequestHandler): 
    @decorator.oauth_required 
    def get(self): 
     body = { 
      'title': 'Sample Document', 
      'description': 'A sample document', 
      'mimeType': 'text/plain' 
     } 
     media_body = MediaIoBaseUpload(io.BytesIO(""), mimetype='text/plain', resumable=True) 
     file = drive_service.files().insert(body=body, media_body=media_body).execute() 
     self.redirect("/synopsis") 

Thử nghiệm là hơi khó hiểu, bởi vì đôi khi tôi đã chạy điều này, bao gồm cả lần đầu tiên, nó đưa lên trang yêu cầu truy cập, nhưng hầu hết thời gian nó không. Tôi đã sử dụng https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en để thu hồi quyền truy cập vào Drive và Drive không còn hiển thị trong danh sách nữa, nhưng tôi cho rằng thời gian trì hoãn từ một giờ trở lên tồn tại để thực hiện thu hồi quyền truy cập. Bạn không chắc chắn về điều đó và chưa thấy tài liệu đó.

Trong mọi trường hợp, nếu tôi nhận xét cuộc gọi đến drive_service.files().insert(), nó sẽ không hủy và chuyển hướng đến trang tóm tắt của tôi. Tôi tin rằng điều này có nghĩa là ủy quyền đang hoạt động chính xác, vì điều đó làm cho nó giống như mã mẫu đã tạo.

Tuy nhiên, nếu tôi bỏ bình luận các insert và sử dụng resumable=True cho cơ thể phương tiện truyền thông, tôi nhận được:

ResumableUploadError: Failed to retrieve starting URI. 

Và nếu tôi sử dụng resumable=False, tôi nhận được:

HttpError: <HttpError 401 when requesting https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart&alt=json returned "Login Required"> 

Vì vậy, tôi dường như để có thể nhận được thông qua ủy quyền OAuth 2.0, nhưng không thể chèn tệp.

+0

Chào mừng bạn đến với StackOverflow! Xin vui lòng, xem xét viết lại câu hỏi của bạn và loại bỏ một số đoạn văn không có liên quan để trả lời nó (như thứ 4 và thứ 5). Hãy cố gắng cụ thể, bởi vì tôi phải đọc nó hai lần để hiểu những gì bạn muốn, và phạm vi của câu hỏi này có vẻ rất rộng. –

+0

Xin lỗi vì sự bất tiện và cảm ơn sự chào đón và hướng dẫn. Hy vọng rằng phiên bản đã chỉnh sửa của tôi tốt hơn. Phạm vi không có ý định rộng: Tôi chỉ muốn ứng dụng của tôi có thể gửi tài liệu qua lại tới Google Drive để người dùng có thể chỉnh sửa tài liệu bằng giao diện người dùng Google Documents, nhưng tôi cũng có thể làm việc với tài liệu trong ứng dụng của tôi . – Lindsay

+0

Tôi thích câu hỏi này - bạn tìm "drive-v2-python-appengine" ở đâu? Tôi không thể tìm thấy nó trực tuyến. Tôi không thích DrEdit bởi vì nó dựa trên rất nhiều javascript obfuscated để chạy. Tìm kiếm một ví dụ đơn giản hơn. – slashdottir

Trả lời

1

Vui lòng thử ứng dụng QuickStart của chúng tôi tại địa chỉ: https://developers.google.com/api-client-library/python/start/installation

Bạn có thể tạo một ứng dụng công cụ ứng dụng QuickStart, đó là hữu ích cho bạn để tạo ra các thiết lập ban đầu. Đối với các trường hợp sử dụng cụ thể, vui lòng tham khảo drive API reference.

+2

Cảm ơn. Tôi đã thử điều đó. Tôi cũng đã thử DrEdit tại https://developers.google.com/drive/examples/python (nó đã cho tôi giờ làm việc thông qua nó để nhận ra rằng nó không có gì để làm với yêu cầu của tôi). Và thông qua https://developers.google.com/drive/quickstart-python, tôi đã xem video, chạy ứng dụng và nghiên cứu mã, nhưng cho đến nay chưa thấy cách mở rộng thông tin đó sang GAE và xóa hướng dẫn quy trình. Quay lại trang bạn đã đề xuất, tôi nhận được: "Đối số không hợp lệ" – Lindsay

+0

Tôi nghĩ rằng tôi nhận được "Đối số không hợp lệ" vì lệnh phải là "dev_appserver.py". (không chắc chắn, chỉ đoán), nhưng điều đó đã cho "ValueError ('không an toàn chuỗi pickle',)". Theo gợi ý của bình luận, tôi đã thử "dev_appserver.py --clear_datastore". Điều đó đã cho "socket.error: [Errno 48] Địa chỉ đã được sử dụng" – Lindsay

+0

Tôi nghĩ đó là vì trên máy Mac của tôi, Apache đã sử dụng 8080 và tôi không biết cách sửa đổi mã mẫu từ liên kết của bạn để sử dụng 8081 . Tuy nhiên, tôi sẽ xem xét mã được tạo ra và xem liệu tôi có thể kết hợp nó vào ứng dụng đang chạy của mình hay không. Cảm ơn một lần nữa! – Lindsay

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