2017-12-04 16 views
0

からの私のファイルをダウンロードする権限がありません:私は次のエラーを取得していますGoogleドライブ

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/drive/v3/files/XXXXXXXXXXXX?alt=media returned "The user has not granted the app 123456789 read access to the file XXXXXXXXXXXX."> 

私は自分自身のOAuth Web認証方式を使用して認証してきたように、これは、かなり奇妙です。私は自分のファイルもリストすることができます。

Googleはここにこのエラーを記載しています:https://developers.google.com/drive/v3/web/handle-errors#403_the_user_has_not_granted_the_app_appid_verb_access_to_the_file_fileidと私は、ユーザーにファイルを開くように促すことを提案します。まあ、ユーザーは私です、私はこのファイルを約20回完璧に開いています。エラーが消えない...ここで

は私の完全な例です:

import os 
import httplib2 
import io 
from oauth2client.file import Storage 
from apiclient.discovery import build 
from oauth2client.client import OAuth2WebServerFlow 
from googleapiclient.http import MediaIoBaseDownload 
location import Location 

CLIENT_ID = 'CLIENT ID XYXXYX' 
CLIENT_SECRET = 'YYYYYYYYYYYYYYY' 


OAUTH_SCOPE = 'https://www.googleapis.com/auth/drive' 
REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob' 
OUT_PATH = Location.folder_path + "media/dumps/" 
CREDS_FILE ='this_file_is_somewhere.json' 

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

if credentials is None: 
    # Run through the OAuth flow and retrieve credentials 
    flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI) 
    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() 
    credentials = flow.step2_exchange(code) 
    storage.put(credentials) 


# Create an httplib2.Http object and authorize it with our credentials 
http = httplib2.Http() 
http = credentials.authorize(http) 
drive_service = build('drive', 'v3', http=http) 

def list_files(service): 
    page_token = None 
    while True: 
     param = {} 
     if page_token: 
      param['pageToken'] = page_token 
     files = service.files().list(**param).execute() 
     for item in files['items']: 
      yield item 
     page_token = files.get('nextPageToken') 
     if not page_token: 
      break 


def download(file_id, path=OUT_PATH): 
    request = drive_service.files().get_media(fileId=file_id) 
    file_meta = drive_service.files().get(fileId=file_id).execute() 
    name = file_to_get['name'] 
    print(file_meta) 
    fh = io.BytesIO() 
    downloader = MediaIoBaseDownload(fh, request) 
    done = False 
    while done is False: 
     status, done = downloader.next_chunk() 
     print(int(status.progress() * 100)) 
    f = open(path + '/' + name, 'wb') 
    f.write(fh.getvalue()) 
    print('File downloaded at', path) 
    f.close() 


download('XXXXXXXXXXXX') 
+0

これがあなたの問題の解決策であるかどうかわかりませんが、 '' this_file_is_somewhere.json''の信任状ファイルを削除して再作成するのはどうですか? – Tanaike

+0

[ピッカーを開く](https://developers.google.com/drive/v3/web/integrate-open#open_files_using_the_google_picker)し、ファイルを開くようにユーザーに指示するか、ドライブに移動してファイルを開くように指示してくださいアプリで。また、そのファイルに対して[権限の操作](https://developers.google.com/drive/v3/web/manage-sharing#manipulating_permissions)を試すこともできます。 – noogui

+0

@noogui「ピッカー」が何であるかを理解することはそれほど簡単ではないようです。 Googleドキュメントでこれを読んだとき、私はすでに混乱していることがわかりました。私はファイルを開くことができます、それは私のファイルです。それはうまく開きます。私は組織内の他の人にも利用可能にしました。 – dengar81

答えて

0

@Tanaikeへのすべてのおかげ:

は、単に資格ファイルを削除し、それがその問題を解決し再作成します。

関連する問題