Digitra

LINUXサーバの設定やプログラムのことなどを中心にブログを書いています。

InstagramのURLからコンテンツのIDを調べる

インスタグラムのAPIを使ってコンテンツIDとコンテンツのURLなどの情報が取得できるのだが、逆にコンテンツのURLがわかっていて、そのURLのコンテンツがどのコンテンツIDと紐付いているのかを推測出来ないかを調べていたが、APIも無いしどうしたものかなと迷っていた。

 



きっとInstagramのWebページのソースにはあるんじゃないかと当該コンテンツIDで検索してみると、

<meta property="instapp:owner_user_id" content="212875457" />
<meta property="al:ios:app_name" content="Instagram" />
<meta property="al:ios:app_store_id" content="389801252" />
<meta property="al:ios:url" content="instagram://media?id=1167164565206018358" /|meta property="al:ios:url" content="instagram://media?id=1167164565206018358" />

のところの、一番下のmedia_idと一番上のuser_idを組み合わせて、
[media_id]_[user_id] = 1167164565206018358_212875457

という構成になっていた。
そこで、こんな感じのPHPコードでURLからコンテンツのIDを抽出してみた。

$hashid = $_POST["hashid"];
$tmp_html = file_get_contents("https://www.instagram.com/p/".$hashid."/");
 if ( !$tmp_html ) {
     $cont_id = "";
} else {
     preg_match("/\"instapp\:owner_user_id\" content=\"([0-9]+)\"/", $tmp_html, $user_ms);
     preg_match("/instagram\:\/\/media\?id=([0-9]+)\"/", $tmp_html, $media_ms);
     if ( isset($user_ms[1]) && isset($media_ms[1]) ) {
          $cont_id = $media_ms[1]."_".$user_ms[1];
     }
}

preg_matchのところは1行でも表現できると思うけど、見にくいので別々にした。