GoogleDrive のファイル操作(アップロード/ダウンロード)を自動化する
Pythonを使って「GoogleDriveへファイルアップロード」「GoogleDriveからのファイルダウンロード」を実現する手順を解説します。
概要
- GoogleDriveへ自動アクセスするため
Google Cloud project
を登録します。 - GoogleDriveへログインし、認証コードを取得します。
- 認証コードからアクセストークンを取得します。
- アクセストークンを利用してGoogle Drive APIにより「GoogleDriveへのファイルアップロード」「GoogleDriveからのファイルダウンロード」を実現します。
GoogleDriveへ自動アクセスするためGoogle Cloud project
を登録
-
下記手順を参考に
Google Cloud project
を登録します。
Create a Google Cloud project
操作はGoogle Cloud consoleから実施します。
-
ライブラリを選択します。
-
Google Drive を検索し有効化します。
OAuthの設定
-
下記手順を参考に
OAuth
を設定します。 Configure the OAuth consent screen
操作はGoogle Cloud consoleから実施します。 -
OAuth 同意画面を選択します。
-
OAuth を設定します。
-
../auth/drive
を選択します
-
アプリを公開します。
-
下記手順を参考に認証情報を作成します。 OAuth client ID credentials
-
承認済みのリダイレクト URIに
http://localhost:4200/
を設定します。
-
クライアントID と クライアントシークレット を取得します。
GoogleDriveへログインし、認証コードを取得
- 下記手順を参考にGoogleDriveへのサインインを組み込みます。
Google の OAuth 2.0 サーバーにリダイレクトする
トークン取得用URLを作成し、ブラウザへ貼り付けます。
- 下記の
client_id=xxxxxxxxxxxxxxxxxxxxxxxx
には上記で取得したクライアントIDを指定します。
https://accounts.google.com/o/oauth2/v2/auth?scope=https%3A//www.googleapis.com/auth/drive&access_type=offline&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A4200%2F&client_id=xxxxxxxxxxxxxxxxxxxxxxxx
-
サインインが完了すると認証コードが発行されるので取得します。
-
code=xxxxxxxxxxxxx
と表示されます。このxxxxxxxxxxxxx
が認証コードです。
注意
URLに表示される認証コードはURLエンコードされています。
認証コードはデコードしてから利用する必要があります。
例 4%2F0Ad・・・ => 4/0Ad・・・
参考サイト
認証コードからアクセストークンを取得
-
下記手順を参考に認証コードからアクセストークンを取得します。
更新トークンとアクセス トークンの認証コードを交換する -
aaaaaaaaaaaaaaaaa
には上記で取得した認証コードを指定します。 -
bbbbbbbbbbbbbbbbb
には上記で取得したクライアントIDを指定します。 -
ccccccccccccccccc
には上記で取得したクライアントシークレットを指定します。
import urllib.parse
import urllib.request
import json
def get_googledrive_token(code: str):
apl_client_id= "bbbbbbbbbbbbbbbbbbbbbbbbb"
client_secret = "cccccccccccccccccccccccc"
redirect_url = "http://localhost:4200/"
url = "https://oauth2.googleapis.com/token"
method = "POST"
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
params = {
"client_id": apl_client_id
,"redirect_uri": redirect_url
,"client_secret": client_secret
,"code": code
,"grant_type": "authorization_code"
}
encoded_param = urllib.parse.urlencode(params).encode()
request = urllib.request.Request(url, data=encoded_param, method=method, headers=headers)
with urllib.request.urlopen(request) as res:
body = res.read()
dat = json.loads(body)
print(dat)
if __name__ == '__main__':
code = "aaaaaaaaaaaaaaaaaaaaaaaa"
get_googledrive_token(code)
- 下記のようなjsonが取得できます。
- この中に以降の処理で必要なアクセストークン(
access_token
)及びリフレッシュトークン(refresh_token
)が含まれます。
{
"access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
"expires_in": 3920,
"token_type": "Bearer",
"scope": "https://www.googleapis.com/auth/drive.metadata.readonly",
"refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}
アクセストークンの更新
-
下記手順を参考にリフレッシュトークンからアクセストークンを取得します。
アクセス トークンの更新(オフライン アクセス) -
aaaaaaaaaaaaaaaaa
には上記で取得したリフレッシュトークンを指定します。 -
bbbbbbbbbbbbbbbbb
には上記で取得したクライアントIDを指定します。 -
ccccccccccccccccc
には上記で取得したクライアントシークレットを指定します。
import urllib.parse
import urllib.request
import json
def get_googledrive_reflesh_token(refresh_token: str):
apl_client_id= "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
client_secret = "cccccccccccccccccccccccccccccccccc"
redirect_url = "http://localhost:4200/"
url = "https://oauth2.googleapis.com/token"
method = "POST"
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
params = {
"client_id": apl_client_id
,"redirect_uri": redirect_url
,"client_secret": client_secret
,"refresh_token": refresh_token
,"grant_type": "refresh_token"
}
encoded_param = urllib.parse.urlencode(params).encode()
request = urllib.request.Request(url, data=encoded_param, method=method, headers=headers)
with urllib.request.urlopen(request) as res:
body = res.read()
dat = json.loads(body)
print(dat)
print("access_token:" + dat["access_token"])
if __name__ == '__main__':
refresh_token = "aaaaaaaaaaaaaaaaaaaaaa"
get_googledrive_reflesh_token(refresh_token)
- 下記のようなjsonが取得できます。
- この中に以降の処理で必要なアクセストークン(
access_token
)が含まれます。
{
"access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
"expires_in": 3920,
"scope": "https://www.googleapis.com/auth/drive.metadata.readonly",
"token_type": "Bearer"
}
アクセストークンの利用
- 下記手順を参考にアクセストークンをHTTP ヘッダーへ設定します。
Google API の呼び出し