Instagram-private-api: ig.feed.accountFollowers does not yield correct followers list when requesting on another accounnt

Created on 4 Dec 2020  路  3Comments  路  Source: dilame/instagram-private-api

Bug Report

Form

Put an [x] if you meet the condition, else leave [ ].

Requirements

  • [x] I've searched the Issues
  • [x] I've read the basic concepts
  • [x] I'm using the latest version
  • [ ] I've debugged my code using the DEBUG variable.

    Platform

  • [x] I'm using Node.js version 10.13.0

  • [ ] I'm using electron
  • [ ] I'm using the browser YOUR_BROWSER_AND_VERSION
  • [ ] I'm using some other environment YOUR_ENV

Description

YOUR DESCRIPTION HERE
Hello, it seems that I'm having an issue while trying to get the full followers list of an account, from a different account.
I used the items() function to retrieve the data in a while loop that checks if there's more availbale data.
When I check the resulting followers list, I get the correct number of followers (length of the items array), however, when I inspect the list elements, I get different results from call to call (whilst being sure there are no updates on the real followers list on instagram), with duplicate usernames in the list.
However, this issue doesn't appear when I user this same method to check the followers list of the same account.
I tried setting the maxId manually, as I thought there might be an issue with pagination, but it doesn't seem to solve the problem.
I don't know if this is a bug, or if I'm not using something the right way, so if you could help me, that would be awesome :) !

Code

Add a meaningful section of your code here. If you are using TypeScript replace js with typescript.

  const ig = new IgApiClient();
  ig.state.generateDevice(*username*);
  //ig.state.proxyUrl = process.env.IG_PROXY;
  const auth = await ig.account.login(*username*, *password*);
  const followersFeed = ig.feed.accountFollowers(*different account pk*);
  var items = []
  do{
    const a  = await followersFeed.items();
    items = items.concat(a)
  }while(followersFeed.isMoreAvailable())
bug unconfirmed

All 3 comments

Same problem here!

My code:

import { AccountFollowersFeedResponseUsersItem, IgApiClient } from 'instagram-private-api'

async function getFollowers(ig: IgApiClient, id: number) {
  let followers = ig.feed.accountFollowers(id)
  let result: AccountFollowersFeedResponseUsersItem[] = []
  let currentPage: AccountFollowersFeedResponseUsersItem[] = []

  do {
    currentPage = await followers.items()
    result = [...result, ...currentPage]
  } while (followers.isMoreAvailable())

  return result
}

;(async () => {
  const ig = new IgApiClient()
  const auth = await login(ig, IG_USERNAME, IG_PASSWORD)

  if (auth) {
    const userToStalk = 'xxxx'
    const id = await ig.user.getIdByUsername(userToStalk)
    const followersResults = await getFollowers(ig, id)
  }
})()

I don't know if this is a bug

It may be a bug, but probably not with this library. Kepp in mind, it _just_ returns the data Instagram returns. It's probably hard to count in the app, but when looking through the requests of the app, try counting the items. You'll probably find the same issue. So this library can't do much about this.

It may be a bug, but probably not with this library. Kepp in mind, it _just_ returns the data Instagram returns. It's probably hard to count in the app, but when looking through the requests of the app, try counting the items. You'll probably find the same issue. So this library can't do much about this.

The number of followers is correct but when I list users... some are duplicated

EDIT:
@khalilacheche, dirty workaround:

  let iterator = 1
  const times = 3
  let followersResultsLength = 0
  let followersResults: string[] = []

  do {
    const rawData = await getFollowers(ig, idToStalk)
    const rawDataName = rawData.map((user) => user.username).sort()
    followersResultsLength = rawData.length
    followersResults = [...followersResults, ...rawDataName]
    iterator++
  } while (iterator <= times)

  followersResults = followersResults.filter((e, i, a) => a.indexOf(e) === i)
  followersResultsLength === followersResults.length ? console.log('DONE') : console.log('FAIL')
Was this page helpful?
0 / 5 - 0 ratings

Related issues

theonlygusti picture theonlygusti  路  11Comments

iMrDJAi picture iMrDJAi  路  34Comments

zalkanorr picture zalkanorr  路  12Comments

MMrR0b0TT picture MMrR0b0TT  路  18Comments

ciolt picture ciolt  路  35Comments