かずきち。の日記

サーバサイドエンジニアのつぶやき

【instagram運営者向け】消費者のハッシュタグ付きinstagramの投稿にいいねを自動でつける【GoogleAppsScript74行】

instagramのいいねを自動化する

マクドナルドのTwitter見たことありますか?
ツイートにフォロー・コメントしたらマックカードが当たるキャンペーンです。
消費者がマクドナルドの投稿にいいねすると、企業から自動リプライなどが飛んでくる仕組みです。

こんな大々的なキャンペーンはマクドナルドという大きな資本だからできるんだよと思いますよね?

でも早い話がプログラムで#月見バーガーみたいなタグが付いている投稿をリスト化して、いいねしているだけです。
マクドナルドのSNS担当者がこんなこと人手でやっていたら死ぬので自動化します。

cookieとcsrtoken

cookieはなんとなく聞いたことがあるかと思います。
パスワードをブラウザに保存して、次回入力しなくていいよというやつです。
この技術はハッカーが好んでいまして、他人のサイトのアクセス権限を奪ってしまう悪用ができます。
今回はこの部分を悪用ではなく、生かして、instagramの自動いいねをしていきます。

パスワード付きサイトにGASでログインする

GASってメール送信の自動化などできますが…
前提としてログインしている状態で始まります。

Gmailにログインしている状態でスタート
Googleスプレッドシートにログインしている状態でスタートしていまして、
Google外へのログインをどのようにGASで奪取するのか?が重要です。

インターネットブラウザはなぜそのブラウザにログイン情報が残っているのか判断するか?

それはブラウザがcsrtokenを内部で持っているからなんですが、CSRトークンって何?って感じだと思います。

クロスサイトリクエストフィージェリは聞いたことがあるかと思います。
いやないかもしれないです。
金融機関などのアクセス制限がかかっているサイトから発行されている一時的なトークンをプログラムコードに埋め込むことで、GASにfacebookinstagramへのログイン権限を人為的に付与する方法です。


引用:
https://tech-lab.sios.jp/archives/22952

フィッシングサイトはサイトの作りを見せて、人からパスワードを盗み取る手法ですが…
CSRはもはやパスワードはわからんけど、ログインセッションを盗む方法です。

facebookのペスワードはわからないけれど、facebookにログインしている状態を奪取する方法です。

一般には素人が「アカウントが乗っ取られた」みたいなことを言っていますが…
厳密に言えばパスワードがバレてアカウントがダッシュされたのか?アカウントのログイン状態を奪取さされたのか厳密には異なります。
今回は自身のinstagramへのログイン状態をGASに埋め込んでみます。
つまりGASからinstagramを操作してしまいましょうということです。

さっそくコード
/*
instagramのログイン情報をhearderに格納
*/

var headers = {
 "cookie":"sessionid=6193386977%3AHCCgQNNdpXDTx1%3A23;",
 "x-csrftoken":"3AP5HL54eoZCCM395CBycadUZrSrSCH8"
};

/*
tag配列に指定したタグの投稿を取得します
*/

function SELECT_TAG() {
  try {
    var tags = [
       "tokyo"
    ];
    var tag = tags[Math.floor(Math.random()*tags.length)];
    return tag;
  } catch(error) {
    console.log("SELECT_TAGでエラー発生")
  };
};

/*
タグをつけて投稿しているユーザのIDを取得
*/

function GET_ID_LIST() {
  try {
    var tag = SELECT_TAG();
    Logger.log(tag);
    var url = "https://www.instagram.com/explore/tags/" + tag + "/?__a=1";
    var options = {
      "method" : "get",
      "headers" : headers
    };
    var reply = UrlFetchApp.fetch(url, options);
    var json = JSON.parse(reply);
    var data = json["data"]["recent"]["sections"];
    var ID_LIST = [];
    for(var i=0; i<data.length; i++) {
      var id_num = data[i]["layout_content"]["medias"][0]["media"]["id"]
      var id = id_num.slice(0,id_num.indexOf("_"))
      ID_LIST.push(id);
    };
    return ID_LIST;
  } catch(error) {
    console.log("GET_ID_LISTでエラー発生")
  };
};

/*
指定したinstagramのタグに10秒間のsleepを入れて自動いいねします(GASの連続実行はGsuteBasicでは10分間のため)
*/

function Create_Favorite() {
  try {
    var ID_LIST = GET_ID_LIST();
    for (var i in ID_LIST) {
      var url = "https://www.instagram.com/web/likes/" + ID_LIST[i] + "/like/";
      var options = {
        "method" : "post",
        "headers" : headers
      };
      var ResponseCode = UrlFetchApp.fetch(url, options).getResponseCode();
      Utilities.sleep(10 * 1000);
      console.log(ResponseCode);
    };
  } catch(error) {
    console.log("Create_Favoriteでエラー発生");
  };
};

ブラウザはここのx-csr-tokenとcookieを読み取って、こやつは人間だなと判断します。
なので、ここを偽造することでGAS=人間だとinstagramを判断させればいいです。

また今回は、tokyoというタグを無差別にいいねしていますが、ここを#ガリガリ君とかに変更すれば、指定したハッシュタグにいいねができます。

instagramクッキーポリシー

https://www.facebook.com/help/instagram/1896641480634370/?helpref=hc_fnav

この方法はinstagramの運用を自動化していますので、Metaが所有するCookie情報をGAS上に書き込んでいますので
仕様変更されるか?アカウントに制限が入ると自動化が無効になります。

instagramのアカウントが停止したことがありますが、支障がない程度ならinstagramの自動化は容易にできます。
電通博報堂といった広告代理店では当たり前のように使っていると思いますが、自前でinstagram運用を自動化したい人はぜひ使ってみてください。
これで私はinstagramのフォロワーが毎日爆増しています。
利用規約違反でアカウントが停止しないように気をつけてください。