Is there a way to pull an instagram feed with PHP without logging in?

前端 未结 3 1627
迷失自我
迷失自我 2021-02-04 19:40

It seems that this solution no longer works -

How to get a user's Instagram feed

The new API requires an access token which is dynamically assigned after pas

相关标签:
3条回答
  • 2021-02-04 20:05

    Try this php library: https://github.com/postaddictme/instagram-php-scraper

    And here is example (https://github.com/postaddictme/instagram-php-scraper/blob/master/examples/getAccountMediasByUsername.php):

    <?php
    require __DIR__ . '/../vendor/autoload.php';
    // If account is public you can query Instagram without auth
    $instagram = new \InstagramScraper\Instagram();
    $medias = $instagram->getMedias('kevin', 25);
    // Let's look at $media
    $media = $medias[0];
    echo "Media info:\n";
    echo "Id: {$media->getId()}\n";
    echo "Shotrcode: {$media->getShortCode()}\n";
    echo "Created at: {$media->getCreatedTime()}\n";
    echo "Caption: {$media->getCaption()}\n";
    echo "Number of comments: {$media->getCommentsCount()}";
    echo "Number of likes: {$media->getLikesCount()}";
    echo "Get link: {$media->getLink()}";
    echo "High resolution image: {$media->getImageHighResolutionUrl()}";
    echo "Media type (video or image): {$media->getType()}";
    $account = $media->getOwner();
    echo "Account info:\n";
    echo "Id: {$account->getId()}\n";
    echo "Username: {$account->getUsername()}\n";
    echo "Full name: {$account->getFullName()}\n";
    echo "Profile pic url: {$account->getProfilePicUrl()}\n";
    // If account private you should be subscribed and after auth it will be available
    $instagram = \InstagramScraper\Instagram::withCredentials('username', 'password', 'path/to/cache/folder');
    $instagram->login();
    $medias = $instagram->getMedias('private_account', 100);
    
    0 讨论(0)
  • 2021-02-04 20:06

    We can still access the photos. But just last 12 photo. If want more photos access_token require. This my way to get photos.

    $instaResult = file_get_contents('https://www.instagram.com/'.$username.'/?__a=1');
    $insta = json_decode($instaResult);
    $instagram_photos = $insta->graphql->user->edge_owner_to_timeline_media->edges;
    

    Now we get the last photos array.

    Than i used in the view with foreach loop.

    <ul>
    @foreach($instagram_photos as $instagram_photo)
       <li>
           <img src="{{$instagram_photo->node->display_url}}">
       </li>
    @endforeach
    </ul>
    
    0 讨论(0)
  • 2021-02-04 20:13

    Yes you can. You don't need to login or access_token to get the latest 20 posts. You just need to parse the json content from https://www.instagram.com/[USERNAME]/media/. Replace the [username] with the instagram user_name.

    eg.

    $instaResult = file_get_contents('https://www.instagram.com/'.$username.'/media/');
    $insta = json_decode($instaResult);
    

    UPDATE: Instagram has changed the user media rss url. In order to get the rss feed you now have to use https://www.instagram.com/[USERNAME]/?__a=1

    UPDATE: Instead of file_get_contents, it is better to use curl or Psr\Http\Message\RequestInterface based library like http://docs.guzzlephp.org/en/stable/

    0 讨论(0)
提交回复
热议问题