Instagramの情報取得は”_sharedData”の値を取得するといいらしい

インバウンドマーケティングで盛んに行われているのがインスタグラムを使った広告活動です。
インフルエンサーと呼ばれる数万人のフォロワーを持つ人たちに、企業の商品を投稿してその反響を使ってコンバージョンアップを目指すというモノなんですが、時代は想像以上にインスタグラム依存しているようです。
そんでもって、インスタグラムの情報取得も非常に重要なミッションになっているようです。
インフルエンサーの日々のフォロワー数の増減数や、各記事におけるエンゲージメントと呼ばれる反響値を集計して企業はコンバージョンの割合を実感するようです。
今回はインスタグラムのスクレイピングするのは、spookyjsのようなレンダリングクローリングではなくて、単にページのソースコードを値分解するだけでよかったという事に気が付いたので、そのソースコードも掲載しておきますので、気になる人はイジってみてください。
情報取得するソース
インスタグラムのソースコードをみてみると、生ソースの中にjavascriptタグの中に”window._sharedData”という大きなjsonコードが存在するのがわかります。
このデータはajaxで呼び込まれていないので、ストレートにurlアクセスするだけで取得できてしまいます。
中身は実際の画面をみながら付け合わせると、何がどの値なのかは非常にわかりやすい構造になっていますが、さらに情報取得を簡単にできるように、PHPでプログラミングしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
<?php namespace Instagram; class scraping_account{ // データ取得基本 public static function getScraping($account_id){ $html = file_get_contents("https://www.instagram.com/".$account_id); $ptn = '<script type="text\/javascript">window\._sharedData \= (.*?);<\/script>'; preg_match("/".$ptn."/",$html,$match); if(!$match[1]){return;} $json = json_decode($match[1],true); $root = $json["entry_data"]["ProfilePage"][0]["graphql"]["user"]; $thumbUrl = self::getThumbnail_url($root); return array( "account_id" => self::getAccount_id($root), "name" => self::getName($root), "text" => self::getText($root), "link" => self::getLink($root), "thumbUrl" => $thumbUrl, "thumbFile" => self::getUrl2File($thumbUrl), "badge" => self::getBadge($root), "post" => self::getPost($root), "follow" => self::getFollow($root), "follower" => self::getFollower($root) ); } // account_id public static function getAccount_id($json){ return $json["username"]; } // name public static function getName($json){ return $json["full_name"]; } // biography public static function getText($json){ return $json["biography"]; } // external-link public static function getLink($json){ return $json["external_url"]; } // follow public static function getFollow($json){ return $json["edge_follow"]["count"]; } // follower public static function getFollower($json){ return $json["edge_followed_by"]["count"]; } // post public static function getPost($json){ return $json["edge_owner_to_timeline_media"]["count"]; } // thumbnail-url public static function getThumbnail_url($json){ return $json["profile_pic_url"]; } public static function getUrl2File($uri){ if(!$uri){return "";} $url = explode("?" , $uri); $info = pathinfo($url[0]); return $info["filename"] .".". $info["extension"]; } // badge public static function getBadge($json){ if($json["is_verified"]){ return 1; } else{ return 0; } } } |
使い方
このプログラムは、インターネット接続されているサーバーで実行すると、任意のインスタグラムアカウントの情報を取得することができるという結構簡易なスクレイピングシステムになっています。
しかも、レンダリング系クローリングよりもかなり高速に情報収集ができるので超オススメ!!
PHPのnamespaceは”\Instagram\scraping_account”で行なっているので、このライブラリを読み込んで下記のように情報取得してみてください。
1 2 3 4 5 |
<?php require_once "instagram_account.php"; $data = \Instagram\scraping_account::getScraping($_REQUEST["account_id"]); print_r($data); |
ブラウザで
crawling.php?account_id=watanabenaomi703
にアクセスすると、以下のような情報がかえってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Array ( [account_id] => watanabenaomi703 [name] => 渡辺直美 [text] => Naomi Watanabe🇯🇵comedian [link] => https://store.punyus.jp/s/?utm_source=201506&utm_medium=instagram&utm_content=storetop&utm_campaign=instagram [thumbUrl] => https://scontent-nrt1-1.cdninstagram.com/vp/ca36ba962372a04f507d58d72fc678dd/5C3538B2/t51.2885-19/11899577_1613263995590171_1304961325_a.jpg [thumbFile] => 11899577_1613263995590171_1304961325_a.jpg [badge] => 1 [post] => 891 [follow] => 467 [follower] => 8231176 ) |
インスタで話題の渡辺直美さんのアカウントをクロールしてみました。
やっぱ芸能人は桁違いに凄いですね!!!
本当のコンバージョン
取得まで1秒かからないことから、数百人のデータクロールをしても、1時間もかかりません。
10分ぐらいで完了します。
大体のマーケターの人はこの状態で見せると狂ったように喜びます。
何故なら彼らは、こうした作業をブラウザで一つ一つ表示して、エクセルに手作業でコピペしているんですから、こんなに簡単に作業が完了してしまうなんて、効率化として考えたら半端ないですからね。
そういう訳で、その手の業界には非常にニーズが高いソースなのですが、こうしたプログラムでインスタグラムの値を取ったところで、本当のコンバージョンではありません。
インスタグラムは単なる広告ディスプレイです。
ECで何かを販売している企業での本当のコンバージョンは、自社ECサイトの購入完了にならないといけません。
インスタグラムのインフルエンサーの記事を見て購入したという事がキッチリわからないことには、この広告投資に対する本当の意味での費用対効果はわかりません。
この点がマーケターの人たちは非常に苦労しているようで、自社サイトで、「何を参考に購入したか?」というのを、アンケートしたり、インスタにアップする画像にQRコードを仕込んだり、色々なやり方で対応しているマーケターもいますが、ほとんどの会社が理論値としてレポート提出しているだけのようです。
コンバージョンが取れるいい方法があれば、それはそれで仕組みを作りたいですね。