Skip to content
Go back

GAS を使ってTwitter のタイムラインを自動いいねするツールの作り方

公開: 更新:
この記事は steins.gg から移行した記事です。

.gg ドメインの維持費が高く、サイト運用を継続できなかったため steins.gg は閉鎖しました。

おはこんばんちは!
GAS を使ってTwitter のタイムラインを自動でいいねするツールを作ってみました。
コピペで誰でも使えるので、ぜひ使ってみてください。

目次

Open 目次

挙動

  • 自身のタイムラインに流れているツイートをいいねする。
    • ※1 引用RT(コメントなし)、画像のみ、リンクのみのツイートはいいねしない。
      • 危険な内容やスパムリンクだけのツイートの可能性があるため
    • ※2 URL(https://〜)やハッシュタグ(#〜)は「本文」とは見なさない。
    • ※3 「本文」が 6 文字以下のツイートはいいねしない。
      • そのユーザーの意思・意図が薄いツイートの可能性が高いため
      • ※1 ※2 のとおり、リンクやハッシュタグは文字数としてカウントしない
    • ※4 1回の実行で同じユーザーのツイートを2回以上いいねしない。
      • 連投していた場合、何度もいいね通知が飛んで不快にさせてしまう可能性があるため
    • ※5 自身のツイートはいいねしない。

実装

使うGASライブラリ

  • TwitterWebService

main.gs

// 認可用のインスタンス
var twitter = TwitterWebService.getInstance(
  "{consumerKey}",   // Twitter Apps で作成した API key
  "{consumerSecret}" // Twitter Apps で作成した API Secret key
);

var userList = [];

// 認可
function authorize() {
  twitter.authorize();
}

// 認可解除
function reset() {
  twitter.reset();
}

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

function getTimeLine() {
  var service = twitter.getService();
  var response = service.fetch(
    "https://api.twitter.com/1.1/statuses/home_timeline.json?exclude_replies=true&count=200&include_rts=false"
  );

  // fetch のレスポンス本文を JSON.parse する
  var array = JSON.parse(response.getContentText());

  array.forEach(function (tweet) {
    fav(tweet);
  });

  Logger.log(userList);
  userList = [];
}

function fav(tweet) {
  var service = twitter.getService();

  // ツイート本文
  var twiStr = (tweet && tweet.text) ? tweet.text : "";

  // URL より前の文章だけ残す ※2
  var urlIndex = twiStr.indexOf("https://");
  if (urlIndex >= 0) {
    twiStr = twiStr.slice(0, urlIndex);
  }

  // ハッシュタグより前の文章だけ残す ※2
  var hashIndex = twiStr.indexOf("#");
  if (hashIndex >= 0) {
    twiStr = twiStr.slice(0, hashIndex);
  }

  if (twiStr.length > 6) { // 6 文字を超えるかどうか ※3
    Logger.log(tweet.user.screen_name + " : " + twiStr);

    if (userList.indexOf(tweet.user.screen_name) === -1) { // ※4
      if (tweet.user.screen_name !== "{あなたのユーザーID}") { // ※5
        try {
          service.fetch(
            "https://api.twitter.com/1.1/favorites/create.json?id=" + tweet.id_str,
            { method: "post" }
          );
          userList.push(tweet.user.screen_name);
        } catch (error) {
          Logger.log(error);
        }
      }
    }

    // 連続で叩くとレートリミットに引っかかるので、間隔を空ける
    Utilities.sleep(1500);
  }
}

appscript.json

{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
    "libraries": [{
      "userSymbol": "TwitterWebService",
      "libraryId": "1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTF",
      "version": "2"
    }]
  },
  "webapp": {
    "access": "MYSELF",
    "executeAs": "USER_DEPLOYING"
  },
  "exceptionLogging": "STACKDRIVER",
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request", 
    "https://www.googleapis.com/auth/datastore"
  ]
}

運用方法

実運用としては、getTimeLine() を手動実行するか、時間主導トリガー(6時間に1回くらい)を設定して自動実行してください。
※ 色々試したところ、6時間くらい間隔を空けないとレートリミットなどの制限に引っかかることがありました。

応用編(2021/4/20 追記)

特定の文字列を含んだツイートを検索していいねすることも可能です。
例えばゲームを一緒にするフレンドを増やしたい場合、#〇〇フレンド募集#いいねした人フォローする を含んだツイートを検索していいねします。

実装

まずは main.gs の上のほうに、次の定数を追記します。
指定するワードは各自変更してください。

// ターゲットのハッシュタグ
var TARGET_HASHTAGS = ['#PUBGフレンド募集', '#VALORANTフレンド募集'];

// いいねした人フォローする系のキーワード
var LIKE_FOLLOW_KEYWORDS = [
  '#いいねした人フォローする',
  '#いいねした人全員フォローする'
];

次に「検索して拾って → 条件に合うツイートを fav() へ流す」関数を追加します。

function searchAndFav() {
  var service = twitter.getService();

  var tagGroup = "(" + TARGET_HASHTAGS.join(" OR ") + ")";
  var kwGroup  = "(" + LIKE_FOLLOW_KEYWORDS.join(" OR ") + ")";
  var q = tagGroup + " " + kwGroup;

  var url =
    "https://api.twitter.com/1.1/search/tweets.json" +
    "?q=" + encodeURIComponent(q) +
    "&result_type=recent" +
    "&count=100";

  var response = service.fetch(url);
  var data = JSON.parse(response.getContentText());
  var tweets = data.statuses || [];

  for (var i = 0; i < tweets.length; i++) {
    fav(tweets[i]);
  }

  Logger.log(userList);
  userList = [];
}

運用方法

同じように searchAndFav() を時間主導トリガーで実行してください

実際に運用してみた感想

私はPUBGやVALORANTなどをプレイすることが多いので、#PUBGフレンド募集, #VALORANTフレンド募集などのタグが付いていて、#いいねした人フォローするなどのいいねでフォローする系のツイートを自動でいいねする運用を1年ほど続けてみました。

結果、フォロワーが6000人ほど増えて、合計1万人を超えた。

しかし、こんなことで増えたフォロワーとは、結局一緒に遊ぶことなんて滅多にないことが分かった。

実際に遊ぶフレンドは数える程度だし、フォロワーが多いことで得することより損することの方が多い。
例えば、初見で警戒されることも多々ある。

ただ、見た目上でもフォロワーを増やすことが具体的なSNSビジネス戦略であったり、明確な目的があるアカウントであれば真似してみても良いかと思う。

さいごに

また、ちょっとグレーな話なのでにごすが、一定数フォロワーを増やしたアカウントをごにょごにょごにょ。
おっと誰か来たようだ

正直、私個人としてはこの応用運用は失敗でしたが、うまく使えばより良いSNSライフを作れると思うので、ご利用は計画的に!


Share this post on:

Previous Post
【真似すれば合格できる】AWS Certified Solutions Architect - Associate (SAA-C03) 合格体験記
Next Post
PC移行後にSourceTreeで「fatal: detected dubious ownership in repository...」が出るときの解消法