diff --git a/src/InstagramScraper/Instagram.php b/src/InstagramScraper/Instagram.php index 65ff33d5..ce2b705e 100644 --- a/src/InstagramScraper/Instagram.php +++ b/src/InstagramScraper/Instagram.php @@ -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 @@ -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