GoogleAppsScriptで使えるTwitterAPIのラッパーライブラリです。
- オブジェクト指向
- OAuth1.0a、2.0両方対応
- 基本的にTwitterAPIv1.1,v2.0両方にあるものはv2.0を叩いています。
- APIの全てを網羅している訳ではありません。よく使うものを優先的に実装しています。
const client=new Client({
name:"sample",
oauthVersion:"1.0a"
})
//ツイートする
client.postTweet({text:"demo"})
//自身のタイムラインを取得する
client.user.getTimeLine()
//ツイートの検索
const tweets=client.searchTweets({q:"demo"})
//ツイートをリツイート
tweets[0].retweet()
//ツイートの著者をフォロー
tweets[1].author.follow()
//ユーザーを取得してそのフォロワーのフォローしているユーザーをフォローする
client.getUserByUsername("sample").getFollowers()[0].getFollowingUsers()[0].follow()
ライブラリとしてインストールをすると入力補完が上手く働かないので、dist/twittergs.jsまたはdist/no-toplevel-twittergs.jsをGoogleAppsScriptにコピペしてください。
dist/twittergs.jsを使用すると、ライブラリのオブジェクト、クラスは全てトップレベルに宣言されることになります。
以下のリストと同名の宣言がされる場合不具合が発生することがあります。
- CLIENT
- AppOnlyClient
- Tweet
- ClientTweet
- User
- ClientUser
- List
- Property
- Util
- TWITTER_API_DATA
これらが含まれる場合はdist/no-toplevel-twittergs.jsを使用してください。
まず、最初に以下のように環境変数を設定することを強くオススメします
function setEnv(){
PropertiesService.getUserProperties().setProperties({
CLIENT_ID:"<CLIENT_ID>",
CLIENT_SECRET:"<CLIENT_SECRET>",
API_KEY:"<API_KEY>",
API_SECRET:"<API_SECRET>",
BEARER_TOKEN:"<BEARER_TOKEN>"
})
}
こうすることで、Clientインスタンス作成時に毎回キーを記述しなくてもよくなります。
Twitter Developer Potalで、利用したいAppのリダイレクトURLを以下のように設定します
https://script.google.com/macros/d/スクリプトID/usercallback
このURLは以下のように取得することが出来ます。
Util.getCallBackURL()
//=>https://script.google.com/macros/d/スクリプトID/usercallback
その後、スクリプトに以下のように記述します
function authCallBack(e){
const result=Client.fromCallBackEvent({e:e}).isAuthorized(e)
if(result){
return HtmlService.createHtmlOutput("成功")
}else{
return HtmlService.createHtmlOutput("失敗")
}
}
もしもあなたが何らかの事情で環境変数を設定できない場合は以下のように記述してください。
function authCallBack(e){
const result=Client.fromCallBackEvent({
e:e,
API_KEY:"<API_KEY>",
API_SECRET:"<API_SECRET>",
CLIENT_ID:"<CLIENT_ID>",
CLIENT_SECRET:"<CLIENT_SECRET>"
}).isAuthorized(e)
if(result){
return HtmlService.createHtmlOutput("成功")
}else{
return HtmlService.createHtmlOutput("失敗")
}
}
その後、認証URLを発行します。
function authorize(){
const client=new Client({
name:"sample",
oauthVersion:"1.0a"
})
Logger.log(client.authorize())
}
また、認証する際にname
に@auto
と指定すると認証されたTwitterアカウントのユーザー名をnameとして認証後呼び出すことができます。
(@hogehogeというアカウントが認証されたらその認証情報はhogehogeと紐づけられる)
function authorize(){
const client=new Client({
name:"@auto",
oauthVersion:"1.0a"
})
Logger.log(client.authorize())
}
出力されたURLで認証して認証完了です。
その後は引数のオブジェクトに同じname
を指定すれば同じ認証情報を得られます。
const client=new Client({
name:"sample",
oauthVersion:"1.0a"
})
const tweet=client.getTweetById("12345")
Logger.log(tweet)
//=>{id="12345",text="...",subData={...}}
const tweets=client.user.getTimeLine({max_results:10})
Logger.log(tweets)
//=>[{id="...",text="..."}...]
Logger.log(tweets.subData)
//=>{includes={users=...}}
TwitterAPIv2のレスポンスは大体以下のようになりますが、
{
"data":[],
"includes":{}
}
本ライブラリでは上のサンプルのようにdata
が前に出されてその他のプロパティはdata.subData
に収納されます。
[,,,subData:{includes:{}}]
また、data中のオブジェクトは適切にTweet
やUser
クラスに変換されますが、subData中のオブジェクトはそういった変換がされないので注意してください。
data.filterと言ったArrayのインスタンスメゾットを使用した後はdata.subDataはundefinedになります。
const tweets=client.user.getTimeLine().filter(twt=>twt.text.length>10)
Logger.log(tweets.subData)
//=>undefined
subDataを使用する場合は必ず上記のような操作をする前にdata.subDataを参照してください。
以下を参照してください。