All Projects → pgrimaud → Instagram User Feed

pgrimaud / Instagram User Feed

Licence: mit
This is a scrapper to easily fetch any feed and interact with Instagram (like, follow, etc.) without OAuth for PHP.

Projects that are alternatives of or similar to Instagram User Feed

Instagram Php Scraper
Get account information, photos, videos, stories and comments.
Stars: ✭ 2,490 (+472.41%)
Mutual labels:  instagram-api, instagram, instagram-scraper, instagram-client
Instagram Scraper
Scrapes an instagram user's photos and videos
Stars: ✭ 5,664 (+1202.07%)
Mutual labels:  instagram-api, instagram, instagram-scraper, instagram-client
Igql
Unofficial Instagram GraphQL API to collet data without authentication
Stars: ✭ 80 (-81.61%)
Mutual labels:  instagram-api, instagram, instagram-scraper, instagram-client
InstagramCpp
Instagram REST API client wirtten in C++
Stars: ✭ 24 (-94.48%)
Mutual labels:  instagram-client, instagram, instagram-api
Instagram-Scraper-2021
Scrape Instagram content and stories anonymously, using a new technique based on the har file (No Token + No public API).
Stars: ✭ 57 (-86.9%)
Mutual labels:  instagram, instagram-scraper, instagram-api
Instagrapi
Fast and effective Instagram Private API wrapper
Stars: ✭ 157 (-63.91%)
Mutual labels:  instagram-api, instagram, instagram-client
Instagram api gem
A Ruby wrapper for the Instagram API
Stars: ✭ 100 (-77.01%)
Mutual labels:  instagram-api, instagram, instagram-client
Instasharper
Private Instagram API
Stars: ✭ 426 (-2.07%)
Mutual labels:  instagram-api, instagram, instagram-scraper
Instabotai
Instagram AI bot with face detection. It works without instagram api, need only login and password.
Stars: ✭ 181 (-58.39%)
Mutual labels:  instagram-api, instagram, instagram-scraper
Instagram Proxy Api
CORS compliant API to access Instagram's public data
Stars: ✭ 245 (-43.68%)
Mutual labels:  instagram-api, instagram, instagram-scraper
insta
Instagram power tool
Stars: ✭ 56 (-87.13%)
Mutual labels:  instagram-client, instagram, instagram-scraper
Socialmanagertools Docs
📚 Documentation of Social Manager Tools
Stars: ✭ 151 (-65.29%)
Mutual labels:  instagram-api, instagram, instagram-scraper
Onegram
This repository is no longer maintained.
Stars: ✭ 137 (-68.51%)
Mutual labels:  instagram-api, instagram, instagram-client
Instamancer
Scrape Instagram's API with Puppeteer
Stars: ✭ 273 (-37.24%)
Mutual labels:  instagram-api, instagram, instagram-scraper
Inwidget
inWidget - free Instagram widget for your website. Allows you to show photos from an Instagram account, by hashtags and more.
Stars: ✭ 132 (-69.66%)
Mutual labels:  instagram-api, instagram, instagram-scraper
Instagram-Auto-Pilot
Automate common Instagram activities such as following, unfollowing, commenting and reposting images from instagram accounts.
Stars: ✭ 50 (-88.51%)
Mutual labels:  instagram-client, instagram-scraper, instagram-api
nanogram.js
📷 An easy-to-use and simple Instagram package that allows you to fetch media content without API and access token.
Stars: ✭ 62 (-85.75%)
Mutual labels:  instagram, instagram-scraper, instagram-api
Instauto
Simple to use wrapper around the private Instagram API, written in Python.
Stars: ✭ 52 (-88.05%)
Mutual labels:  instagram-api, instagram, instagram-scraper
Instagramlive Php
A PHP script that allows for you to go live on Instagram with any streaming program that supports RTMP!
Stars: ✭ 362 (-16.78%)
Mutual labels:  instagram-api, instagram, instagram-client
instagram
Php instagram library. With this library, you can use many of the same features in the mobile application.
Stars: ✭ 45 (-89.66%)
Mutual labels:  instagram-client, instagram-scraper, instagram-api

Instagram user feed PHP

Build Status Packagist Coverage Status

Minimum PHP Version Last version Total Downloads Monthly Downloads

All Contributors

Information

Easily fetch any Instagram feed and more without OAuth for PHP.

If you like or use this package, please share your love by starring this repository, follow @pgrimaud or become a sponsor. 🙏💓

Features

  • Fetch profile data of user
  • Fetch medias of user
  • Fetch stories of user
  • Fetch highlights stories of user
  • Fetch detailed post of user
  • Fetch feed of followers
  • Fetch feed of followings
  • NEW : Follow or unfollow users
  • NEW : Like or unlike posts
  • NEW : Get posts of hashtag
  • NEW : Get comments of a post

This version can retrieve ANY Instagram feed using web scrapping.

⚠️ Version ^5.0 is no more maintained. ⚠️

Installation

composer require pgrimaud/instagram-user-feed

Changelog

v6.7 - 2021-01-31:

  • New feature: get post of hashtag.
  • New feature: get comments of post.
  • Add support for PHP 8.
  • Minor changes and improvements.

v6.6 - 2020-10-06:

  • New feature: like and unlike posts.
  • Retrieval #hashtags and @mentions from stories.
  • Minor changes and improvements.

v6.5 - 2020-09-14:

  • New feature: follow and unfollow users. Thanks to @David-Kurniawan)
  • Minor fixes.

v6.4 - 2020-08-30:

  • New feature: fetch followers and followings feeds. Thanks to @David-Kurniawan)
  • Minor improvements.

v6.3 -2020-07-03:

  • Add checkpoint challenge bypass using IMAP configuration.

v6.2 - 2020-06-01:

  • Improve medias crawling && cache constraints.

v6.1 - 2020-05-21:

  • New feature: Fetch stories and highlights stories.

v6.0 - 2020-05-20

  • Please upgrade from ^5.0 for cookies session stability.

Version ^6.3: Checkpoint challenge bypass

Some people may have trouble to login with this library. It happens for "old" Instagram accounts or if you're using it on some shared hosting (not all, I don't know why...).

You can now automatically bypass the checkpoint challenge. (email verification with code). You can find an example here.

Tips: you should create a dummy instagram account using a dummy e-mailbox to use this feature.

How it works?

  1. The lib will try to login
  2. Got 400 error "checkpoint_required"
  3. Trigger email verification
  4. Connect to your email inbox using IMAP credentials
  5. Wait for Instagram verification email
  6. Parse verification code from email
  7. Make a request to instagram with this code to complete verification
  8. Verification is done, then save session automatically*

*Saving session with cache driver is very important here. The Instagram session is valid for... 1 YEAR. So in theory, using a cache driver and one account will trigger only one real login to Instagram then reusing session for a long time.

Thanks to @ibnux and @eldark for help 🎉

Version ^6.0: Login

In version ^6.0, login is now mandatory, it will save cookies (session) to simulate "real" requests to Instagram.

They improve their bot detection and without real session data in the headers requests, your IP could be easily soft-ban by Instagram.

Then, you can't fetch a lot of data without login.

Tips: you just have to create or use a dummy account to use easily this package.

Usage

New in 6.0 Cache : This library implements PSR-6 for greatest interoperability.

<?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

Basic usage :

<?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\Model\InstagramMedia 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 forSusan and I are producing a @Netflix original series, Sweet Tooth, based on the comic by @Jefflemire. Cant 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:Instagram\Model\InstagramProfile:private] => QVFEblBGclVyOEtCMmRLZkVxUUdVbmhsYXNMZmMmplNWtZRkJnRnZOSUdMM1BDRmt3ZA==
)

Paginate

If you want to use paginate on medias, just call getMoreMedias method.

<?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());

Stories

<?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);

Contributors

Thanks goes to these wonderful people (emoji key):


Pierre Grimaud

💻

Jan Östlund

💻

Tim Bond

💻

Dlinny

🐛

René

🐛

ikiselev1989

🐛

Pezhvak

💻

David Greminger

💻

Nana YAMANE

💻

David Kurniawan

💻

gtapps

💻

Chun-Sheng, Li

⚠️

schelmo

💻

Mojtaba

💻

Georgy Gusev

💻

Jibran Ijaz

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

Feedback

You found a bug? You need a new feature? You can create an issue if needed or contact me on Twitter.

License

Licensed under the terms of the MIT License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].