Получение базовой информации из Instagram с помощью PHP

$url = 'https://api.instagram.com/v1/users/XXXX?access_token=XXXX';
echo json_decode(file_get_contents($url))->{'followed_by'};

Я использую этот код, и я не понимаю, в чем проблема. Я новичок в PHP, так что извините за ошибку новичка. Я пытаюсь заставить "followed_by" отображаться отдельно. Мне удалось заставить «лайки» Facebook и подписчиков Twitter отображаться таким образом.


person Nazar Abubaker    schedule 19.01.2013    source источник
comment
Извините, эта страница недоступна.   -  person Mitch    schedule 21.01.2021


Ответы (5)


Если вам нужно получить количество подписчиков (или другие поля) без входа в систему, Instagram достаточно хорош, чтобы поместить их в JSON внутри исходного кода страницы:

$raw = file_get_contents('https://www.instagram.com/USERNAME'); //replace with user
preg_match('/\"edge_followed_by\"\:\s?\{\"count\"\:\s?([0-9]+)/',$raw,$m);
print intval($m[1]);

//returns "123"

Надеюсь, это поможет.

24 мая 2016 г. Обновлено для более терпимого использования пробелов в JSON.

19 апреля 2018 г. Обновлено для использования нового префикса "edge_".

person Ben    schedule 11.02.2016
comment
После часов попыток реализовать это с помощью Instagram API я остановился на этом решении. Спасибо. Худший дизайн API и документация, которые я никогда не видел. Вам даже нужно отправить скринкаст, объясняющий, что вы хотите сделать с API, чтобы выйти из режима песочницы. Я просто хочу получить количество подписчиков для любого пользователя, что в любом случае является общедоступной информацией. Это безумие. - person Marc; 03.07.2017
comment
Отличное решение! В настоящее время я использую его как запасной вариант, когда срок действия токена истекает или API сдается: p - person jo.On; 21.11.2017
comment
@Ben Это решение отлично работало для меня до нескольких недель назад, я предполагаю, что Instagram мог что-то изменить на странице? Не могли бы вы проверить и обновить решение? Теперь я получаю ошибку Undefined Offset (для $m[1]). Спасибо! - person user6122500; 18.04.2018
comment
@user6122500 user6122500 Спасибо за предупреждение. Похоже, они добавили префикс к имени переменной, поэтому я обновил приведенный выше пример кода. Рад, что был полезен! - person Ben; 19.04.2018
comment
как насчет количества подписчиков любого профиля? сколько людей они следуют. - person Muneeb Zulfiqar; 30.11.2018
comment
@MuneebZulfiqar должен иметь возможность заменить edge_followed_by на edge_follow. - person Ben; 30.11.2018
comment
В итоге у меня перестало работать. Если у кого-то есть обходной путь, пожалуйста, дайте мне знать. - person Mash R.; 30.08.2019
comment
@МашР. Только что провел тест, и он все еще работает для меня, и IG также не изменили свой вывод. Возможно, есть проблема с получением страницы? - person Ben; 31.08.2019
comment
@Бен, спасибо за быстрый ответ. Он работает на одном веб-сайте, но не работает на двух других хостах, где я тестирую. Я проверил вывод, Instagram перенаправляет на страницу входа и возвращает содержимое страницы входа. - person Mash R.; 31.08.2019
comment
@МашР. Просто теория, но, возможно, эти два нерабочих IP-адреса хоста были ограничены по скорости? Я уверен, что IG настроен агрессивно по этому поводу. - person Ben; 02.09.2019
comment
Это решение не работает на стороне сервера. Кто-нибудь знает, как получить его через сервер (через API?)? - person Mitch; 21.01.2021

Согласно документам API Instagram, followed_by является дочерним элементом counts, который является дочерним элементом data.

https://api.instagram.com/v1/users/1574083/?access_token=ACCESS-TOKEN

Возвращает:

{
"data": {
    "id": "1574083",
    "username": "snoopdogg",
    "full_name": "Snoop Dogg",
    "profile_picture": "http://distillery.s3.amazonaws.com/profiles/profile_1574083_75sq_1295469061.jpg",
    "bio": "This is my bio",
    "website": "http://snoopdogg.com",
    "counts": {
        "media": 1320,
        "follows": 420,
        "followed_by": 3410
    }
}

Поэтому следующее должно работать.

<?php 
$url = 'https://api.instagram.com/v1/users/XXXX?access_token=XXXX';
$api_response = file_get_contents($url);
$record = json_decode($api_response);
echo $record->data->counts->followed_by;

// if nothing is echoed try
echo '<pre>' . print_r($api_response, true) . '</pre>';
echo '<pre>' . print_r($record, true) . '</pre>';
// to see what is in the $api_response and $record object
person PassKit    schedule 19.01.2013
comment
Я только что попробовал код, который вы дали, но он не работает (я пробовал оба эха по отдельности). Я даже убедился, что мой api.instagram.com/xxx действителен, и это так. - person Nazar Abubaker; 19.01.2013
comment
@NazarAbubaker - Вы уверены, что ваш access_token правильный - как вы его генерируете? Попробуйте отредактированный код выше и сообщите нам, что на самом деле возвращает API. - person PassKit; 19.01.2013
comment
Я использовал это для создания access_token [link]jelled.com/instagram/access-token[ /ссылка]. Взято из [ссылка]stackoverflow.com/questions/12677551/ Все, что я получаю, это предупреждение: file_get_contents() [‹a href='function.file- get-contents'›function.file-get-contents‹/a›]: Не удалось найти оболочку https — вы забыли включить ее при настройке PHP? в XXX в строке 36 - person Nazar Abubaker; 19.01.2013
comment
@NazarAbubaker - Так что же показывает $api_response? А что произойдет, если вы вручную вставите сгенерированный URL-адрес в веб-браузер? - person PassKit; 19.01.2013
comment
@NazarAbubaker - об ошибке PHP см. комментарий с 31 голосом в этом вопросе stackoverflow.com/questions/5444249/ - person PassKit; 19.01.2013
comment
Когда я вставляю URL-адрес в веб-браузер, я вижу всю информацию о своем Instagram. Глядя на ошибку, file_get_contents является причиной проблемы - person Nazar Abubaker; 19.01.2013
comment
@NazarAbubaker - по крайней мере, это хорошая новость! Похоже, ваша проблема в том, что в вашей конфигурации PHP нет библиотеки, необходимой для загрузки сайта https. Таким образом, URL-адрес правильный, но PHP не может его получить, потому что у него нет библиотеки openssl. Редактирование конфигурации PHP и перезапуск Apache должны работать. Вам также может понадобиться установить openssl, если у вас его нет. - person PassKit; 19.01.2013
comment
@ПассКит. Как мы можем получить все ответы API без использования разбиения на страницы? - person user1788736; 08.09.2013

Попробуй это..

<?php 
$instagram = "https://api.instagram.com/v1/users/xxxxx/?access_token=xxxxx";
$instagram_follows = json_decode(file_get_contents($instagram))->data->counts->followed_by;
echo $instagram_follows;
?>
person Cousin Richie    schedule 26.02.2015

function get_https_content($url=NULL,$method="GET"){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0');
    curl_setopt($ch, CURLOPT_URL,$url);
    return curl_exec($ch);
}

function ig_count($username) {
    return json_decode(get_https_content("https://api.instagram.com/v1/users/1460891826/?client_id=ea69458ef6a34f13949b99e84d79ccf2"))->data->counts->followed_by;
}

Вот мой код :)

person Wasim A.    schedule 04.08.2015

Попробуй это...

$url = 'https://api.instagram.com/v1/users/USER_ID?access_token=YOUR_TOKEN';
$api_response = file_get_contents($url);
$record = json_decode($api_response);

echo $followed_by = $record->data->counts->followed_by;

Нажмите, чтобы получить всю информацию о пользователе.

person Hardik    schedule 30.07.2015