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行でも表現できると思うけど、見にくいので別々にした。