私は、ユーザーがGoogleカレンダーへのアクセスを許可できるカレンダーアプリを作成しています。私のアプリでは、自分のカスタムスタイルで表示されたカレンダーを表示および編集できます。
これは、このGoogle "quickstart"サンプル に基づいています。
現在はローカルで正常に動作しますが、pythonanywhere.com(URLは http://myname.pythonanywhere.com )でホストされている場合、実行に失敗しました。
私が使用しているローカルバージョンでは、使用しているcredentials.jsonファイルは_"installed":
_で始まり、AFAICTは「デスクトップアプリ」に対応し、_"redirect_uris":
_には_["urn:ietf:wg:oauth:2.0:oob", "http://localhost”]
_が含まれています。 ( " http:// localhost "は理にかなっていますが、2番目のURI "urn:ietf:wg:oauth:2.0:oob"がある理由はわかりません)
_{
"installed": {
"client_id": "XXXXXXXXXXXXXXXX.apps.googleusercontent.com",
"project_id": "my_great_calendar",
"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": "XXXXXXXXXXXXX",
"redirect_uris": [
"urn:ietf:wg:oauth:2.0:oob",
"http://localhost"
]
}
}
_
私が間違っている場合は修正してください。ただし、このcredentials.jsonファイルはmyname.pythonanywhere.comでホストされていると機能しない可能性があるため、新しい(Googleの「APIとサービス」ページで)ファイルを作成する必要があります。プロジェクトを「Webアプリケーション」として宣言することによって?そしてGoogleに私のリダイレクトURIを " http://myname.pythonanywhere.com "と伝えますか?
ローカルとpythonanywhereの両方で機能する単一のcredentials.jsonファイルを作成する方法があったら、
EDIT:クイックスタートサンプルは_InstalledAppFlow.from_client_secrets_file
_を使用していますが、これは今では間違っていると思います。 here のように、代わりにgoogle_auth_oauthlib.flow.Flow.from_client_secrets_file()
を使用する必要があるかもしれません。
複数のリダイレクトURIをサポートする単一のクライアントID /クライアントシークレットのペアを使用できます。
JSONには、2つのリダイレクトURIが含まれます。ライブラリがどのライブラリを使用するかを選択する方法がわからないので、redirect_uri
パラメータを渡して明示的に指定することをお勧めします。
flow = Flow.from_client_secrets_file('client_secrets.json', redirect_uri='http://blah.pythonanywhere.com/')
どちらを使用するかを知るには、サーバーの起動時にいくつかの構成(環境変数やコマンドラインフラグなど)を渡すか、サーバーに自動的にホストヘッダーを見て検出させることができます。