2017-03-23 10 views
1

私の仕事は、GoogleドライブAPI(PyDrive moduleの助けを借りて)に接続し、いくつかのファイルをダウンロードすることです。 Google Consoleに「アプリ」を登録し、client_secret.jsonをダウンロードし、スクリプトを実行し、認証ウィンドウが表示され、Googleアカウントでログインし、ドライブにアクセスできたことを確認した後、すべてOK。Python:Googleドライブ認証

今、私はサーバー上でスクリプトを使いたいと思っています。私は私のプロバイダにサポートチケットを提出し、その答えは:


あなたはこれらを取得する必要があります:

#authJsonは「whoeversドライブ - あなた-希望対の結果である
{ 
"#authJson": "{"access_token":"XXX","token_type":"Bearer","expires_in":3600,"refresh_token":"YYY","created":1457455916}", 
    "#appKey": "key", 
    "#appSecret": "secret" 
} 

アクセス許可と と#appKey a #appSecretはoauthから来ています。


私はこれらをどのように正確に取得するのか分かりません。私はclient_secret.jsonをダウンロードする方法を知っています。だから問題は、これらを手に入れる方法です。そして私は正しい道にいますか?あるいは、異なるアプローチが必要です。

理想的な最終状態は、Googleドライブに渡すことができる永久的なaccess_token(たとえば文字列パラメータ)の です。その後、アプリは自分のドライブに接続し、目的のファイルをダウンロードします。

答えて

3

EDITをサービスアカウントをチェックアウトドライブアカウントにアクセスすることになる場合:事前認可サーバーアプリケーションの編集を参照してくださいします。

あなたが探しているものはPyDriveのCommandLineAuth()です。

あなたのコードは次のようになります。あなたは、サーバー上でスクリプトを実行すると

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


ga = GoogleAuth() 
ga.CommandLineAuth() # This line in your code currently calls LocalWebserverAuth() 
drive = GoogleDrive(self.ga) 
# etc. 

は、それはあなたの地元のブラウザにリンクをコピーアンドペーストするように要求されます。特定のアカウントでログインすると、一見無作為な文字と数字の文字列が与えられます。あなたのコンソールにその文字列を貼り付け、あなたは行かなくてはなりません。

スクリプトが実行されるたびにこれを行う必要はないので、settings.yamlファイルをプロジェクトに追加することを検討してください。これにより、ログイン資格情報を保存できます。これがどのように設定されているかの詳細はdocsにあります。


EDIT:あなたは、さらに認証なしで任意のサーバーにPyDriveスクリプトを配布したい場合は、あなたがする必要があります。

  1. ダウンロードclient_secret_xxxxx.json
  2. 参照、プロジェクトにsettings.yamlファイルを追加します。このtemplatesave_credentials_file:が設定されていることを確認します(例: creds.json
  3. client_secret_xxxx.jsonclient-secretなどの情報をsettings.yamlファイルにコピーします。
  4. 私たちの開発マシンの認証プロセスを経て、資格情報(例えばcreds.json)を含むフォルダに余分なファイルがあるはずです
  5. a)元のスクリプトb) settings.yamlファイル、およびc)生成されたcreds.jsonファイルをリモートマシンに送信します。相対パスが変更されていないことを確認します。
  6. 利益はありますか?

注:GoogleドライブAPIにはAPI呼び出し制限が設定されており、100秒以内に100回以上の呼び出しができなくなります。

+0

こんにちは、ロビン、答えに感謝します。もう一回質問してもよろしいですか?これらのログイン資格情報を取得する場所( 'settings.json'に保存されます) – mLC

+0

こんにちは@mLC、Google Cloud Consoleからclient_secret_xxxxxxx.jsonファイル(PyDriveの場合は通常client_secrets.jsonに改名)をダウンロードしましたか? 'settings.yaml'ファイルに必要なすべての情報を含むjson形式のファイルです。 [このファイル](https://github.com/googledrive/PyDrive/blob/master/pydrive/test/settings/test2.yaml)をテンプレートとして使用できます。 また、私は私の答えで 'settings.json'と呼んだことに気付きました。実際には' settings.yaml'と呼ばれています。 –

+0

私は 'client_secret.json'を持っています:)しかし、ここでの問題は、私がそのコマンドラインへのアクセス権を持っていないため、サーバから認証することができないことです。私はプロセスは次のようになります:1)私は自分のローカルコンピュータ上で許可します2)私は私の認証情報でいくつかのファイルを取得します3)私はこの認証情報を 'settings'ファイルに保存します4)サーバー上に5)サーバー上での認証は必要ありません。 – mLC

0

誰かのプライベートドライブアカウントにアクセスするには、認証を受ける必要があります。上記の更新トークンを保存するだけで、アクセスを許可したら初めてWebブラウザを介してこれを行う必要があります。リフレッシュトークンを使用すると、サーバーサイドスクリプトから必要なときにデータにアクセスできます。参照:Python Quickstart

あなただけが個人的にそして制御サーバアプリケーションへのサーバーのためのOAuth 2.0を使用して

関連する問題