Warnung 31.12.2023 – Version 7.0.0 wird die Unterstützung für PHP < 8.2 einstellen
Warnung 09.11.2022 – Instagram hat seinen DOM WIEDER geändert... Bitte aktualisieren Sie auf diese Version 6.16.4
Warnung 01.06.2022 – Instagram hat seinen DOM-Inhalt und das Laden seiner Profildaten geändert. Bitte aktualisieren Sie auf diese Version 6.15.0
Rufen Sie ganz einfach beliebige Instagram-Feeds und mehr ohne OAuth für PHP ab.
Wenn Ihnen dieses Paket gefällt oder Sie es verwenden, teilen Sie bitte Ihre Liebe, indem Sie dieses Repository markieren, @pgrimaud folgen oder Sponsor werden.
Diese Version kann JEDEN Instagram-Feed mithilfe von Web-Scraping abrufen.
composer require pgrimaud/instagram-user-feed
v7.0.0 – 31.12.2023:
v6.16.6 – 31.12.2023:
v6.16.5 – 24.12.2023:
$profile->getMedias()
gibt nach dem Aufruf von $api->getProfile()
immer ein leeres Array zurück. Es ist notwendig $api->getMoreMedias($profile)
aufzurufen, um die ersten 12 Medien zurückzugeben (cookieguru)v6.16 – 02.08.2022:
v6.15 – 02.06.2022:
v6.12 – 20.09.2021:
v6.11 – 13.09.2021:
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 – 14.09.2020:
v6.4 – 30.08.2020:
v6.3 -2020-07-03:
v6.2 – 01.06.2020:
v6.1 – 21.05.2020:
v6.0 – 20.05.2020
Facebook hat eine neue CORS-Richtlinie hinzugefügt und Sie können die Daten nicht direkt anzeigen.
Sie können jetzt Medien auf Ihren Speicher oder Server herunterladen, um sie direkt auf Ihrer Website bereitzustellen. Ein Beispiel finden Sie hier.
Beispiel:
<?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
Einige Leute haben möglicherweise Probleme, sich mit dieser Bibliothek anzumelden. Dies passiert bei „alten“ Instagram-Konten oder wenn Sie es auf einem Shared Hosting verwenden (nicht bei allen, ich weiß nicht warum …).
Sie können die Checkpoint-Herausforderung jetzt automatisch umgehen. (E-Mail-Bestätigung mit Code). Ein Beispiel finden Sie hier.
Tipps: Sie sollten ein Dummy-Instagram-Konto mit einem Dummy-E-Mail-Postfach erstellen, um diese Funktion nutzen zu können.
*Das Speichern der Sitzung mit dem Cache-Treiber ist hier sehr wichtig. Die Instagram-Sitzung ist gültig für... 1 JAHR . Theoretisch löst die Verwendung eines Cache-Treibers und eines Kontos also nur eine echte Anmeldung bei Instagram aus und führt dann zu einer Wiederverwendung der Sitzung über einen längeren Zeitraum.
Vielen Dank an @ibnux und @eldark für die Hilfe
In Version ^6.0 ist die Anmeldung jetzt obligatorisch , es werden Cookies (Sitzung) gespeichert, um „echte“ Anfragen an Instagram zu simulieren.
Sie verbessern ihre Bot-Erkennung und ohne echte Sitzungsdaten in den Header-Anfragen könnte Ihre IP-Adresse leicht von Instagram gesperrt werden.
Dann können Sie ohne Anmeldung nicht viele Daten abrufen.
Tipps: Sie müssen lediglich ein Dummy-Konto erstellen oder verwenden, um dieses Paket problemlos nutzen zu können.
Neu im 6.0- Cache: Diese Bibliothek implementiert PSR-6 für größtmögliche Interoperabilität.
<?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==
)
Wenn Sie Paginierung für Medien verwenden möchten, rufen Sie einfach die Methode getMoreMedias
auf.
<?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 );
Der Dank geht an diese wunderbaren Menschen (Emoji-Taste):
Pierre Grimaud | Jan Östlund | Tim Bond | Dlinny | René | ikiselev1989 | Peschwak |
David Greminger | Nana Yamane | David Kurniawan | gtapps | Chun-Sheng, Li | schelmo | Mojtaba |
Georgy Gusev | Jibran Ijaz | Julien Cousin-Alliot | n-richaud | Dmitri Afonin | Andrei Firoiu | Fiki Pratama |
Carl | Peter Kampjes | Bob Brown | nagajoomlapro | Cleven | BMRG14 | Sinan Portakal |
deepvision7 | Yusuf Özdemir | Kadir Melih Can |
Dieses Projekt folgt der All-Contributors-Spezifikation. Beiträge jeglicher Art willkommen!
Du hast einen Fehler gefunden? Sie benötigen eine neue Funktion? Sie können bei Bedarf ein Problem erstellen oder mich auf Twitter kontaktieren.
Lizenziert unter den Bedingungen der MIT-Lizenz.