Avertissement 31/12/2023 - La version 7.0.0 ne prendra plus en charge PHP < 8.2
Attention 09/11/2022 - Instagram a ENCORE changé son DOM... Veuillez mettre à jour vers cette version 6.16.4
Avertissement 01/06/2022 - Instagram a modifié son contenu DOM et le chargement de ses données de profil. Veuillez mettre à jour vers cette version 6.15.0
Récupérez facilement n'importe quel flux Instagram et plus encore sans OAuth pour PHP.
Si vous aimez ou utilisez ce package, partagez votre amour en mettant en vedette ce référentiel, suivez @pgrimaud ou devenez sponsor.
Cette version peut récupérer N'IMPORTE QUEL flux Instagram à l'aide du web scraping .
composer require pgrimaud/instagram-user-feed
v7.0.0 - 2023-12-31 :
v6.16.6 - 2023-12-31 :
v6.16.5 - 2023-12-24 :
$profile->getMedias()
renverra toujours un tableau vide après avoir appelé $api->getProfile()
. Il faut appeler $api->getMoreMedias($profile)
pour renvoyer les 12 premiers médias (cookieguru)v6.16 - 02/08/2022 :
v6.15 - 02/06/2022 :
v6.12 - 20/09/2021 :
v6.11 - 2021-09-13 :
v6.10 - 03/09/2021 :
v6.9 - 02/09/2021 :
v6.8 - 08/07/2021 :
v6.7 - 31/01/2021 :
v6.6 - 06/10/2020 :
v6.5 - 2020-09-14 :
v6.4 - 30/08/2020 :
v6.3 -2020-07-03 :
v6.2 - 01/06/2020 :
v6.1 - 2020-05-21 :
v6.0 - 20/05/2020
Facebook a ajouté une nouvelle politique CORS et vous ne pouvez pas afficher les données directement.
Vous pouvez désormais télécharger des médias sur votre stockage ou votre serveur pour les diffuser directement sur votre site Web. Vous pouvez trouver un exemple ici.
Exemple:
<?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
Certaines personnes peuvent avoir des difficultés à se connecter à cette bibliothèque. Cela arrive pour les "anciens" comptes Instagram ou si vous l'utilisez sur certains hébergements mutualisés (pas tous, je ne sais pas pourquoi...).
Vous pouvez désormais contourner automatiquement le défi du point de contrôle. (vérification par email avec code). Vous pouvez trouver un exemple ici.
Conseils : vous devez créer un compte Instagram factice en utilisant une boîte e-mail factice pour utiliser cette fonctionnalité.
*La sauvegarde de la session avec le pilote de cache est très importante ici. La session Instagram est valable... 1 AN . Donc, en théorie, l'utilisation d'un pilote de cache et d'un seul compte ne déclenchera qu'une seule véritable connexion à Instagram, puis une réutilisation de la session pendant une longue période.
Merci à @ibnux et @eldark pour leur aide
En version ^6.0, la connexion est désormais obligatoire , elle enregistrera des cookies (session) pour simuler de "vraies" requêtes vers Instagram.
Ils améliorent leur détection des robots et sans données de session réelles dans les requêtes d'en-tête, votre adresse IP pourrait facilement être interdite par Instagram.
Ensuite, vous ne pouvez pas récupérer beaucoup de données sans vous connecter.
Astuces : il vous suffit de créer ou d'utiliser un compte factice pour utiliser facilement ce package.
Nouveau dans le cache 6.0 : cette bibliothèque implémente PSR-6 pour une plus grande interopérabilité.
<?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==
)
Si vous souhaitez utiliser la pagination sur les médias, appelez simplement la méthode 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 );
Merci à ces personnes merveilleuses (clé emoji) :
Pierre Grimaud | Jan Östlund | Tim Bond | Dlinny | René | ikiselev1989 | Pejvak |
David Greminger | Mamie YAMANE | David Kurniawan | gtapps | Chun-Sheng, Li | schelmo | Mojtaba |
Gueorgui Goussev | Jibran Ijaz | Julien Cousin Alliot | n-richaud | Dmitri Afonine | Andreï Firoiu | Fiki Pratama |
Carl | Peter Kampjes | Bob Brun | nagajoomlapro | cleveng | BMRG14 | Portail Sinan |
vision profonde7 | Yusuf Özdemir | Kadir Melih Can |
Ce projet suit la spécification de tous les contributeurs. Les contributions de toute nature sont les bienvenues !
Vous avez trouvé un bug ? Vous avez besoin d'une nouvelle fonctionnalité ? Vous pouvez créer un problème si nécessaire ou me contacter sur Twitter.
Sous licence selon les termes de la licence MIT.