20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Twitter】GASで自分のツイートを定期RT/引用するbotを作った

Posted at

投票機能などを使っているときに自分のツイートを定期RTしたい場合があると思います。

特定のツイートを定期的にRTする」というbotに関して、自動作成ツールや知見があまりなかったので共有します。

また、TwitterBot作成方法2018年2月版としてもお使いください。

やりたいこと

GoogleAppsScript(GAS)を使って、Twitterで定期的にRTまたは引用RTを行う。

手順

1. プロジェクトを作成する

Googleドライブを開き、GoogleAppsScriptでプロジェクトを適当に作成してください。

2. Twitterでアプリケーション登録を行う

Twitter Application Managementを開き、[Create New App]からアプリケーションを作成してください。

Name, Description, URLは適当で大丈夫です。CallbackURLを以下のように設定してください。

https://script.google.com/macros/d/[GASのプロジェクトキー]/usercallback

GASのプロジェクトキーは、画面上部のメニューから[ファイル]→[プロジェクトのプロパティ]→[情報]とたどると取得できます(「サポート終了」と書かれていますが、現状は使って問題ありません)。

ちなみに、アプリケーション登録には電話番号必須なんですが、登録の際ハマってしまった人は以下を参照。
Google Apps Script (GAS) でTwitterへ投稿するだけの機能を実装してみる - Qiita

3. ライブラリを導入する

GASの上部メニューから[リソース]→[ライブラリ]と辿り、「ライブラリを追加」に以下を入力して追加してください。

Mb2Vpd5nfD3Pz-_a-39Q4VfxhMjh3Sh48

プルダウンからバージョンの指定ができますが、最新版では次に紹介するヘルパーが上手く動作しないため、バージョンは7を選んでおいてください1

4. ヘルパーを導入する

GASでtwitter.gsなどの名前でファイルを作成し、以下のヘルパーを丸ごとコピペしてください。

https://gist.github.com/kijtra/f4cdd8775277372d42f7

5. 認証する

先ほど作成したtwitter.gsの18-21行目を訂正します。

  projectKey: "...", // GASのプロジェクトキー
  
  consumerKey: "...", // Twitterでアプリケーション登録したときに発行されるConsumer Key
  consumerSecret: "...", // 同じく発行されるConsumer Secret

ここを訂正した後、GASからtwitterAuthorizeUrlを実行して認証を行います。
twitter.gsを開き、画面上部の「関数を選択」のプルダウンから選んで実行してください。

エラーなく実行が終わったら、**[Ctrl]+[Enter]**でログを開いてください。

rtbot_1.png

そこに記載されているURLにアクセスすれば、認証を行うことができます。

6. ツイートするためのコードを書く

それぞれ、function tweet()などの名前で関数にしておきます。

引用RT

ありがたいことに、先ほどコピペしたヘルパーにツイート用のメソッドが用意されています。

function tweet(){
  Twitter.tweet({ status: "投票お願いします", attachment_url: "引用したいツイートのURL"})
}

が、このままやると全く同じ内容のツイートは2度できない制限に引っかかってしまいます

回避策は「文字列の末尾に日付などの値を足す」「前回のツイートをいちいち消す」などが考えられますが、どれも一長一短です。

自分の場合は短期間に数回ツイートするだけだったので、「ツイートの文中にあるスペースをランダムかつ不自然でない範囲で増やす」という一時しのぎ的な回避策を取りました。

(どなたか良いアイデアのあるかた、お願いします。。。)

RT

一度手動でRTしておく必要がありますが、これは何度でも実行できます。

function tweet(){
  Twitter.oauth.service().fetch("https://api.twitter.com/1.1/statuses/unretweet/[ツイートID].json", { method: "POST" });
  Twitter.oauth.service().fetch("https://api.twitter.com/1.1/statuses/retweet/[ツイートID].json", { method: "POST" });
}

ヘルパーのTwitter.api(path, data)から任意のAPIを叩けるようにはしてあるのですが、最近RTのAPIが変わったのか上手く動きませんでした。

7. 定時実行を設定する

GASの機能で決まった関数を定時実行することができます。

画面左上の時計マークをクリックし、お好みの間隔で設定してください。

毎分とかにするときっと嫌われますのでフォロワーさんのTLに迷惑をかけないように。

参考文献

以下、参考にさせていただきました。

  1. 本当は最新版に合わせて訂正すべきとこだったんですが、力尽きましたすみません

20
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?