概要
こちらの記事([GAS]Google Apps Scriptでツイートを投稿する)で公開されている
Twitterライブラリを使う時、複数アカウントを使い分ける方法について情報共有します。
このライブラリはたいへん便利なのですが、別のスクリプトやプロジェクトを作成しても使用されるアカウントが共通で一つになってしまうという弱点があります。
ちょっと書き加えるだけで、複数のアカウントを使い分けることができるようになります。
実装
※上記の記事を参考にしてGASにライブラリを組み込んである前提です。
TwitterWebService: MFE2ytR_vQqYfZ9VodecRE0qO0XQ_ydfb
OAuth1: 1CXDCY5sqT9ph64fFwSzVtXnbjpSfWdRymafDrtIZ7Z_hwysTY7IIhi7s
'use strict';
// OAuth1認証用インスタンス
var twitter = TwitterWebService.getInstance(
'***CONSUMER_KEY***',
'***CONSUMER_SECRET***'
);
//OAuth1ライブラリを導入したうえで、getServiceを上書き
twitter.getService = function() {
return OAuth1.createService('Twitter2')
.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())
}
// 認証を行う(必須)
function authorize() {
twitter.authorize();
}
// 認証をリセット
function reset() {
twitter.reset();
}
// 認証後のコールバック(必須)
function authCallback(request) {
return twitter.authCallback(request);
}
function tweetTest(){
postUpdateStatus('test');
}
重要なのはこの部分です。
return OAuth1.createService('Twitter2')
OAuthライブラリを読むと、ここで引数として与えるサービス名ごとに認証情報を保管するようになっています。この保管は、Googleアカウント単位で行われるため、スクリプトやプロジェクトを変えてもアカウント認証情報が共通になってしまうのです。
TwitterWebService.gsの中でこの引数が'Twitter'として固定文言で与えられているため、その部分だけを上書きしてサービスを初期化すれば、複数のアカウントを利用できるようになります。
なお、実際に使う際にはTwitter_taro、Twitter_jiroのように、アカウント名をサービス名に含めてしまうと、管理しやすいのではないかと思います。