見出し画像

【PHPでWebスクレイピング入門】PHPからInstagramのJSONデータを入手し、フォロアー数などのアカウント情報を抽出する

今回はPHPを使って、対象となるInstagramアカウントの情報を入手する方法を取り上げてみたいと思います。

またこちらの内容は、下記のPythonを利用したWebスクレイピングとなるべく同じスタイルで書き上げるようにしています。PHPに加えて、Pythonにも挑戦してみたい!と言う方は是非ご一読ください。

注意事項: Instagramはスクレイピングなどを利用規約にて禁止しており、今回の記事ではPythonのお題として取り上げております。これらを利用して運用する事は、利用規約に抵触する可能性が高いので、あくまで自己責任の範囲で行ってください。

まずは環境の準備

今回は特別なAPIなどを使わず、PHPが標準で持っている関数などを使ってJSONデータを入手してみます。

PHPでは、下記のライブラリ「Instagram-API」がとても有名ですが、どうもDMCAに違反していると言う事で、取り下げられてしまっています。(2020年1月30日現在)

https://github.com/mgp25/Instagram-API

スクリーンショット 2020-01-30 午前9.34.22

InstagramページからJSONデータを入手する

Instagramのページ構造として、ユーザーや投稿などに関する情報がJavaScript内にJSON形式で埋め込まれているので、こちらはそのJSONデータを取り出す関数モジュールになります。

function get_json_data($url) {

   $dom = new DOMDocument;
   @$dom->loadHTML(file_get_contents($url));
   $xpath = new DOMXPath($dom);

   $js = $xpath->query('//body/script[@type="text/javascript"]')->item(0)->nodeValue;
   $json = substr($js, strpos($js, '{'), strrpos($js, ';') - strpos($js, '{'));
   $data = json_decode($json, true);

   return $data;

}

返ってきたJSONデータに対して、今回はプロフィールのユーザー名、フルネーム、フォロア数、フォロー数、紹介文を下記の様に抽出します。

$ig_user = $data['entry_data']['ProfilePage'][0]['graphql']['user'];
$ig_user_username = $ig_user['username'];
$ig_user_fullname = $ig_user['full_name'];
$ig_user_followers = $ig_user['edge_followed_by']['count'];
$ig_user_following = $ig_user['edge_follow']['count'];
$ig_user_biography = $ig_user['biography'];

これ以外にも、プロフィールのサムネイル画像、登録されているURL、公式アカウントかどうか、などが入手可能です。

今回のPHPスクリプト

<?php

$data = get_json_data("https://instagram.com/調べたいInstagramユーザー/");

$ig_user = $data['entry_data']['ProfilePage'][0]['graphql']['user'];
$ig_user_username = $ig_user['username'];
$ig_user_fullname = $ig_user['full_name'];
$ig_user_followers = $ig_user['edge_followed_by']['count'];
$ig_user_following = $ig_user['edge_follow']['count'];
$ig_user_biography = $ig_user['biography'];

print('ユーザー名: '.$ig_user_username."<br>");
print('フルネーム: '.$ig_user_fullname."<br>");
print('フォロアー数: '.$ig_user_followers."<br>");
print('フォロー数: '.$ig_user_following."<br>");
print('紹介文: '.$ig_user_biography."<br>");

function get_json_data($url) {

   $dom = new DOMDocument;
   @$dom->loadHTML(file_get_contents($url));
   $xpath = new DOMXPath($dom);

   $js = $xpath->query('//body/script[@type="text/javascript"]')->item(0)->nodeValue;
   $json = substr($js, strpos($js, '{'), strrpos($js, ';') - strpos($js, '{'));
   $data = json_decode($json, true);

   return $data;

}

まとめ

一見難しそうに見えるInstagramのJSONデータですが、構造を理解する事で自分の取り出したい情報に簡単にアクセスできるかと思います。


この記事が気に入ったらサポートをしてみませんか?