🔁TwitterのリツイートbotをGASで作成する

Twitterで気になるワードはiftttで検索してメールやslackに流して確認できるように自動化、ってのが一時期流行ってたけど大体見なくなる。投稿してる側も気軽に投稿してるんだしそこまで神経尖らして見る必要もなかったり、検索して見たい項目によっては「今」話題になり始めた物をすぐにわかる形にしておきたい時もある。自分だけでは無く全員が気軽に見られる形で。

という目的意識の元「リツイートbot」を作成した次第。サーバーのメンテナンスをする必要がないようにIFTTTとGoogleAppsScript(GAS)を組み合わせています。

設定方法

  1. Twitterのconsumerトークン取得
  2. GoogleAppsScriptの設置
  3. ライブラリの追加
  4. Twitterのconsumerトークンを設定
  5. GoogleAppsScriptで「authorize」関数を実行して認証を行う
  6. 「ウェブアプリケーションとして導入」で実行可能なURLの取得
  7. IFTTTで「Twitter検索 -> WebHook」のAppletsの作成

流れとしては上記の通り。

解説項目としては

  1. 実行するGoogleAppsScriptコード
  2. Twitter投稿の設定
  3. IFTTTの設定

をすればわかるかな、と思います。

実行するGoogleAppsScriptコード

実行可能なGoogleAppsScriptのコードはこちら

var CONSUMER_KEY = PropertiesService.getScriptProperties().getProperty("consumer_key");
var CONSUMER_SECRET = PropertiesService.getScriptProperties().getProperty("consumer_secret");

function doPost(e){
  var url = e.parameter.url;
  var id = tweetid(url);
  retweet(id);
  
  return "ok";
}

function tweetid(url) {
  var match = url.match(/(\d+)$/);
  return match[0];
}

function status(id){
  var service  = twitter.getService();
  var response = service.fetch('https://api.twitter.com/1.1/statuses/show.json?id='+id);
  Logger.log(JSON.parse(response));
}

function retweet(tweetid){
  var service  = twitter.getService();
  var response = service.fetch('https://api.twitter.com/1.1/statuses/retweet/'+tweetid+'.json', {
                               method: 'post',
                               payload: { id: tweetid}
                               });
  Logger.log(JSON.parse(response));
}

function exec() {
  var e = {
    parameter: {
      url: "http://twitter.com/zip_special/status/941088750267854848" // 確認用
    }
  };
  doPost(e);
}

// OAuth1認証用インスタンス
var twitter = TwitterWebService.getInstance(
  CONSUMER_KEY,
  CONSUMER_SECRET
);

// 認証を行う(必須)
function authorize() {
  twitter.authorize();
}

// 認証をリセット
function reset() {
  twitter.reset();
}

// 認証後のコールバック(必須)
function authCallback(request) {
  return twitter.authCallback(request);
}

// タイムラインを取得
function getUserTimeline() {
  var service  = twitter.getService();
  var response = service.fetch('https://api.twitter.com/1.1/statuses/user_timeline.json');
  Logger.log(JSON.parse(response));
}

// ツイートを投稿
function postUpdateStatus() {
  var service  = twitter.getService();
  var response = service.fetch('https://api.twitter.com/1.1/statuses/update.json', {
    method: 'post',
    payload: { status: '***MESSAGE***' }
  });
  Logger.log(JSON.parse(response));
}

IFTTT経由で対象のツイートIDを知る必要があるんですが、URLぐらいしか情報が取れなかったのでこの形式になってます。doPostで設定することで「ウェブアプリケーションとして導入」でのPOST実行された際に呼び出されます。

「ウェブアプリケーションとして導入」をお忘れなく。IFTTTの項目で使用するので、実行できるURLをメモしておきます。

スクリーンショット 2018-12-08 9.58.43.png

Twitter投稿の設定

GoogleAppsScriptからのTwitterへの投稿はTwitterWebService.gsを使用しているので、こちらの記事通りに設定すればできるかと。

Google Apps Script (GAS) でTwitterへ投稿するだけの機能を実装してみる

ちなみにこのライブラリはアカウント一つだけにしか対応していないので、複数アカウント設定する時にはこちらで。

[GAS] Google Apps Script でTwitter複数アカウントを使い分ける

自分の設定項目のスクショ

ライブラリを追加プロジェクトのプロパティ.png

IFTTTの設定

IFTTTは

Twitter検索 -> web hook

の流れでPOST実行させます。GoogleAppsScriptの項目で取得したURLを実行先に設定して

FF1AA019-7A65-4901-99C7-4B6D1F6EF5E7.png

body
url={{LinkToTweet}}

 

と設定すれば完了です。

お疲れ様でした。

 

実際に稼働しているbot

 

https://twitter.com/katatema2

シェアラジオのURLを検索してリツイートします。検索クエリは

radiko.jp/share min_retweets:30 OR min_faves:30

30リツイートか30ファボされたツイートがあり次第リツイートします。本来は片手間に聞く今日のラジオの更新通知用botとして作成したんですが、1日毎での集計だと「話題になっているラジオ」が1日遅れで知ることになるので少しもったいないのかなと。タイムラグが発生しないように即座にリツイートする形式なら数が多くても良いし、タイムラインに流すだけで目に入った気になるものを聞くのがちょうど良いです。

投稿者: soramugi

ラジオ好きが講じてお仕事に選んだ人。 webエンジニアなので「ラジオで寂しさを無くすシステム制作」をしています(ラジオ=音声コンテンツ)。 東京は立川によく出没します。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中