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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

Twitter

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

Q&A

解決済

1回答

789閲覧

GASのTwitterBotでBad Authentication dataが出てしまう

sunglass

総合スコア303

Google Apps Script

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

Twitter

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

0グッド

0クリップ

投稿2020/01/21 08:48

もりさん...という方のブログを参考にbotを作りました。
https://moripro.net/gas-spreadsheet-random-tweet/

すでに2個は運用中で今日3つ目を作成したところなぜか

ttps://api.twitter.com のリクエストに失敗しました(エラー: 401)

と出るようになってしまいました。

他のアカウントと同じコードでライブラリも読み込んでAPIのkeyみsecretも変更しています。

ちょうど今日TwitterのAPI変更があったみたいでそれが原因かもと思いドキュメントを読みましたが「アクセストークンとシークレット管理の今後の変更」で今回の件とは微妙に無関係な気がします。

原因がわからないです。
詳しい方よろしくお願いします。

// 認証用インスタンス var twitter = TwitterWebService.getInstance( 'Consumer Key (API Key)', // 作成したアプリケーションのConsumer Key 'Consumer Secret (API Secret)' // 作成したアプリケーションのConsumer Secret ); // 認証 function authorize() { twitter.authorize(); } // 認証解除 function reset() { twitter.reset(); } // 認証後のコールバック function authCallback(request) { return twitter.authCallback(request); } // セルを取得 var sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); // 「シート1」はシート名 var postMessageCell = sheetData.getRange(2, 3); // セルの位置。縦横それぞれ1~の番号で指定できる // ツイートを投稿 function postUpdateStatus() { var service = twitter.getService(); var response = service.fetch('https://api.twitter.com/1.1/statuses/update.json', { method: 'post', payload: { status: postMessageCell.getValue() } }); }

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

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

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

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

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

papinianus

2020/01/21 09:45

コンシューマキーとコンシューマシークレットを再度払い出すことはできないのでしょうか。 他に動いている環境があるコードの認証エラーはいくらコードを見ても解決不能です。
sunglass

2020/01/21 10:04

> コンシューマキーとコンシューマシークレットを再度払い出すことはできないのでしょうか。 再度払い出しました。それでも同じエラー出ます。
papinianus

2020/01/21 10:09

postMessageCell.getValue は正常に動作してますよね。 正常な他の2つとの違いはなんでしょうか。
sunglass

2020/01/22 05:36

> 正常な他の2つとの違いはなんでしょうか。 ・Consumer Key (API Key) ・Consumer Secret (API Secret) ・ツイッターアカウント ・シート名 くらいです。。 Logger.log(...);で出力してもちゃんとシートの内容を取得出来ています。 最後のツイートpostでエラーが出ます。
sunglass

2020/01/26 08:22

先ほど修正して無事に解決しました。。コードを再修正して認証解除したあとに再認証したらうまくいきました。コメントありがとうございます!
guest

回答1

0

自己解決

直りました。
一度作りなおしたのちに認証解除を実行→再度認証→postTweet関数実行で出来ました。
うまくいかない場合は一度認証をして解除して再認証することをオススメします。

// 認証用インスタンス var twitter = TwitterWebService.getInstance( 'xxxx', // 作成したアプリケーションのConsumer Key 'xxxx' // 作成したアプリケーションのConsumer Secret ); // 認証 function authorize() { twitter.authorize(); } // 認証解除 function reset() { twitter.reset(); } // 認証後のコールバック function authCallback(request) { return twitter.authCallback(request); } // 日付作成 function getDateInfo() { var date = new Date(); var month = date.getMonth() + 1; var day = date.getDate(); var arrDay = ['日','月','火','水','木','金','土']; var dayNum = date.getDay(); var dayStr = arrDay[dayNum]; var dateInfo = month + '月' + day + '日(' + dayStr + ')'; return dateInfo; } // メッセージ作成 function CreatePostMessage() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1'); var lastRow = sheet.getLastRow(); var row = Math.ceil(Math.random() * (lastRow-1)) + 1; var title = sheet.getRange(row, 1).getValue(); var url = sheet.getRange(row, 2).getValue(); var header = getDateInfo() + 'おすすめ→'; var postMessage = header + title + '\n\n' + url; return postMessage; } // ツイート投稿 function postTweet() { var postMessage = CreatePostMessage(); var service = twitter.getService(); var endPointUrl = 'https://api.twitter.com/1.1/statuses/update.json'; var response = service.fetch(endPointUrl, { method: 'post', payload: { status: postMessage } }); }

投稿2020/01/26 08:21

sunglass

総合スコア303

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問