どーもー、ゆはです。
先日、TwitterBotを作成しました。
スプラトゥーンの動画投稿でいいねが多いものを1時間おきにツイートするBOTです。
最近、フォートナイトにもハマっているので、同じようなBOTを作成しようとしたのですが、別のTwitterDeveloperアカウントを使うところでハマってしまいました。
解決方法を残しておこうと思います。
動かなったBOT
作ったBOTは以下です。
- 1時間に1回「#fortnite」のツイートを検索
- もっとも「いいね」が多いツイートをリツイート
作り方は以下記事と同じ方法で作成しました。
ほぼコピペで同じもの作れるからめちゃ楽ちんじゃん。
と思いつつ作っていたのですが、OAuth認証のところで問題発生。。。
「authorize」を実行するとすでに認証済みとのこと、「reset」で認証解除するとうまく動くのですが、スプラトゥーンBOTのほうも認証解除されて使えなくなってしまいました。。
どうやら、このやり方だと、1つのGASだと1つのTwitterDeveloperアカウントしかOAuth認証ができない模様。「スプラトゥーンBOT」を認証すると「フォートナイトBOT」が使えず、、「フォートナイトBOT」を認証すると「スプラトゥーンBOT」が使えない事態に陥ってしまいました。
解決した方法
どうやらOAuthのサービス名がデフォルトだと「Twitter」になっているようで、この名前が重複していることが原因のようでした。
GAS上でOAuthライブラリをインストールしてサービス名を変更することでうまく動きました。
具体的にやった内容はこちらです。
GASにOAuth1ライブラリを追加
ライブラリ追加をします。
「1CXDCY5sqT9ph64fFwSzVtXnbjpSfWdRymafDrtIZ7Z_hwysTY7IIhi7s」で検索することでOAuth1が検索できます。

サービス名を別名で上書きする
以下のコードを追加してサービス名を上書きします。
赤字の部分を適当な文字に変更してください。
twitter.getService = function() {
return OAuth1.createService('TwitterFotn')
.setAccessTokenUrl('https://api.twitter.com/oauth/access_token')
.setRequestTokenUrl('https://api.twitter.com/oauth/request_token')
.setAuthorizationUrl('https://api.twitter.com/oauth/authorize')
.setConsumerKey(twitter.consumer_key)
.setConsumerSecret(twitter.consumer_secret)
.setCallbackFunction('authCallback')
.setPropertyStore(PropertiesService.getUserProperties())
}
変更が完了したら、「authorize」を実行するとうまく動きました。
あとは以前の手順と同様で問題なくBOTが動きます。
同じ問題で詰まっている人のお役に立てれば幸いです。ではまた〜。
参考にさせていただいたサイト
