php парсер instagram по геометке
Решил найти в интернете бесплатный парсер id пользователей инстаграмма по геометке (геокоординатам, городу), но не нашел, везде платные. Решил такую простую задачу решить на php, ниже увидите код — что из этого получилось.
Для чего это нужно: есть множество программ с бесплатной версией, которые позволяют приглашать людей в подписчике из instagram по списку id, но вот за функцию парсинга по геолокации требуют деньги, а так для личных целей можно и бесплатной версией пользоваться.
php код отлично работает на phpfiddle.org
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 |
<?php //переменные $url_parser="https://www.instagram.com/explore/locations/123456/"; //ссылка для парсинга $glubina_stranic="10"; //глубина парсинга, на одной странице 20 id пользователей class instaWrapper { static function getFeedByUrl($url) { $source = file_get_contents($url); if ($source == false) { echo "Connection problem"; die(); } $shards = explode('window._sharedData = ', $source); $insta_json = explode(';</script>', $shards[1]); $insta_array = json_decode($insta_json[0], TRUE); if (isset($insta_array['entry_data']['ProfilePage'])) $nodes = $insta_array['entry_data']['ProfilePage'][0]['user']['media']['nodes']; elseif (isset($insta_array['entry_data']['LocationsPage'])) $nodes = $insta_array['entry_data']['LocationsPage'][0]['location']['media']['nodes']; elseif (isset($insta_array['entry_data']['TagPage'])) $nodes = $insta_array['entry_data']['TagPage'][0]['tag']['media']['nodes']; $result=[]; foreach($nodes as $item) { $result[]=[ "id" => $item['id'], "code" => $item['code'], "url" => "https://www.instagram.com/p/".$item['code'], "timestamp" => $item['date'], "date" => date("d.m.Y H:i:s", $item['date']), "caption" => (isset($item['caption'])?$item['caption']:false), "owner_id" => $item['owner']['id'], "thumbnail_src" => $item['thumbnail_src'], "image_src" => $item['display_src'], "is_video" => (boolean)$item['is_video'], "dimensions" => $item['dimensions'] ]; } return $result; } } $insta_massiv = ( instaWrapper::getFeedByUrl("$url_parser") ); for ($i = 1; $i < count($insta_massiv); $i++) { echo $insta_massiv[$i]['owner_id']."<br>"; $last_id_anketa = $insta_massiv[$i]['id']; } $x=0; while ($x++<$glubina_stranic) { $insta_massiv = ( instaWrapper::getFeedByUrl("$url_parser?max_id=$last_id_anketa") ); for ($i = 1; $i < count($insta_massiv); $i++) { echo $insta_massiv[$i]['owner_id']."<br>"; $last_id_anketa = $insta_massiv[$i]['id']; } } ?> |
У скрипта только 2 параметра:
- Ссылка для парсинга, её можно взять зайдя на сайт инстаграм, ввести адрес или свой город и получить ссылку в адресной строке браузера
- Глубина парсинга, число до какой страницы собирайть id пользователей.
Добрый день!
Занимаетесь ли разработкой скриптов аналогичного этому на заказ?)
Интересно собирать не ID пользователей, а текст их постов в по конкретной геолокации (для SMM-целей \ отзывы посетителей).
В идеале нужно, чтобы скрипт выводил в таблицу (к примеру MySQL) посты в формате
«Дата сбора»;»id-пользователя»;»текст поста»
Если интересно, детали можно обсудить по почте, что я оставил при написании комментария.
Заранее спасибо)
Пока свободного времени мало, поэтому заказы не беру.
Изменил слегка скрипт — теперь выводит текст постов. Код тут — https://pastebin.com/0SRAMPMs
Также запустить код online можно на сервисе — http://phpfiddle.org/
Спасибо за скрипт, использовал более полугода, но сейчас что-то поменялось и скрипт работать перестал… Буду благодарен, если подкорректируете.
К сожалению сам не пользуюсь и свободного времени нет, но код простой, можно и самому подправить.