0

Googleドライブへのアクセスを自動認証/承認する次のコードがあります。スクリプトの親ディレクトリに client_secrets.json ファイルをコピーしました。このコードはブラウザーのタブを開き、[同意する] をクリックするのを待ちます。同意した後、コードは引き続き実行され、フォルダーが作成され (存在しない場合)、そこにファイルが保存されます。

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

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

# Find the folder id 
id = 0;
file_list = drive.ListFile({'q': "'root' in parents and trashed=false"}).GetList()
for file1 in file_list:
    if file1['title'] == gpath:
        id = file1['id']

# Make folder if it does not exist
if id == 0:
    file1 = drive.CreateFile({'title': gpath, 'mimeType': 'application/vnd.google-apps.folder'})
    file1.Upload()

# Fetch the folder id
file_list = drive.ListFile({'q': "'root' in parents and trashed=false"}).GetList()
for file1 in file_list:
    if file1['title'] == gpath:
        id = file1['id']

# Upload file to folder
file1 = drive.CreateFile({'title': fname, "parents":  [{"kind": "drive#fileLink","id": id}]})
file1.SetContentFile(fname)
file1.Upload()

このスクリプトをリモート サーバーで実行したいのですが、サーバーにブラウザーがあるかどうか、および/またはサーバー上でスクリプトが正常に実行されるかどうかがわかりません。プロセスを完全に自動化し、ユーザーがブラウザーで [同意する] をクリックするのではなく、ユーザーの介入なしにスクリプトにすべてを処理させたいと考えています。

また、これは何時間も実行される非常に大きなスクリプトの一部であり、おそらく毎週自動的に実行されるようにプログラムされます。したがって、ユーザーへの依存は非常に望ましくありません。


私はGerardoの方法を試しました(2番目のコメントから)。アプリケーションの自動認証に成功した可能性があります。サービス アカウントを作成し、SignedJwtAssertionCredentials を使用して、次のように承認済みの http オブジェクトを生成しました。

from oauth2client.client import SignedJwtAssertionCredentials
from httplib2 import Http

client_email = 'xyz@developer.gserviceaccount.com'
with open("MyProject.p12") as f:
    private_key = f.read()

credentials = SignedJwtAssertionCredentials(client_email, private_key, 'https://www.googleapis.com/auth/sqlservice.admin', sub='abc@example.com')
gauth = credentials.authorize(Http())

アプリが承認されているかどうかわかりません。エラーは発生しないので、うまくいくと思います。ファイルをフォルダーにアップロードする必要があります。続行するにはどうすればよいですか?

4

0 に答える 0