🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

6073閲覧

Google API 利用時に401エラーが発生する

prismsf

総合スコア4

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/10/14 13:54

前提・実現したいこと

Discord botを作成し、PythonにてGoogle Spread Sheetを読み書き操作することが目的となります。
参考サイト様:【もう迷わない】Pythonでスプレッドシートに読み書きする初期設定まとめ

ソースは完成し、実行、動作確認できたのですが、
一定時間経過後に後述の認証エラーが発生致します。

ポイント

・起動直後はGoogle Spread Sheetの操作は読み書きが可能。
・一定時間経過後に認証エラーとなり、操作不可となる。

環境

Python 3.7.4
Windows8.1

エラーメッセージ

gspread.exceptions.APIError: { "error": { "code": 401, "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "status": "UNAUTHENTICATED" } }

認証周りのコード

サーバー移行の際に取り回しが良いようにTOKEN等は外部から読み込む形にしています。

# 設定ファイルからサーバ設定を読み込む inifile = configparser.ConfigParser() inifile.read('BOT_config.ini','UTF-8') TOKEN = inifile.get('config', 'TOKEN') SHEETNAME = inifile.get('config', 'SHEETNAME') SPREADSHEET_KEY = inifile.get('config', 'SPREADSHEET_KEY') JSON_FILE = inifile.get('config', 'JSON_FILE') # スプレッドシートのワークシートを取得する scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_FILE, scope) gc = gspread.authorize(credentials) wsclass = gc.open_by_key(SPREADSHEET_KEY) worksheet = wsclass.sheet1

試したこと

類似内容の投稿を実施致しましたが、問題解決致しませんでした。
Google speech APIで401エラー 認証が通らない
→課金設定しましたが、解決せず。
Google API利用時にAPI errorが発生する
→時刻同期しており、解決せず。

補足情報

インストールされているパッケージの一覧は以下となります。

#python -m pip freeze aiohttp==3.6.1 async-timeout==3.0.1 attrs==19.2.0 cachetools==3.1.1 certifi==2019.9.11 chardet==3.0.4 discord==1.0.1 discord.py==1.2.3 google-api-python-client==1.7.11 google-auth==1.6.3 google-auth-httplib2==0.0.3 gspread==3.1.0 httplib2==0.14.0 idna==2.8 multidict==4.5.2 oauth2client==4.1.3 packaging==19.2 pip-review==1.0 pyasn1==0.4.7 pyasn1-modules==0.2.6 pyparsing==2.4.2 requests==2.22.0 rsa==4.0 six==1.12.0 uritemplate==3.0.0 urllib3==1.25.6 websockets==8.0.2 yarl==1.3.0

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

bot ということは、常時起動しているのでしょうか?

一定時間というのがどれぐらいかわかりませんが、認証済みのセッションには有効期間が設定されていると思いますので、タイムアウトしているのではないでしょうか?

プログラム的には、

  • 401 エラーが出たら 再度認証する
  • API 実行時に毎回認証を行う

等いずれかの方法で対応できるのではないでしょうか?

投稿2019/10/15 00:10

CHERRY

総合スコア25216

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

prismsf

2019/10/15 00:24

再認証処理も50分置きに実施しているのですが、認証エラーとなってしまいます。 下記サイトを参考に50分置きとしております。 ※https://zudoh.com/trouble-shooting/google-oauth-expired 再認証処理周りのコード # 定期的にスプシに接続しなおす gspreadtimer += 1 if(gspreadtimer >= 60): print(f"{now} スプシ再ログイン処理します") gspreadtimer = 0 scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_FILE, scope) gc = gspread.authorize(credentials) wsclass = gc.open_by_key(SPREADSHEET_KEY) worksheet = wsclass.sheet1
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問