質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Q&A

解決済

1回答

351閲覧

【GAS】スプレッドシートを活用したTwitter自動投稿プログラムからアカウントアクセス権限が外れて、自動実行ができなくなる

hiro.k

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

0グッド

0クリップ

投稿2022/12/20 01:54

前提

GASにて、スプレッドシートのデータを参照し、Twitterに自動投稿するBOTを製造しました。
数日間は正常に動作するのですが、突然アカウントアクセス権限がなくなり、ツイートが行われなくなってしまいます。
以下のような運用としております。

  1. 1日1回毎日、深夜1時から2時の間に、関数「createTrigger()」を自動実行し、関数「schedulePost()」を実行するトリガーをスプレッドシートの設定された値の時間単位で生成。このトリガーはGASのインストーラブルトリガーで設定。
  2. 関数「schedulePost()」が実行されると、関数「executeTweet()」を実行するトリガーが、次の「schedulePost()」実行時間+ランダム生成される分(次のschedulePost()実行される時間未満の値)で生成される。
  3. 関数「executeTweet()」が実行されると、実際にツイートが実行される。ツイート内容はスプレッドシートに記載された文言をランダムで取得する。GoogleDriveに格納した画像を付けてツイートする場合もある。

具体例としましては、以下のようになります。

  • スプレッドシートに指定された値 = 1 の場合
  1. 深夜1時から2時の間に、関数「createTrigger()」を実行。1時間ごとに「schedulePost()」を実行するトリガーを生成
  2. 「schedulePost()」の実行時間が2時30分の場合、2時30分から3時29分の間のいずれかの時分で実行される「executeTweet()」が生成される。
  3. 「executeTweet()」が実行されると、スプレッドシートからランダムでメッセージと画像のパスを取得し、ツイートを実行し、スプレッドシートにツイート内容とツイート時刻をログとして書き込む。
  4. 以降、「schedulePost()」が毎時間繰り返される。

発生している問題・エラーメッセージ

この運用を開始して4日後、2022年12月2日に突然ツイートがされなくなりました。
実行ログを確認したところ、9時14分30秒の時点でツイートが実行されており、10時5分45秒の時点で「schedulePost()」が実行され、11時3分25秒に「executeTweet()」のトリガーが生成されていましたが、
「executeTweet()」の実行が失敗しました。
Google Cloudのログを確認すると、以下のようなメッセージが表示されていました。

Authorization is required to perform that action.

確認すると、GASで製造したアプリケーションから、アカウントアクセス権限が外れてしまっており、実行ができなくなっていました。
そのため、GASスクリプトエディタにて「executeTweet()」を手動実行したところ、初回実行時に表示されるダイアログと同様のダイアログが開き、承認を求められました。
承認を行い、そのまま手動実行したところ、ツイートが実行されました。

その後、生成されているトリガーをすべて削除し、運用を再開しました。
すると、7日後である2022年12月9日に同様の事象が発生しました。
このときは、11時30分58秒にツイートが実行され、12時5分15秒の「schedulePost()」が実行され、12時33分31秒に「executeTweet()」のトリガーが生成されていましたが、ツイートが実行されていませんでした。
前回の対応と同様に、GASスクリプトエディタから手動実行して承認を行ったところ、正常に動作しました。
更に7日後である2022年12月16日に同様の事象がまたも発生しました。
このときは、14時50分07秒にツイートが実行され、15時31分48秒の「schedulePost()」実行時点で同様のエラーが発生していました。

現状はトリガーを再設定をすることで対応していますが、今後も同じ事象が発生することが予想されますが、ログを確認しても上記エラーのみが出力されているだけで、
アカウントアクセス権限が外れた原因の特定ができず、困っております。
つきまして、一度承認したGASアプリケーションからアカウントアクセス権限が外れるのはどのようなことが考えられるのか、ご教授いただけますでしょうか?
また、GASアプリケーションからアカウントアクセスが外れた原因をGoogle Cloudのログ等で確認することは可能なのでしょうか?

こちらで調べたところ、以下のようなことは認識しております。

  • ソースコードの改修によってアカウントアクセスを行う処理が追加・変更された場合に再度承認が求められる。 ⇒ ソースコードの改修は行っていません。
  • マルチアカウントで操作を行うと、アカウントアクセスの権限がはずれることがある。 ⇒ GASアプリケーションおよび、スプレッドシートの操作はオーナー権限のあるアカウントでしかアクセスは行っていません。

現在、以下の可能性を疑っておりますが、調査は難航しています。

  • GASアプリケーションの処理時間、トリガーの実行回数、スプレッドシートの書き込み回数等の上限に引っかかっているのではないか? ⇒ 上限に引っかかった旨のログは一切出力されておらず、すぐに手動実行したところ正常に再開したので、可能性が低そう
  • 同一のPCにて、TwitterBot運用のGoogleアカウントとは別のアカウントをテスト用に使用していることが影響しているか?
  • GASアプリケーションのトリガー実行回数やスプレッドシートの書き込み回数等にしきい値が設けられており、一定回数に達すると権限が外れるのではないか?

試したこと

  • 関数「createTrigger()」実行時、1時間ごとに「schedulePost()」のトリガーを生成する前に、「schedulePost()」および「executeTweet()」のトリガーは削除を行っております。
  • 関数「schedulePost()」の実行時、「executeTweet()」のトリガーを生成する前に、「executeTweet()」のトリガーは削除を行っております。
  • 画像が重い可能性も考え、ログおよびツイート内容を確認したところ、全パターンの画像はツイートされています。

補足情報(FW/ツールのバージョンなど)

GASライブラリとして、以下を使用しています。

  • TwitterWebService (version 2)
  • OAuth1 (version 18)

手掛かりがなく困っております。
どんな細かいことでも構いませんので、情報ありましたらよろしくお願いいたします。

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

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

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

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

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

hiro.k

2022/12/20 03:44

投稿者です。 調査を続けたところ、以下の記事を発見しました。 Google Cloud Platform Consoleヘルプ https://support.google.com/cloud/answer/10311615#publishing-status&zippy=%2Ctesting%2Cin-production 公開ステータスが『テスト』であり、テストユーザがアカウントアクセスを承認した場合、7日間で承認が切れるようです。 確かにほぼ7日間で権限が外れているため、OAuth 同意画面を確認したところ、公開ステータスが『テスト』となっており、オーナーがテストユーザに登録されていました。 これが原因のような気がします。 検証を続け、結果が判明次第、解決方法を記載いたします。
guest

回答1

0

自己解決

自己解決しました。
コメントにも記載した通り、Google Cloud Platformに連携しており、かつ、公開ステータスが『テスト』で
あったため、7日間でGASアプリとアカウントの連携が切れることが原因でした。

Google Cloud Platformに連携しないプロジェクトを作成して動作させたところ、7日間経過してもGASアプリとアカウントの連携が切れていないことを確認済みです。
Google Cloud Platformは非常に高機能ですが、内部で使用する小規模のシステムである場合、
オーバースペックになりますし、安易に使用しないほうがいいかなと感じました。

本件、クローズといたします。

参考
Google Cloud Platform Consoleヘルプ
https://support.google.com/cloud/answer/10311615#publishing-status&zippy=%2Ctesting%2Cin-production

投稿2022/12/28 04:19

hiro.k

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問