2017-10-02 22 views
2

私は動作中の認証&をDropboxにファイルアップロードしています。今、この認証をGoogleドライブにファイルアップロードする&にしたいと思います。しかし、私は次のような問題があります:認証なしでGoogleドライブにアップロード

上記のスクリプトを実行すると初めてGoogleにログインする必要があります。 Dropboxでは、ファイルをアップロードするためにログインする必要はありません。

Googleでも可能ですか?

おかげ

Googleドライブ:

from pydrive.auth import GoogleAuth 
    from pydrive.drive import GoogleDrive 

    gauth = GoogleAuth() 
    gauth.LocalWebserverAuth() 
    drive = GoogleDrive(gauth) 

    file5 = drive.CreateFile() 
    # Read file and set it as a content of this instance. 
    file5.SetContentFile('dark.jpg') 
    file5.Upload() # Upload the file. 

のDropbox:セキュリティ上の理由

import dropbox 

    dbx = dropbox.Dropbox('xxxxxxxxxx-xxxxxxxxxx') 

    with open(file_name, "rb") as f: # path 
     dbx.files_upload(f.read(), '/' + pre_fn + current_time +'.jpg', mute = True) 

    f.close() 

答えて

0

、Googleドライブ内のすべてのファイルとフォルダは、所有者として認証されたユーザーを持っている必要があります。

これは、SO threadでもよく説明されていました。

アプリケーションが 彼のファイルに対してAPIを使用するユーザーの許可を必要とします。その承認はWebベースのOauthを使用して行われる必要があります。 その承認の結果、サーバーアプリケーションには 更新トークンが保存されます。いつでも、アプリは のリフレッシュトークンをアクセストークンに変換してドライブファイルにアクセスできます。

Pythonサンプルコードでは、Python Quickstartを使用してドライブAPIにリクエストできます。

from __future__ import print_function 
import httplib2 
import os 

from apiclient import discovery 
from oauth2client import client 
from oauth2client import tools 
from oauth2client.file import Storage 

try: 
    import argparse 
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() 
except ImportError: 
    flags = None 

# If modifying these scopes, delete your previously saved credentials 
# at ~/.credentials/drive-python-quickstart.json 
SCOPES = 'https://www.googleapis.com/auth/drive.metadata.readonly' 
CLIENT_SECRET_FILE = 'client_secret.json' 
APPLICATION_NAME = 'Drive API Python Quickstart' 


def get_credentials(): 
    """Gets valid user credentials from storage. 

    If nothing has been stored, or if the stored credentials are invalid, 
    the OAuth2 flow is completed to obtain the new credentials. 

    Returns: 
     Credentials, the obtained credential. 
    """ 
    home_dir = os.path.expanduser('~') 
    credential_dir = os.path.join(home_dir, '.credentials') 
    if not os.path.exists(credential_dir): 
     os.makedirs(credential_dir) 
    credential_path = os.path.join(credential_dir, 
            'drive-python-quickstart.json') 

    store = Storage(credential_path) 
    credentials = store.get() 
    if not credentials or credentials.invalid: 
     flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES) 
     flow.user_agent = APPLICATION_NAME 
     if flags: 
      credentials = tools.run_flow(flow, store, flags) 
     else: # Needed only for compatibility with Python 2.6 
      credentials = tools.run(flow, store) 
     print('Storing credentials to ' + credential_path) 
    return credentials 

def main(): 
    """Shows basic usage of the Google Drive API. 

    Creates a Google Drive API service object and outputs the names and IDs 
    for up to 10 files. 
    """ 
    credentials = get_credentials() 
    http = credentials.authorize(httplib2.Http()) 
    service = discovery.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'], item['id'])) 

if __name__ == '__main__': 
    main() 
関連する問題