2016-04-24 20 views
0

私はドライブのAPI v3を介して駆動Googleに接続しようとするPythonスクリプトを書いています「ユーザーがアプリのxxxxはXXXXXXをファイルへの読み込みアクセスを許可されていない」HTTP要求リターン403応答を認証しのGoogleドライブAPIは

# -*- coding: UTF-8 -*- 

from oauth2client.client import OAuth2WebServerFlow 
from oauth2client.file import Storage 
import os 
import httplib2 
import gdata.docs.service 
import gdata.docs.client 
import gdata.docs.data 
from apiclient.discovery import build 
import io 
from apiclient.http import MediaIoBaseDownload 


''' 
starrt the Authintication Process for Google APi 
''' 

FLOW = OAuth2WebServerFlow(client_id="****************************",\ 
          client_secret="************************",\ 
          scope="https://www.googleapis.com/auth/drive", 
          redirect_uri="urn:ietf:wg:oauth:2.0:oob", 
          user_agent="PythonFileEditor/1.0") 

OUT_PATH = os.path.join(os.path.dirname(__file__), 'out') 
CREDS_FILE = os.path.join(os.path.dirname(__file__), 'credentials.json') 

if not os.path.exists(OUT_PATH): 
    os.makedirs(OUT_PATH) 

storage = Storage(CREDS_FILE) 
credentials = storage.get() 

if credentials is None: 

    authorize_url = FLOW.step1_get_authorize_url() 
    print 'Go to the following link in your browser: ' + authorize_url 
    code = raw_input('Enter verification code: ').strip() 
    try: 
     credentials = FLOW.step2_exchange(code) 
    except SystemError: 
     print SystemError 

    storage.put(credentials) 

'''Authintication Process is Over''' 

http  = httplib2.Http() 
http  = credentials.authorize(http) 

auth2tocken = gdata.gauth.OAuth2TokenFromCredentials(credentials) 


service = build('drive', 'v3', http=http) 

results = service.files().list(\ 
    pageSize=10,fields="nextPageToken, files(id, name)").execute() 

items = results.get('files', []) 
if not items: 
    print('No files found.') 
else: 
    print('Files:') 
    for item in items: 

     print('{0} ({1})'.format(item['name'].encode('utf8'), item['id'])) 
     if item.get('name')=='TestPY.txt': 

      fileId=item['id'] 
      request = service.files().get_media(fileId=fileId) 
      fh = io.FileIO(item['name']) 
      downloader =MediaIoBaseDownload(fh,request) 
      done = False 
      while done is False: 
       status, done = downloader.next_chunk() 
       print "Download %d%%." % int(status.progress() * 100) 

このスクリプトは、私のローカルマシンに私のGoogleドライブから "TestPY.txt"という名前のファイルをダウンロードしようとすると、認証プロセスは、ファイル名とIDを取得することができますが、私のファイルをダウンロードしようとすると、APIこの例外をスローする

raise HttpError(resp, content, uri=self._uri) 
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/drive/v3/files/0Bw2Q7p_e5q0-SFpGUURMSWptV3M?alt=media returned "The user has not granted the app ************** read access to the file 0Bw2Q7p_e5q0-SFpGUURMSWptV3M."> 

私のスコープは完全な特権ですtically私はダウンロード/アップロード/任意のファイルを読むことができる必要があります!

私は正しい方向を指すことができますか?

ありがとうございます。

答えて

0

私はそれを理解しました。以前は/metadata.readonlyフラグを使用していましたので、それに応じて私のファイルを更新しませんでした。

私のスコープも大きくなりました。私のJsonファイルには反映されていないので、ドライブはそれを見ていません。

関連する問題