Вытягиваем thumbnails из instagram

Материал на этой страницы предоставлен исключительно для ознакомительных целей. Ни в коем случае не пользуйтесь им и не пробуйте ;) Это может быть опасно.

Часто люди хотят повесить себе инстаграм виджет с актуальными картинками прямо из инстаграмма и это достаточно не простая задача, учитываю то, что instagram построен на достаточно сложных технологиях, таких как SPA (single page application) и тд. На настоящее время инстраграм очень сильно усложнил разработчиками жизнь и убрал из своего арсенала всякие виджеты, а также усложнил доступ по API. А нам всего лишь нужно просто получить в автоматическом режиме миниатюры наших фотографий.

Я искал готовые решения, но один товарищ (не будем называть имён) сделал доступ к своему виджету платный, а второй виджет у меня просто не запустился, хотя вроде как написал он был грамотно. Моей задачей было затратить минимум времени и вытянуть необходимую информацию со страницы в автоматическом режиме в минимально сжатые сроки (время - деньги, я хочу отдыхать и всё такое)

К счатью, всё, что выводится автоматически - автоматически и парсится. Если мы откроем нашу страницу в инстраграм и посмотрим содержимое, то можно найти в js'е, строчки кода, отвечающие за адрес миниатюр. Также стоит помнить, что эти миниатюры доступны по данным урлам ограниченное количество времени (непонятно зачем). В общем мой способ получить thumbnails довольно кривой:

<?php

$text = file_get_contents("https://www.instagram.com/<instagram_id_here>/");
$pattern = '/"thumbnail_resources":(\\[.*?\\])/';

preg_match_all($pattern, $text, $matches, PREG_SET_ORDER);

$i = -1;
$counter = 0;

foreach ($matches as $match) {
    $i++;

    if ($i < 3) {
        continue;
    }

    $thumbnails = json_decode($match[1], true);

    $src = $thumbnails[0]['src'];
    $image = file_get_contents($src);
    $fileName = 'img-' . $counter . '.jpg';

    file_put_contents(__DIR__ . '/thumbnails/' . $fileName, $image);
    $counter++;

    if ($counter == 12) {
        break;
    }
}

Выше я написал достаточно простой php код. Он выбирает из js строчки, которые нам необходимо будет спарсить, как JSON. Также я пропускаю первые 4 значения, потому что при попытках парсить, я увидел там какой-то мусор =). Далее мы просто парсить кусочки js кода и извлекаем оттуда thumbnails src, которые и являются картинками. Теперь, имея последние картинки - мы можем смело сделать виджет с помощью css. Думаю не стоит злоупотреблять этим кодом и запукать его чаще, чем раз в день. 

В целом решение довольно плохое, но рабочее. Хочу заметить, что это не оффициальный API. Для данного способа нет документации. Instagram в любой момент времени может изменить код на своих страницах и способ будет нерабочим.