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私はダウンロード/アップロード/任意のファイルを読むことができる必要があります!
私は正しい方向を指すことができますか?
ありがとうございます。