Skip to content

Commit

Permalink
Merge pull request #744 from congkv/feature/add_function_to_scrap_all…
Browse files Browse the repository at this point in the history
…_followers

Add functions to scrap all followers, following
  • Loading branch information
raiym authored Aug 18, 2020
2 parents 33db5ca + a71a115 commit 23f4cff
Showing 1 changed file with 94 additions and 0 deletions.
94 changes: 94 additions & 0 deletions src/InstagramScraper/Instagram.php
Original file line number Diff line number Diff line change
Expand Up @@ -1370,6 +1370,53 @@ public function getPaginateFollowers($accountId, $count = 20, $pageSize = 20, $d
return $toReturn;
}

/**
* @param $accountId
* @param int $pageSize
* @param string $nextPage
*
* @return array
* @throws InstagramException
* @throws InstagramNotFoundException
*/
public function getPaginateAllFollowers($accountId, $pageSize = 20, $nextPage = '')
{
$response = Request::get(Endpoints::getFollowersJsonLink($accountId, $pageSize, $nextPage),
$this->generateHeaders($this->userSession));
if ($response->code === static::HTTP_NOT_FOUND) {
throw new InstagramNotFoundException('Account with this id doesn\'t exist');
}
if ($response->code !== static::HTTP_OK) {
throw new InstagramException('Response code is ' . $response->code . '. Body: ' . static::getErrorBody($response->body) . ' Something went wrong. Please report issue.', $response->code);
}

$jsonResponse = $this->decodeRawBodyToJson($response->raw_body);

$count = $jsonResponse['data']['user']['edge_followed_by']['count'];
if ($count === 0) {
return [];
}

$edgesArray = $jsonResponse['data']['user']['edge_followed_by']['edges'];
if (count($edgesArray) === 0) {
throw new InstagramException('Failed to get followers of account id ' . $accountId . '. The account is private.', static::HTTP_FORBIDDEN);
}

$accounts = [];
foreach ($edgesArray as $edge) {
$accounts[] = $edge['node'];
}

$pageInfo = $jsonResponse['data']['user']['edge_followed_by']['page_info'];

return [
'count' => $count,
'hasNextPage' => $pageInfo['has_next_page'],
'nextPage' => $pageInfo['end_cursor'],
'accounts' => $accounts
];
}

/**
* @param string $accountId Account id of the profile to query
* @param int $count Total followed accounts to retrieve
Expand Down Expand Up @@ -1468,6 +1515,53 @@ public function getPaginateFollowing($accountId, $count = 20, $pageSize = 20, $d
return $toReturn;
}

/**
* @param $accountId
* @param int $pageSize
* @param string $nextPage
*
* @return array
* @throws InstagramException
* @throws InstagramNotFoundException
*/
public function getPaginateAllFollowing($accountId, $pageSize = 20, $nextPage = '')
{
$response = Request::get(Endpoints::getFollowingJsonLink($accountId, $pageSize, $nextPage),
$this->generateHeaders($this->userSession));
if ($response->code === static::HTTP_NOT_FOUND) {
throw new InstagramNotFoundException('Account with this id doesn\'t exist');
}
if ($response->code !== static::HTTP_OK) {
throw new InstagramException('Response code is ' . $response->code . '. Body: ' . static::getErrorBody($response->body) . ' Something went wrong. Please report issue.', $response->code);
}

$jsonResponse = $this->decodeRawBodyToJson($response->raw_body);

$count = $jsonResponse['data']['user']['edge_follow']['count'];
if ($count === 0) {
return [];
}

$edgesArray = $jsonResponse['data']['user']['edge_follow']['edges'];
if (count($edgesArray) === 0) {
throw new InstagramException('Failed to get following of account id ' . $accountId . '. The account is private.', static::HTTP_FORBIDDEN);
}

$accounts = [];
foreach ($edgesArray as $edge) {
$accounts[] = $edge['node'];
}

$pageInfo = $jsonResponse['data']['user']['edge_follow']['page_info'];

return [
'count' => $count,
'hasNextPage' => $pageInfo['has_next_page'],
'nextPage' => $pageInfo['end_cursor'],
'accounts' => $accounts
];
}

/**
* @param array $reel_ids - array of instagram user ids
* @return array
Expand Down

0 comments on commit 23f4cff

Please sign in to comment.