使用API​​的慢速脚本

时间:2014-08-21 20:25:44

标签: php api instagram

我正在编写一个脚本,检查Instagram用户是否跟随他的粉丝。我将列表存储在数据库中,出于测试目的,该列表中只有20个用户ID。剧本很疯狂。对于35个人来说,加载页面需要大约12秒。任何人都可以看到为什么这个基本脚本如此之慢?或者它只是instagrams API?

注意:我隐藏了访问令牌和我的用户ID - 不确定是否公开这样做。

代码:

<?php

require_once 'instagram.class.php';


session_start();

$mysqli = new mysqli("***","***","***","***");
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
};


if ($result = $mysqli->query("SELECT * FROM Jobs")) {
while($obj = $result->fetch_object()){ 
            $group_arr[] = $obj;
        }; 
        $userid = $group_arr[0]->id;
        $token = $group_arr[0]->token;         
        $status = $group_arr[0]->status;
        $list = explode(",", $group_arr[0]->follower_list);
    $result->close();
};

echo "<pre>";
print_r($group_arr);
echo "</pre>";


// check authentication
if ($token === false) {
  // authentication failed - throw an error
  //error placeholder
} else {
$instagram->setAccessToken($token);


foreach($group_arr as $job) {
    if($status=="start"){
        foreach($list as $entry){
            $call = $instagram->getUserRelationship($entry)->data->outgoing_status;
            if($call == "follows"){
        echo "follows<br>";
            }else{
        echo "doesn't follow<br>";

            };
        };
    }else{
        //it's marked as stop, do nothing.
    };

};


};//close it out


?>

这就是回应:

  

阵列(       [0] =&gt; stdClass对象           (               [id] =&gt;的 *               [token] =&gt; *               [status] =&gt;开始               [following_list] =&gt; 1161426957,191435508,1440954439,1463650509,1367056800,1446648791,1014674606,410710231,295958914,438752574,24520438,616513427,186915865,894461147,1395519590,256814697,1445364137,493354751,1455922632,1385122226,1161426957,191435508,1440954439,1463650509,1367056800, 1446648791,1014674606,410710231,295958914,438752574,24520438,616513427,186915865,894461147,1395519590           )

     

     

不跟随不遵循不跟随不遵循   不遵循不遵循不遵循不遵循不遵循   遵循不遵循不遵循不遵循不遵循   不遵循不遵循不遵循不遵循不遵循   遵循不遵循不遵循不遵循不遵循   不遵循不遵循不遵循不遵循不遵循   遵循不遵循不遵循不遵循不遵循   不跟随不遵循不遵循不遵循

2 个答案:

答案 0 :(得分:0)

我认为问题是API。 您确定API是否打算以这种方式使用?

我建议你为Instagram API的调用做一个基准测试,这样你就可以检查它需要多少秒。

所以,您应该添加以下代码:

foreach($group_arr as $job) {
    if($status=="start"){
        foreach($list as $entry){
//MODIFY HERE---
            $start_time = microtime(true);
            $call = $instagram->getUserRelationship($entry)->data->outgoing_status;
            $end_time = microtime(true);
            echo "getUserRelationship for: ", $entry, " takes ", ($end_time - $start_time), "ms\n<br />\n";
//--------------
            if($call == "follows"){
        echo "follows<br>";
            }else{
        echo "doesn't follow<br>";

            };
        };
    }else{
        //it's marked as stop, do nothing.
    };

};

如果您在开发环境中遇到此问题,可以查看生产环境需要多长时间。

我希望这对你有所帮助。

答案 1 :(得分:0)

我应该从开始做curl_multi。完全解决了一切,脚本运行得更快。 对于浏览此内容的任何其他人来说,Instagram API都很慢而且很麻烦。每次互动可以做的次数越少越好。如果您有100多个电话,我建议curl_multi