Нужно спарсить количество подписчиков произвольного профиля в инстаграм. По-моему это возможно сделать без авторизации и тем более API.
Я пробовал вот так:
$ch = curl_init();
$url = 'https://www.instagram.com/buzova86/';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_REFERER, 'http://instagram.com');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'authority: www.instagram.com',
'method: GET',
'path: /buzova86/',
'scheme: https',
'content-length: 44',
'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'accept-encoding: gzip, deflate, br',
'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
'sec-fetch-mode: navigate',
'sec-fetch-user: ?1',
'upgrade-insecure-requests: 1'
)
);
$data = curl_exec($ch);
var_dump($data);
В ответ получал
string(2539) "HTTP/1.1 302 Found
Content-Type: text/html; charset=utf-8
Location: https://www.instagram.com/accounts/login/
Vary: Accept-Language, Cookie
Content-Language: ru
Date: Thu, 24 Oct 2019 08:36:14 GMT
Strict-Transport-Security: max-age=31536000
Cache-Control: private, no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: Sat, 01 Jan 2000 00:00:00 GMT
X-Frame-Options: SAMEORIGIN
content-security-policy: report-uri https://www.instagram.com/security/csp_report/; default-src 'self' https://www.instagram.com; img-src https: data: blob:; font-src https: data:; media-src 'self' blob: https://www.instagram.com https://*.cdninstagram.com https://*.fbcdn.net; manifest-src 'self' https://www.instagram.com; script-src 'self' https://instagram.com https://www.instagram.com https://*.www.instagram.com https://*.cdninstagram.com wss://www.instagram.com https://*.facebook.com https://*.fbcdn.net https://*.facebook.net 'unsafe-inline' 'unsafe-eval' blob:; style-src 'self' https://*.www.instagram.com https://www.instagram.com 'unsafe-inline'; connect-src 'self' https://instagram.com https://www.instagram.com https://*.www.instagram.com https://graph.instagram.com https://*.graph.instagram.com https://*.cdninstagram.com https://api.instagram.com wss://www.instagram.com wss://edge-chat.instagram.com https://*.facebook.com https://*.fbcdn.net https://*.facebook.net chrome-extension://boadgeojelhgndaghljhdicfkmllpafd blob:; worker-src 'self' blob: https://www.instagram.com; frame-src 'self' https://instagram.com https://www.instagram.com https://staticxx.facebook.com https://www.facebook.com https://web.facebook.com https://connect.facebook.net https://m.facebook.com; object-src 'none'; upgrade-insecure-requests
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
x-aed: 11
Access-Control-Expose-Headers: X-IG-Set-WWW-Claim
Set-Cookie: csrftoken=M16eDI8m7VNnGPFGjxXwS7bnrajiCpMw; Domain=.instagram.com; expires=Thu, 22-Oct-2020 08:36:14 GMT; Max-Age=31449600; Path=/; Secure
Set-Cookie: rur=FTW; Domain=.instagram.com; HttpOnly; Path=/; Secure
Set-Cookie: mid=XbFifgAEAAF0VBO0hZSUdB6NI6TI; Domain=.instagram.com; expires=Sun, 21-Oct-2029 08:36:14 GMT; Max-Age=315360000; Path=/; Secure
X-FB-TRIP-ID: 1679558926
Connection: keep-alive
Content-Length: 0
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=utf-8
Date: Thu, 24 Oct 2019 08:36:14 GMT
Connection: close
Content-Length: 105
Так же пробовал к ссылке добавлять '?__a=1', чтобы получилось https://www.instagram.com/buzova86/?__a=1 Вот если перейти по этой ссылке это прям то что нужно, но пытаясь сделать все тоже самое с такой ссылкой, все равно ответ примерно тот же самый.
Как ни странно, у меня следующий примитивный код выдает искомое число.
$url = "https://www.instagram.com/buzova86/?__a=1";
$response = file_get_contents($url);
if($response){
$data = json_decode($response, true);
$followers = $data['graphql']['user']['edge_followed_by']['count'];
print_r($followers);
}
может не стоит миллиард заголовков в запрос отправлять?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Лайки выполняются на странице с определенным idНо на общей странице блоки лайков не работают
Пытаюсь скриптом достать данные из MySqlТам лежат кириллические строки
Подскажите пож-ста, почему модификатор final меняет результат сравнения?
Выдает: ClassNotFoundException, если запускать через cmdexe, хотя если через Eclipse все норм