Twitterのフォロー返し(リフォロー)をGoogle Apps Scriptで自動化する

TwitterでBot等を運用していると、「フォローを返す」というのはわりと重要。
相互フォローならDMもやりとりできるし、「フォローしてくれるならフォローする」という人もいるのでフォロワーが増える可能性がある。
ということでフォロー返し(リフォロー)を自動化するやつを作ってみた。

大まかな流れとしては、

  1. Twitterの自分用アプリを作成(なければ)
  2. Twitterの設定で新しいフォロワーが増えたらメール通知するようにする
  3. Google Apps Scriptで、そのメールをチェック
  4. TwitterのAPIでフォローを返す
  5. メールを既読にする

という感じ。

Step0. Twitterのアプリを作成(なければ)

TwitterのAPIを使うので、Twitterアプリが必要になる。
※画像は以前の記事の使い回しなので、アプリ名の意味とかは無視してください

https://dev.twitter.com/にアクセスし、自分のTwitterアカウントでサインイン。
自分のTwitterアカウントでサインイン

My applicationsへ移動。
My applicationsへ移動

右上の「Create a new application」をクリックし、必要な情報を入力。
「Create a new application」をクリック

「Name」はなんでもいいけど、誰かが同じ名前のアプリを作ってるとエラーになる。
「Description」も適当に。文字数が少ないとエラー。
「Website」もなんでもOK。とりあえずGoogleドライブのURLにした。
「Callback URL」は必ず「https://spreadsheets.google.com/macros」にする必要がある。

入力したら「Developer Rules Of The Road」の同意にチェックし、CAPTCHAに表示された文字を入力して「Create your Twitter application」ボタンをクリック。
アプリケーションが作成された。

必要になるのは「Consumer key」と「Consumer secret」のランダムな文字。
これをメモしておく。
アプリケーションが作成された

Step1. Twitterのメール通知設定

フォロワーが増えた時にメールが来るようにする。
ちなみにGoogle Apps Scriptを使って作るので、Gmail宛てに受け取るようになってないといけない
Twitterでメール通知設定

Step2. スクリプトを新規作成

Googleドライブで「スクリプト」を新規作成する。
Google Apps Scriptで新規作成

Step3. Twitterアプリの情報を設定

「ファイル」メニューの「プロジェクトのプロパティ」を開く。
「プロジェクトのプロパティ」を開く

「プロジェクトのプロパティ」タブに移り、
twitterConsumerKey」= Step0で取得した「Consumer key」
twitterConsumerSecret」= Step0で取得した「Consumer secret」
を設定する。
(プロパティ名は上記のまま記入してください)
プロパティ設定

Step4. Google Apps Scriptの記述

以下のコードをペーストして保存。

function twitterReFollow(){
  // Twitter用OAuthコンフィグ
  var oAuthConfig = UrlFetchApp.addOAuthService("twitter");
  oAuthConfig.setAccessTokenUrl("http://api.twitter.com/oauth/access_token");
  oAuthConfig.setRequestTokenUrl("http://api.twitter.com/oauth/request_token");
  oAuthConfig.setAuthorizationUrl("http://api.twitter.com/oauth/authorize");
  oAuthConfig.setConsumerKey(ScriptProperties.getProperty("twitterConsumerKey"));
  oAuthConfig.setConsumerSecret(ScriptProperties.getProperty("twitterConsumerSecret"));
  try {
    // 自分のTwitter情報を取得
    var url = "https://api.twitter.com/1.1/account/verify_credentials.json";
    var me = UrlFetchApp.fetch(url,{method:"get",oAuthServiceName:"twitter",oAuthUseToken:"always"});
    me = Utilities.jsonParse(me.getContentText());
    // 情報が取れなければ終了
    if(!me.screen_name) {
      return false;
    }
    me = me.screen_name;
    // Gmailからフォローされたメールを取得
    var threads = GmailApp.search('is:unread from:(twitter.com) subject:(フォローされ)',0,50);
    var reg = new RegExp("\@([a-zA-Z0-9_]*(?!"+me+"))","i");
    var followers = new Array();
    for(var i = threads.length; i--;) {
      var message = threads[i].getMessages()[0];
      var body = message.getBody();
      // メール本文からスクリーンネームを抜き出す
      if(body.indexOf(me)>=0 && body.match(reg)) {
        var screen = RegExp.$1;
        if(screen && screen != me){
          followers.push({id:message.getId(), screen:screen});
        }
      }
    }
    // データがなければ終了
    if(!followers.length) {
      return false;
    }
    // 全員をフォローする
    var options = {
      "method":"POST",
      "oAuthServiceName":"twitter",
      "oAuthUseToken":"always"
    };
    for(var i = followers.length; i--;) {
      var follower = followers[i];
      var url = "https://api.twitter.com/1.1/friendships/create.json?follow=true&screen_name=" + follower.screen;
      var result = UrlFetchApp.fetch(url, options);
      if(200 === result.getResponseCode()){
        result = Utilities.jsonParse(result.getContentText());
        // フォローに成功したらメールを既読にする
        if(result.following) {
          GmailApp.markThreadRead(GmailApp.getThreadById(follower.id));
        }
      }
    }
  } catch (e) {
    Logger.log(e.toString());
  }
}

Step5. Google Apps Scriptの実行テスト

上部メニューの「実行」から「twitterReFollow」をクリック。
関数を実行

Twitterの承認とかGmailの承認とかが出てくるので、すべて「OK」か「承認」をクリックする。
警告などが出なくなるまで何度か実行した方が良いかも。

Step6. 自動実行を設定

上部の時計っぽいアイコンをクリックすると自動実行の設定が開くので、「今すぐ追加するにはここをクリックしてください。」のリンクをクリックする。
自動実行の設定
時間割は好きなタイミングにするといいと思う。

以上、あとは放っておけば自動フォロー返しが動くと思う。
ちなみにフォロー返しが実行されるとメールは既読になるので、その点はご注意を。