Googleカレンダにpythonからアクセスしたい
Q&A
Closed
解決したいこと
googleカレンダの予定をpython(windowsのアプリにするつもり)で取得しようとしてるが、OAuthのところで躓いています
拾ってきた例題を見ながらpythonでgoogleカレンダにアクセスし、登録された予定を取得しようとしています。
- Google API Consoleで、Google Calendar APIを有効にする
- 認証情報を作成し、クライアントIDとクライアントシークレットを取得する。
- 認証情報のjsonファイルをダウンロードしローカルに置く
ここまではできました。以下そのファイル(改行を加えて一部伏せ字にしています)
{
"installed": {
"client_id": "XXX.apps.googleusercontent.com",
"project_id": "XXX",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_secret": "XXX",
"redirect_uris": [
"http://localhost"
]
}
}
発生している問題・エラー
以下googleカレンダにアクセスする部分のコードです
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from datetime import datetime, time, timedelta
# 認証情報ファイルのパスを指定して認証情報を取得
creds = Credentials.from_authorized_user_file('/PythonGui/gjog/client_secret.json', ['https://www.googleapis.com/auth/calendar'])
# Google Calendar APIを使用してカレンダーのイベントを取得する
service = build('calendar', 'v3', credentials=creds)
このコードを実行すると
Credentials.from_authorized_user_file
の部分(OAuth?)で以下のようなエラーになります
File "n:\PythonGui\gjog\calenderInfoGet.py", line 8, in <module>
creds = Credentials.from_authorized_user_file('n:/PythonGui/gjog/client_secret.json', ['https://www.googleapis.com/auth/calendar'])
File "C:\Users\glp\Anaconda3\lib\site-packages\google\oauth2\credentials.py", line 440, in from_authorized_user_file
File "n:\PythonGui\gjog\calenderInfoGet.py", line 8, in <module>
return cls.from_authorized_user_info(data, scopes) File "C:\Users\glp\Anaconda3\lib\site-packages\google\oauth2\credentials.py", line 390, in from_authorized_user_info
raise ValueError(ValueError: Authorized user info was not in the expected format, missing fields client_secret, client_id, refresh_token.
(base) N:\PythonGui>C:/Users/glp/Anaconda3/python.exe n:/PythonGui/gjog/calenderInfoGet.py
エラーを見るとclient_secret, client_id, refresh_token.の形式不正のようですが、client_id, refresh_tokenはgoogleCloudに表示される内容と一致していますが、たしかにjsonにはrefresh_tokenは存在しません。
自分で試したこと
- 実際の環境ではjsonファイルはダウンロードしたまま(改行を入れていない)使用しています
- jsonファイルにはアクセスできています
ファイルを削除して試すとファイル未存在のエラーが出ているので確かにjsonファイルのアクセスはできているようです - client_id,client_secretはgoogleCloudで表示されるものと一致しています
- デスクトップ のクライアント IDは「有効化済み」と表示されています
疑問点と質問
- エラーに表示されるreflesh_tokenはなにか自分で設定すべき項目ですか?
- あるいはjsonの取得方法(googlecloudの操作など)が違っていて本来jsonに入るべき値がなくなっている
のでしょうか?
なにかヒントでもいただけると嬉しいです
1