dilame / instagram-private-api

NodeJS Instagram private API SDK. Written in TypeScript.
MIT License
5.93k stars 1.14k forks source link

ig.feed.accountFollowers does not yield correct followers list when requesting on another accounnt #1330

Open khalilacheche opened 3 years ago

khalilacheche commented 3 years ago

Bug Report

Form

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

Requirements

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())
jesusvallez commented 3 years ago

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)
  }
})()
Nerixyz commented 3 years ago

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.

jesusvallez commented 3 years ago

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')
kadupenido commented 3 years ago

I have the same problem.

Apparently the next_max_id property is not returned by the '/api/v1/friendships/${this.id}/followers/' endpoint.

Any suggestion?

DrRek commented 2 years ago

Does the official application deals with this bug repeating the requests a few times?

pepinogttv commented 2 years ago

i have the same problem. Any solution?

miitchpls commented 2 years ago

Same problem :/

albertosierramolleda commented 1 year ago

Same problem here too