Предупреждение 31 декабря 2023 г. — В версии 7.0.0 будет прекращена поддержка PHP < 8.2.
Предупреждение 9 ноября 2022 г. — Instagram СНОВА изменил свой DOM... Пожалуйста, обновите его до версии 6.16.4.
Предупреждение 1 июня 2022 г. — Instagram изменил содержимое DOM и загрузку данных профиля. Пожалуйста, обновитесь до этой версии 6.15.0.
Легко получайте любой канал Instagram и многое другое без OAuth для PHP.
Если вам нравится этот пакет или вы используете его, поделитесь своей любовью, отметив этот репозиторий звездочкой, подпишитесь на @pgrimaud или станьте спонсором.
Эта версия может получить ЛЮБОЙ канал Instagram с помощью веб-скрапинга .
composer require pgrimaud/instagram-user-feed
v7.0.0 - 31 декабря 2023 г.:
v6.16.6 - 31 декабря 2023 г.:
v6.16.5 - 24.12.2023:
$profile->getMedias()
всегда будет возвращать пустой массив после вызова $api->getProfile()
. Необходимо вызвать $api->getMoreMedias($profile)
чтобы вернуть первые 12 медиафайлов (cookieguru)v6.16 - 02.08.2022:
v6.15 - 02.06.2022:
v6.12 - 20 сентября 2021 г.:
v6.11 - 13 сентября 2021 г.:
v6.10 - 03.09.2021:
v6.9 - 02.09.2021:
v6.8 - 08.07.2021:
v6.7 - 31 января 2021 г.:
v6.6 - 06.10.2020:
v6.5 - 14.09.2020:
v6.4 - 30.08.2020:
v6.3 -03.07.2020:
v6.2 - 01.06.2020:
v6.1 - 21 мая 2020 г.:
v6.0 - 20 мая 2020 г.
Facebook добавил новую политику CORS, и вы не можете отображать данные напрямую.
Теперь вы можете загружать медиафайлы в свое хранилище или на сервер и размещать их прямо на своем веб-сайте. Вы можете найти пример здесь.
Пример:
<?php
// include vendor & classes
// random picture from instagram
$ url = ' https://scontent-cdt1-1.cdninstagram.com/v/t51.2885-19/s150x150/156309873_1632221153646196_1273891214497323498_n.jpg?tp=1&_nc_ht=scontent-cdt1-1.cdninstagram.com&_nc_ohc=vbxGNZrjPmUAX8CIDdC&edm=ABfd0MgBAAAA&ccb=7-4&oh=ae5811c07f0e73b945eb203cd58c2101&oe=60EDD1EE&_nc_sid=7bff83 '
// define directory
$ downloadDir = __DIR__ . ' /../assets ' ; // change it
$ fileName = MediaDownloadHelper:: downloadMedia ( $ url , $ downloadDir );
// file was downloaded here : __DIR__ . '/../assets/v-t51.2885-19-s150x150-156309873_1632221153646196_1273891214497323498_n.jpg
У некоторых людей могут возникнуть проблемы со входом в эту библиотеку. Это происходит для «старых» аккаунтов Instagram или если вы используете его на каком-нибудь виртуальном хостинге (не на всех, не знаю почему...).
Теперь вы можете автоматически обойти испытание на контрольно-пропускном пункте. (подтверждение электронной почты с кодом). Вы можете найти пример здесь.
Совет: чтобы использовать эту функцию, вам следует создать фиктивную учетную запись Instagram, используя фиктивный электронный почтовый ящик.
*Сохранение сеанса с помощью драйвера кэша здесь очень важно. Сессия в Инстаграм действительна... 1 ГОД . Таким образом, теоретически использование драйвера кэша и одной учетной записи вызовет только один реальный вход в Instagram, а затем повторное использование сеанса в течение длительного времени.
Спасибо @ibnux и @eldark за помощь.
В версии ^6.0 вход в систему теперь обязателен , он будет сохранять файлы cookie (сессию) для имитации «реальных» запросов к Instagram.
Они улучшают обнаружение ботов, и без реальных данных сеанса в запросах заголовков ваш IP-адрес может быть легко заблокирован Instagram.
Тогда вы не сможете получить много данных без входа в систему.
Советы: вам просто нужно создать или использовать фиктивную учетную запись, чтобы легко использовать этот пакет.
Новое в кэше версии 6.0 : эта библиотека реализует PSR-6 для обеспечения максимальной совместимости.
<?php
use Instagram Api ;
use Symfony Component Cache Adapter FilesystemAdapter ;
$ cachePool = new FilesystemAdapter ( ' Instagram ' , 0 , __DIR__ . ' /../cache ' );
$ api = new Api ( $ cachePool );
$ api -> login ( ' username ' , ' password ' ); // mandatory
$ profile = $ api -> getProfile ( ' robertdowneyjr ' );
echo $ profile -> getUserName (); // robertdowneyjr
echo $ profile -> getFullName (); // Robert Downey Jr. Official
<?php
$ api = new Api ( $ cachePool );
$ api -> login ( ' username ' , ' password ' );
$ profile = $ api -> getProfile ( ' robertdowneyjr ' );
print_r ( $ profile );
Instagram Hydrator Component Feed Object
(
[id] => 1518284433
[userName] => robertdowneyjr
[fullName] => Robert Downey Jr. Official
[biography] => @ officialfootprintcoalition @coreresponse
[followers] => 46382057
[following] => 50
[profilePicture] => https: //scontent-cdt1-1.cdninstagram.com/v/t51.2885-19/s320x320/72702032_542075739927421_3928117925747097600_n.jpg?_nc_ht=scontent-cdt1-1.cdninstagram.com&_nc_ohc=h2zGWoshNjUAX9ze3jb&oh=cf6441cfc3f258da3bf4cfef29686c7d&oe=5EEEC338
[externalUrl] => http: //coreresponse.org/covid19
[private] =>
[verified] => 1
[mediaCount] => 453
(
[ 0 ] => Instagram ModelInstagramMedia Object
(
[id] => 2307655221969878423
[typeName] => GraphImage
[height] => 1350
[width] => 1080
[thumbnailSrc] => https: //scontent-cdt1-1.cdninstagram.com/v/t51.2885-15/sh0.08/e35/c0.180.1440.1440a/s640x640/96225997_178111910111734_5886065436455432375_n.jpg?_nc_ht=scontent-cdt1-1.cdninstagram.com&_nc_cat=1&_nc_ohc=GqcYpSEbz8gAX_GF1Ep&oh=1b293215142d407faca46a2fd28eab71&oe=5EF0EBDF
[link] => https: //www.instagram.com/p/CAGcDKplv2X/
[date] => DateTime Object
(
[date] => 2020 - 05 - 12 22 : 06 : 01.000000
[timezone_type] => 3
[timezone] => Europe/Paris
)
[displaySrc] => https: //scontent-cdt1-1.cdninstagram.com/v/t51.2885-15/e35/p1080x1080/96225997_178111910111734_5886065436455432375_n.jpg?_nc_ht=scontent-cdt1-1.cdninstagram.com&_nc_cat=1&_nc_ohc=GqcYpSEbz8gAX_GF1Ep&oh=6c19ddef96fdc07d7926b05e36cb2bed&oe=5EEED2CE
[caption] => The sweetest things are worth waiting for…Susan and I are producing a @Netflix original series, Sweet Tooth, based on the comic by @Jefflemire. Can’t wait to share it with you all. @NXonNetflix @warnerbrostv #SweetTooth
[comments] => 3308
[likes] => 687988
[thumbnails] => Array
(
[ 0 ] => stdClass Object
(
[src] => https: //scontent-cdt1-1.cdninstagram.com/v/t51.2885-15/e35/c0.180.1440.1440a/s150x150/96225997_178111910111734_5886065436455432375_n.jpg?_nc_ht=scontent-cdt1-1.cdninstagram.com&_nc_cat=1&_nc_ohc=GqcYpSEbz8gAX_GF1Ep&oh=24b300201afc0e0c82166c6288e0ed5b&oe=5EF00196
[config_width] => 150
[config_height] => 150
)
[ 1 ] => stdClass Object
(
[src] => https: //scontent-cdt1-1.cdninstagram.com/v/t51.2885-15/e35/c0.180.1440.1440a/s240x240/96225997_178111910111734_5886065436455432375_n.jpg?_nc_ht=scontent-cdt1-1.cdninstagram.com&_nc_cat=1&_nc_ohc=GqcYpSEbz8gAX_GF1Ep&oh=203d0a3d01d77a2978739c96eb67e607&oe=5EEF6DE0
[config_width] => 240
[config_height] => 240
)
[ 2 ] => stdClass Object
(
[src] => https: //scontent-cdt1-1.cdninstagram.com/v/t51.2885-15/e35/c0.180.1440.1440a/s320x320/96225997_178111910111734_5886065436455432375_n.jpg?_nc_ht=scontent-cdt1-1.cdninstagram.com&_nc_cat=1&_nc_ohc=GqcYpSEbz8gAX_GF1Ep&oh=7b9cee64460e1c9c501e59621e6ccfb2&oe=5EF18BE6
[config_width] => 320
[config_height] => 320
)
[ 3 ] => stdClass Object
(
[src] => https: //scontent-cdt1-1.cdninstagram.com/v/t51.2885-15/e35/c0.180.1440.1440a/s480x480/96225997_178111910111734_5886065436455432375_n.jpg?_nc_ht=scontent-cdt1-1.cdninstagram.com&_nc_cat=1&_nc_ohc=GqcYpSEbz8gAX_GF1Ep&oh=f3d8c31eca2d3c3ab6653b3ed3ebe4f4&oe=5EEFEAC0
[config_width] => 480
[config_height] => 480
)
[ 4 ] => stdClass Object
(
[src] => https: //scontent-cdt1-1.cdninstagram.com/v/t51.2885-15/sh0.08/e35/c0.180.1440.1440a/s640x640/96225997_178111910111734_5886065436455432375_n.jpg?_nc_ht=scontent-cdt1-1.cdninstagram.com&_nc_cat=1&_nc_ohc=GqcYpSEbz8gAX_GF1Ep&oh=1b293215142d407faca46a2fd28eab71&oe=5EF0EBDF
[config_width] => 640
[config_height] => 640
)
)
[location] =>
[video] =>
[videoViewCount] => 0
)
...
[endCursor:InstagramModelInstagramProfile:private] => QVFEblBGclVyOEtCMmRLZkVxUUdVbmhsYXNMZmMmplNWtZRkJnRnZOSUdMM1BDRmt3ZA==
)
Если вы хотите использовать разбивку на страницы для мультимедиа, просто вызовите метод getMoreMedias
.
<?php
$ api = new Api ( $ cachePool );
$ api -> login ( $ credentials -> getLogin (), $ credentials -> getPassword ());
$ profile = $ api -> getProfile ( ' twhiddleston ' );
print_r ( $ profile -> getMedias ()); // 12 first medias
do {
$ profile = $ api -> getMoreMedias ( $ profile );
print_r ( $ profile -> getMedias ()); // 12 more medias
// avoid 429 Rate limit from Instagram
sleep ( 1 );
} while ( $ profile -> hasMoreMedias ());
<?php
use Instagram Api ;
use Symfony Component Cache Adapter FilesystemAdapter ;
$ cachePool = new FilesystemAdapter ( ' Instagram ' , 0 , __DIR__ . ' /../cache ' );
$ api = new Api ( $ cachePool );
$ api -> login ( ' username ' , ' password ' ); // mandatory
$ profile = $ api -> getProfile ( ' starwars ' ); // we need instagram username
sleep ( 1 );
$ feedStories = $ api -> getStories ( $ profile -> getId ());
$ stories = $ feedStories -> getStories ();
print_r ( $ stories );
Спасибо этим замечательным людям (ключ смайлика):
Пьер Гримо | Ян Эстлунд | Тим Бонд | Длинный | Рене | ikiselev1989 | Пежвак |
Дэвид Гремингер | Нана ЯМАНЕ | Дэвид Курниаван | gtapps | Чун-Шэн, Ли | Шельмо | Моджтаба |
Георгий Гусев | Джибран Иджаз | Жюльен Кузен-Аллио | н-ришо | Дмитрий Афонин | Андрей Фирою | Фики Пратама |
Карл | Питер Кампьес | Боб Браун | Нагаджумлапро | клевенг | БМРГ14 | Синан Портакал |
дипвидение7 | Юсуф Оздемир | Кадир Мелих Джан |
Этот проект соответствует спецификации всех участников. Любой вклад приветствуется!
Вы нашли ошибку? Вам нужна новая функция? При необходимости вы можете создать проблему или связаться со мной в Твиттере.
Лицензировано в соответствии с условиями лицензии MIT.