2013-03-16 13 views
6

Mam istniejącą aplikację Python do Google App Engine z wieloma funkcjami. Chcę teraz zintegrować Dysk Google z aplikacją. W szczególności chcę, aby moja aplikacja mogła:Uzyskiwanie dostępu do Dysku Google przy użyciu aplikacji Google App Engine Python

  1. Utworzyć pusty plik na Dysku Google użytkownika, na którym mój użytkownik może utworzyć Dokument Google.
  2. Pobierz plik z Dysku Google, aby dalej przetwarzać w mojej aplikacji.
  3. Wysyłaj go z powrotem na Dysk Google, aby użytkownik mógł dalej edytować go jako Dokument Google.

Będę wdzięczny za wszystko, jeśli ktoś, kto wie, jak zrobić to, co chcę zrobić, może skierować mnie na SZCZEGÓŁOWE strony internetowe Google, które spełniają moje WYMAGANE DANE (nie jest to ogólna odpowiedź, np. " Zobacz przykład DrEdit "). Z góry dziękuję!

Aktualizacja:

podstawie wygenerowanego kodu próbki w drive-v2-python-appengine za sugestię w odpowiedzi 1, tu jest mój program z RequestHandler tworzenia pusty plik:

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") 

Testowanie jest nieco mylące, ponieważ od czasu do czasu, kiedy to uruchomiłem, w tym po raz pierwszy, pojawiło się strona z żądaniem dostępu, ale w większości przypadków tak się nie dzieje. Użyłem https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en do odebrania dostępu do Dysku i Dysku, który nie pojawia się już na liście, ale domyślam się, że opóźnienie w dostępie do godziny wynosi godzinę lub dłużej. Nie jestem tego pewien i nie widziałem tego udokumentowanego.

W każdym razie, jeśli skomentuję wywołanie drive_service.files().insert(), nie przerwie i przekierowuje do mojej strony streszczenia. Sądzę, że oznacza to, że autoryzacja działa poprawnie, ponieważ sprawia to, że jest to generowany przykładowy kod.

Jednak gdybym un-skomentować insert i używać resumable=True dla organizmu mediów, otrzymuję:

ResumableUploadError: Failed to retrieve starting URI. 

A jeśli używam resumable=False, otrzymuję:

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

Więc wydaje mi się, aby uzyskać zezwolenie OAuth 2.0, ale nie można wstawić pliku.

+0

Witamy w StackOverflow! Zastanów się nad przepisaniem pytania i usunięciem paragrafów, które nie mają znaczenia, aby na nie odpowiedzieć (np. 4 i 5). Staraj się być konkretny, ponieważ musiałem przeczytać go dwa razy, aby zrozumieć, czego chcesz, a zakres tego pytania wydaje się bardzo szeroki. –

+0

Przepraszamy za niedogodności i dzięki za powitanie i wskazówki. Mam nadzieję, że moja zredagowana wersja jest lepsza. Zakres nie jest szeroki: chcę tylko, aby moja aplikacja mogła przesyłać dokumenty do Dysku Google, aby użytkownicy mogli edytować dokumenty za pomocą interfejsu Google Docs, ale mogę też pracować z dokumentami w mojej aplikacji . – Lindsay

+0

Podoba mi się to pytanie - gdzie znajdziesz "drive-v2-python-appengine"? Nie mogę znaleźć tego w Internecie. Nie lubię DrEdita, ponieważ polega on na wielu zaciemnionych skryptach javascript. Poszukuje prostszego przykładu. – slashdottir

Odpowiedz

1

Spróbuj naszą aplikację quickstart w: https://developers.google.com/api-client-library/python/start/installation

Można utworzyć App Engine quickstart aplikację, która jest przydatna, aby utworzyć wstępną konfigurację. W przypadku szczególnych przypadków użycia zapoznaj się z numerem drive API reference.

+2

Dzięki. Próbowałem tego. Próbowałem też DrEdit na https://developers.google.com/drive/examples/python (zajęło mi to wiele godzin pracy, aby zrozumieć, że nie ma to nic wspólnego z moimi wymaganiami). I przez https://developers.google.com/drive/quickstart-python obejrzałem film, uruchomiłem aplikację i przestudiowałem kod, ale jak dotąd nie widziałem, jak rozszerzyć te informacje na GAE i usunąć instrukcję procesy. Wracając do strony, którą zasugerowałeś, otrzymuję: "Nieprawidłowe argumenty" – Lindsay

+0

Myślę, że otrzymuję "Nieprawidłowe argumenty", ponieważ polecenie powinno brzmieć "dev_appserver.py". (nie jestem pewien, po prostu zgaduję), ale to dało "ValueError (" niepewny string pickle ",)". Zgodnie z sugestią komentarza, spróbowałem "dev_appserver.py --clear_datastore". To dało "socket.error: [Errno 48] Adres już w użyciu" – Lindsay

+0

Myślę, że to dlatego, że na moim Macu Apache już używa 8080, i nie wiem jak zmodyfikować przykładowy kod z twojego linku, by użyć 8081 zamiast . Jednak przyjrzę się wygenerowanemu kodowi i zobaczę, czy mogę włączyć go do mojej uruchomionej aplikacji. Dzięki jeszcze raz! – Lindsay

Powiązane problemy