Google Apps Script 講座初級編「GASでInstagramのフォローフォロワー数をスクレイピングする」
はじめに
後藤銃士です。7回目となります。Instagram のフォロー数、フォロワー数を取得したケースを考えてまして、今回はそのスクレイピングについて説明したいと思います。5回めに書きました「GASでTwitterのフォローフォロワー数をスクレイピングする」の姉妹編となります。
前回のスクレイピングでは Twitter のページのソースから正規表現を利用して欲しい情報を(フォローフォロワー数)を取り出しましたが、今回、Instagram のページのソースをよく見ると、JSON形式でサイトの概要が掲載されている箇所があるんでそこを利用することにします。
JSON形式とは?
詳しい解説は JSON とは何か
を読んでいただくとよいと思います。
JSON は JavaScript オブジェクトの構文に従ったテキストベースのフォーマット
とかいわれてもチンプンカンプンでしょうから「ふーん」ぐらいでよいかと思います。具体的に説明していきますのでそこでざっくり理解できればよいです(できなくても大丈夫です、コピペなので)
この機能が役に立つのは
今回は初級編「GASでInstagramのフォローフォロワー数をスクレイピングする」
対象
- 基本ができていればよいかもしれません。
学べること
Google Apps Script によるスクレイピングの基礎テクニック
講座スタート
いつもどおりコピペだけで大丈夫です。
新しくタブを開き「script.google.com」を入力してコードを書ける状態にして下さい。
そしていつもどおり1行目の3行目の間に
var instagramId = 'rena_takeda' var url = 'https://www.instagram.com/' + instagramId; var response = UrlFetchApp.fetch(url); var html = response.getContentText('UTF-8'); var json = html.match(/window._sharedData = (.*?);<\/script>/)[1]; var jsonData = JSON.parse(json); var full_name = jsonData['entry_data']['ProfilePage'][0]['graphql']['user']['full_name'] var follows = jsonData['entry_data']['ProfilePage'][0]['graphql']['user']['edge_follow']['count']; var followers = jsonData['entry_data']['ProfilePage'][0]['graphql']['user']['edge_followed_by']['count']; Logger.log(full_name); Logger.log(follows); Logger.log(followers);
をコピペして保存し、実行してみましょう。
表示>ログを選択してみて下さい。
今回は人気女優の「武田玲奈さん」の Instagram を参考にさせていただいています。あっさり名前、フォロー、フォロワー数が取得できました。
コードの instagramId を参照したい方の InstagramId に変えてもらえば誰のものでも参照できます。 instagramId は URL の https://www.instagram.com/rena_takeda/ の赤文字のところです。
ではコードの解説を少し。 1〜4行目は前回説明が済んでいると飛ばすします。
var json = html.match(/window._sharedData = (.*?);<\/script>/)[1];
今回は個々がキモです。これは正規表現でソースコードの 「window._sharedData =」から「;<\/script>」の間の記述を取り出して json に格納してね、という命令です。 じゃあその間にあるデータがどういうものかというと、以下になります。
…ゴチャゴチャしてよくわかんねーですね?複雑な構造のデータをコンピューターは気にせず処理できますが、人類が目視で確認するのは少々キツイ。そんなときは便利なサイトがあります。見やすいように整形してくれるんです。
そうするとなにやらデータが構造的に定義されていることがわかるのではないでしょうか。Instagram の情報がてんこ盛りとなっていますので、ここかデータを取得します。 GAS、というか JavaScript は JSON データを配列に変換することで簡単に扱えるようにしてくれる仕組みがあって、それが
var jsonData = JSON.parse(json);
です。あとはデータの構造にそって欲しい情報を指定すればデータを取得することができるわけです。
var full_name = jsonData['entry_data']['ProfilePage'][0]['graphql']['user']['full_name']
entry_data → ProfilePage → 0
この「0」っていう、突然出てくるのでなんだこれ?と思うかもしれないですが、画面をよくみると「[」ってのがあるじゃないですか。こいつを指してます。これは配列と呼ばれるデータの持ち方で番号で指定します。
"ProfilePage" : [ { xxxx } , { yyyy }, {zzzz} ]
のようなデータで { xxxx } を指定したい場合は ['ProfilePage'][0] になります。今回は配列でデータを持っているのですが
"ProfilePage" : [ { xxxx } ]
なので 0 を指定することになります。
あとは、
entry_data → ProfilePage → 0 → graphql → user → full_name
とすれば、名前を取得できる、というわけです。 解析データを眺めるといろいろわかると思いますが、最新の画像の URL や投稿時のコメントなども合わせて取り出すことができますから、トリガーを使って定期取得する、というのも価値があるかと思います。
今回は、スクレイピングと JSON について書きました。この JSON はあちこちで出現する重要データ形式ですので、扱い方を知っていると役に立つと思います。特にフロントは JavaScript を使いますしね。
よし、これで Twiter と Instagram 双方のフォロー、フォロワー数の自動記録の仕方はクリアです。おめでとうございます。次は YouTube や TicTok あたりがターゲットになるかもしれないですが、食傷気味かな。次はもっと別の GAS の使い方を解説出来るようにします。
それではご覧いただきありがとうございました。