mgp25 Instagram-API的API请求过多

时间:2019-10-02 14:28:19

标签: php composer-php instagram-api

我想吸引两个输入用户的所有关注者。我是这样做的,但是当用户尝试拥有一百万个关注者时(例如500万,等等),我从Instagram得到了这个错误。

在我的示例中:

-> User1有500万关注者

-> User2有7个Millon关注者

我需要获得这些用户的关注者,然后存储两个数组并相互比较。

我这样做了,但是只有小额帐户...

  

出了点问题:由于API请求过多,Instagram被节制。出了点问题:由于API请求过多,Instagram被节制了。

这是我的代码:

    require 'vendor/autoload.php';

\InstagramAPI\Instagram::$allowDangerousWebUsageAtMyOwnRisk = true;

$username = 'test_35_1041';
$password = '*****';

$ig = new \InstagramAPI\Instagram();

try {
    $ig->login($username,$password);
} catch (\Exception $e) {
    echo $e->getMessage();
}
if (!empty($_POST)){

    $name1 = $_POST["username1"];
    $name2 = $_POST["username2"];

    $userId = $ig->people->getUserIdForName($name1);
    $userId2 = $ig->people->getUserIdForName($name2);

    $items = array();
    $items2 = array();

    $time_start = microtime(true);
   try {
        $maxId = null;
        $rankToken = \InstagramAPI\Signatures::generateUUID();
        do {
            $response = $ig->people->getFollowers($userId,$rankToken,null,$maxId);
            $json = json_decode($response);
            foreach ($json->users as $value) {
                # code...
                $items[] = $value->username;
                //print_r($value->username);
            }
            $maxId = $response->getNextMaxId();
            flush();
        } while ($maxId !== null);
    } catch (\Exception $e) {
        echo 'Something went wrong: '.$e->getMessage()."\n";
    }

    try {
        $maxId = null;
        $rankToken = \InstagramAPI\Signatures::generateUUID();
        do {
            $response = $ig->people->getFollowers($userId2,$rankToken,null,$maxId);
            $json = json_decode($response);
            foreach ($json->users as $value) {
                # code...
                $items2[] = $value->username;
                //print_r($value->username);
            }
            $maxId = $response->getNextMaxId();
        } while ($maxId !== null);
    } catch (\Exception $e) {
        echo 'Something went wrong: '.$e->getMessage()."\n";
    }
    $time_end = microtime(true);
    $execution_time = ($time_end - $time_start)/60;

    $result = array_intersect($items, $items2);
}

我认为它更复杂,我需要为您的帮助优化此代码... 我该如何解决这个问题?

谢谢大家。

1 个答案:

答案 0 :(得分:0)

  

由于API请求过多,Instagram对其进行了限制

这意味着您经常发送请求。您需要像这样在每个循环步骤上睡觉

try {
    $maxId = null;
    $rankToken = \InstagramAPI\Signatures::generateUUID();
    do {
        ****
        Log::info( "Sleeping for 5s...");
        sleep(5);
    } while ($maxId !== null);
} catch (\Exception $e) {
    echo 'Something went wrong: '.$e->getMessage()."\n";
}