久しぶりにTwitterBotに対するご要望を頂きました。
「毎日、任意の時間(たとえば朝・昼・版の一日3回)に、最新10ツイートを自動でセルフリツイートする」といったことをしたい
任意のリスト(DMや外部連携)に貼り付けられたツイートをリツイートしたい
リツイート関連のTwitterBotの需要ってかなり高いんですね。。
以前、リツイートを行うTwitterBotを作ったのですが、こちらは指定した単語を含むツイートがあったらいいねやリツイートするものでした。
今回はご要望にあったリツイートに特化して
- 特定のユーザーの最新ツイートを定期的にリツイートするTwitterBot
- 指定したツイートを定期的にリツイートするTwitterBot
この2つの機能を簡単に導入できるようにライブラリを更新しました。
今回の記事では、その使い方、実装内容や注意点を解説していきます。
定期的にリツイートを行うTwitterBotの作り方
最初の基本的な準備は以下の記事を参考にしてください。
ざっくりとした流れとしては
- Googleスプレッドシートを用意する
- Google Apps Scriptを用意する
- TwitterClientライブラリを導入する
- コードをコピペする(今回もここをカスタマイズします)
- 認証を行う
となります。
MtWJFxCibKiP9SvrKBk8a0_EqweE_tvXn
こちらのIDのライブラリの最新のバージョンを更新してご利用ください。
特定のユーザーの最新ツイートを定期的にリツイートするTwitterBot
“セルフリツイート”という形で要望頂きましたが、自分自身を指してもらえばセルフリツイートになるので、特定のユーザーの最新ツイートを定期的にリツイートするBotの実装方法を紹介します。
スプレッドシートの準備
今回の場合すべてTwitter上のデータで完結するので白紙のスプレッドシートでOKです。
コード
ライブラリを作った話のコードの③の部分を上記コードに差し替えてください。
自身のツイートをリツイートしたい場合はaccountNameを自身に、誰かのツイートを追ってリツイートしたい場合はaccountNameをその人のアカウントにすれば取得できます。
自分のツイートだけをRTする場合はincludeRTはfalse、他の人のRTも含めてRTしちゃう場合はtrueにしてください。
リツイートする数を調整したい場合は、retweetCountを調整してください。
指定したツイートを定期的にリツイートするTwitterBot
リリースした後に定期的に特定のツイートを繰り返しリツイートしたいとか、そういう場合はこちらが参考にしてください。
スプレッドシートの準備
参考例を用意しました(参考にするほどでもない内容だけど…)
A列にツイートの詳細のURLを貼り付けていってください。
コード
こちらはシートから一覧を取得するだけですので比較的シンプルです。
シートのURLからツイートIDを取っていくのでそのままRTを行います。
コード例
最後に「全体としてこんな感じになるよ」という例を書きます。「なんかどうしても動かないんだけど」という時の参考にしてください。※consumerKey と consumerSecret は各自書き換えてください!
指定した時間に繰り返し実行するには?
コピペしただけでは定期実行はされません。GASにはタイマー機能があるのでそれで設定を行います。
以前使い方を図で解説しているので参考してください!(ポチポチするだけなので簡単なはず)
解説&使用上の注意点
最後に今回の実装の内部実装を紹介します。
今回作成した関数は
- pickupTweetsLatest
- pickupAllTweetLink
- retweet
です。
pickupTweetsLatest
pickupTweetsLatestでは指定したアカウントの最新のツイートを取得する機能ですが、一番実装方針を悩まされました。
最新のツイートの定義は人によって曖昧で、ユーザーの要望に合わせたカスタマイズ性が必要でした。
『最新の5件』を取得する場合、Twitterの最新のツイートを取得するAPIは図の黄色の範囲になります。
ただ、自分のツイートのみに限定したものが適切では?という考えや、別アカウントのツイートを含めて複数回RTする仕様が良いという声もあり、pickupTweetsLatest では図の赤と紫の範囲のツイートを選択式で選べるように実装しています。
またRTや@を含まない最新の5件を取得するとAPIでは黄色の範囲しか取得しません。
そのためAPIで多めに取得して適切に5件取得できるように実装しています。
その影響で10件取得したい場合でもAPIでは30件分取得している可能性もありえます。
極端に数が多い場合、APIで取得しきれないエラーが出たり、APIを叩きすぎてエラーになる可能性はあるので、常識の範囲内でご利用ください(ちなみに@やRTを含めた直近100件までは見てきます)
この辺に関しては結構力技で実装してしまっているので解説はしませんが、興味のある方はは GitHub と TwitterClient – Google Apps Script でコードを公開していますので御覧ください。
pickupAllTweetLink
特に特筆する内容はないですが、今の実装ではシートに書いてある全てのツイートを一度にごっそりリツイートします。
例えば10個のツイートを順番にRTしていきたいという場合、今回は自分で考えてもらいたいかなと思ってます。
ヒントになる記事は既に書いているからです(似たような処理を何度も書きたくなかった)
↓の記事では投稿文を順番に取得して、ツイートを投稿しています。
投稿文ではなくリンクを取得して、IDを渡せば…?
こういう組み合わせから「プログラミング楽しい」と思ってくれると嬉しいなぁ(´・ω・`)
retweet
これも普通にリツイートの処理だけでは行っていないです。
通常のリツイートのAPIは既にリツイートされている場合はエラーを返す仕様になっています。
ただリツイートを一度消して再度リツイートすると再度上位に上げることが出来るので、この機能を活かすべく、内部処理ではリツイートされているものが対象になっている場合は一度リツイートを削除した上で再度リツイートしています。
注意点ですが引数が配列なので自分でカスタマイズする場合はTweetIdをStringのまま送らないように!
まとめ
ライブラリのコードは GitHub と TwitterClient – Google Apps Script で見ることが出来ます。
興味のある方は御覧ください(GitHub手動で更新してるので反映遅いかも)
また引き続き質問や要望承っています。
週末など時間が空いた時に作るので緊急性の高いものは厳しいですが、「今度この作り方の解説して」と言われれば多分作ります。やらなくても個人ブログなのでそこんとこは許してクレメンス(´・ω・`)
今後の予定ですが、
- ブログでの解説がごちゃごちゃしてきているので綺麗にまとめて技術書化をすること
- GASで各々で作ってもらう形式でなく、簡単に導入が出来るサービスを作ること
この2つを目標にしています。
「へただなあベルツくん…へたっぴさ……..!収益化のさせ方がへた….。」と言われないように少しずつ価値あるもの作っていきたいと思います(コメントで応援くださるとモチベーション上がります)
ここまで読んで頂きありがとうございました!
コメント