その名はTwitter.gs
GitHubリポジトリはこちらです。
本記事ではTwitter.gsのセットアップと少し動かす程度しかやりません。
詳しい説明はリポジトリのREADMEやdescriptionsを参照してください。
サンプル
Twitter.gsがどのようなライブラリか知って頂くために最初にサンプルを提示します。
const client=new Client({
name:"sample",
oauthVersion:"1.0a"
})
//ツイートする
client.postTweet({text:"demo"})
//自身のタイムラインを取得する
client.user.getTimeLine()
client.user.getTimeLine({
max_results:100,
expansions:["referenced_tweets.id"],
"tweet.fields":["created_at"]
})
//ツイートの検索
const tweets=client.searchTweets({q:"demo"})
//ツイートをリツイート
tweets[0].retweet()
//ツイートの著者をフォロー
tweets[1].author.follow()
//ユーザーを取得してそのフォロワーのフォローしているユーザーをフォローする
client.getUserByUsername("sample").getFollowers()[0].getFollowingUsers()[0].follow()
Twittergs/sampleにはより実用的なサンプルが乗っています。(ツリー投稿など)
セットアップ
使用する前にそれなりにやることがあります。
GAS側
最初にGoogle Apps Scriptから新しいプロジェクトを作成します。
単純にライブラリとして使用した場合のエディタの入力補完が弱すぎるのでTwittergsはライブラリのコードを貼り付けて使用します。
なのでtwitter.gs
とsetup.gs
ファイルを先に追加しておいてください。
その後、GitHubリポジトリのdist/twittergs.jsの内容をtwitter.gs
に、dist/starter.jsの内容をsetup.gs
に貼り付けてください。
その後setup.gs
のgetCallBackURL
を実行してください。
ログに出力されたURLを後ほど使うのでコピーしておいてください。
Appの作成、設定
Twitter.gsはOAuth1、OAuth2両方に対応しているので両方有効にします。
1.Twitter Developer Potalにアクセスします
2.+Add Appを選択します。
3.Create Newをクリック
4.App Envioromentはどれでもいいです。
5.App Nameに適当に入力
6.API Key,API Key Secret ,Bearer Tokenをメモ帳等で保存
7.App Settingをクリック
8.下にスクロールしてSet Upをクリック
9.OAuth2.0のトグルをクリック
10.OAuth1.0aのトグルをクリック
11.Type of AppはWeb App
12.App PermissionsをRead and write and Direct messageにする
14.CallbackURI/Redirect URLに先程出力したURLを貼り付ける
15.Website URLを適当に入力
16.Saveボタンをクリック
以上です。
認証
認証をする前に環境変数にキーを登録してください。
setup.gs
のsetEnv
関数に適切にキーを入力してから実行してください。
function setEnv(){
PropertiesService.getUserProperties().setProperties({
CLIENT_ID:"ab...",
CLIENT_SECRET:"c3...",
API_KEY:"8f...",
API_SECRET:"op...",
BEARER_TOKEN:"gf..."
})
}
環境変数の登録が終了したら、setup.gs
のauthorize関数を実行します。
認証URLがログに出力されます。
デフォルトではOAuth1.0aで認証されます。
2.0で認証するメリットはあまりないので基本的に1.0aを使用してください。
const client=new Client({
name:"@auto",
oauthVersion:"1.0a"
})
Logger.log(client.authorize())
認証されたアカウントのユーザーネーム(@で始まる方)で後ほどその認証情報にアクセスできます。
例えば、@arash1yamaを認証したらその後は以下のようにしてTwitterAPIを使用できます。
const client=new Client({
name:"arash1yama",
oauthVersion:"1.0a"
})
また、name
を指定して認証することもできます。
const client=new Client({
name:"master",
oauthVersion:"1.0a"
})
Logger.log(client.authorize())
この様にして取得された認証情報は以後name
にmaster
と入力すれば取得できます。
Twittergsを使う
詳しい説明はTwittergs/descriptionsフォルダを参照してください。
ここでは簡単に説明します。
TwittergsはTwitterAPIを叩く前に自動的にUtilities.sleepをします。
その時間はClientインスタンス作成時のrestTime
で設定できます。
デフォルトは1000になっています。
const client=new Client({
name:"sample",
oauthVersion:"1.0a",
restTime:1500
})
//関数も指定できる
const client=new Client({
name:"sample",
oauthVersion:"1.0a",
restTime:()=>Math.random()*10000
})
ツイートする
const tweet=client.postTweet({
text:"A tweet by Twittergs"
})
Logger.log(tweet)
これだけ
結果
{id=1546104008703479808, text=A tweet by Twittergs}
A tweet by Twittergs
— arashiyama (@arash1yama) July 10, 2022
postTweetの返り値はClientTweetなのでClientTweet,Tweetのインスタンスメゾットが使用できます。
const tweet=client.postTweet({
text:"A tweet by Twittergs"
})
tweet.like()
tweet.retweet()
tweet.reply({
text:""
})
tweet.delete()
検索
ツイートを検索するsearchTweetsとユーザーを検索するsearchUsersの二つがあります。
searchTweets
const tweets=client.searchTweets({q:"Qiita"})
Logger.log(tweets)
Logger.log(tweets.subData)
結果
[<Tweet>,<Tweet>,...]
{search_metadata={count=15.0, completed_in=0.083, max_id_str=1544271699612680193, query=Qiita, since_id=0.0, max_id=1.54427169961268019E18, since_id_str=0, next_results=?max_id=1544269479307137024&q=Qiita&include_entities=1, refresh_url=?since_id=1544271699612680193&q=Qiita&include_entities=1}}
長すぎるので省略しましたが、返り値はTweetインスタンスの一次配列です。
なので先ほどと同様にTweetクラスのインスタンスメゾットが使用できます。
例
tweets.forEach(twt=>twt.retweet())
searchUsers
const users=client.searchUsers({q:"Qiita"})
Logger.log(users)
結果
[<User>,<User>...]
返り値はUserクラスのインスタンスの一次配列なのでUserクラスのインスタンスメゾットが使用できます。
users[0].follow()
users[0].getAllFollowings()
users.map(user=>user.getAllFollowers())
終わりに
この記事で紹介したのはTwittergsのほんの一部です。
よりこのライブラリを活用するためにTwittergsのREADMEとdescriptionsフォルダ下の
- Client.md
- AppOnlyClinet.md
- Tweet.md
- ClinetTweet.md
- User.md
-
ClinetUser.md
を参照したいただけたらと思います。