使用Instagram API请求循环访问用户的速度非常慢

时间:2013-08-10 00:29:09

标签: php performance instagram

我正在尝试遍历用户ID列表以检查用户的关系状态。 这(将循环限制为20)需要足够长的时间才能获得“致命的PHP无法在30秒内处理错误”。 ......我想要做20多次重复。

有没有办法发出“批量”请求?向IG发送我想要一次性检查的所有用户ID列表?

这是我目前的片段:

<?php 
$i = 0;
foreach(get_user_meta($user_id, 'followed_users', false) as $followed){
        if($i < 20){
                        //Makes sure it's a real Insta user ID
            if(strlen($followed) > 2){
            $relationshipInfo = $instagram->getUserRelationship($followed);
            $relationship = $relationshipInfo->data->outgoing_status;
                if( $relationship == 'none' ){
                    //BAN THEM
                    update_user_meta($user_id, 'is_banned', 1);
                    if(!is_page('banned') && (get_user_meta($user_id, 'is_banned', true) == 1)){    
                        //REDIRECT TO 'BANNED' PAGE             
                        $redirect = get_bloginfo("url").'/banned/';
                        wp_redirect( $redirect );
                        exit;
                    }
                } else {
                    //DON'T BAN
                    update_user_meta($user_id, 'is_banned', 0);
                }
            }
        }
        $i++;
    }
?>

我只想注意:我知道我可以存储所有用户的列表$ current_user,然后检查foreach和inarray以查明$ current_user是否取消关注任何人(因为用户列表$ current_user跟随我的网站是存储到数据库中)除了我无法获得完整的用户列表$ current_user之后......所以解决这个问题实际上也解决了我的困境。

编辑:虽然我仍然想知道一个更快的循环方法,不知何故,获得(几乎)准确数量的用户$ current_user跟随似乎已经开始工作...(???)... < / p>

对于其他任何尝试按照与我相同的方式做某事的人,也许这段代码可以指向正确的方向,直到有人回复原文。

$insta_id = get_user_meta($current_user->ID, 'instagram_id', true);
$fObject = $instagram->getUserFollows($insta_id, -1);
$fUsers = $fObject->data;
//generate array of users currently followed
$fArray = array();
foreach ($fUsers as $fUser) {
    $fArray[] = $fUser->id;
}
//list of people followed through insta-hashtag
$wasFolloweds = get_user_meta($current_user->ID, 'followed_users', false);
foreach ($wasFolloweds as $wasF) {
    //check if they unfollowed
    if(strlen($wasF) > 2){
        if(!in_array($wasF, $fArray)){
            $userinfo = $instagram->getUserRelationship($wasF);
            if(!$userinfo->meta->error_type == 'APINotAllowedError'){ 
                //BAN THEM
                update_user_meta($user_id, 'is_banned', 1);
                if(!is_page('banned') && (get_user_meta($current_user->ID, 'is_banned', true) == 1)){   
                    //REDIRECT TO 'BANNED' PAGE             
                    $redirect = get_bloginfo("url").'/banned/';
                    wp_redirect( $redirect );
                    exit;
                }  
            } else {
                //DON'T BAN
                update_user_meta($user_id, 'is_banned', 0);
            }
        } else {
                //DON'T BAN
                update_user_meta($user_id, 'is_banned', 0);
        }
    }
}

1 个答案:

答案 0 :(得分:3)

按顺序执行请求所需的时间比并行执行请求的时间长。你会想要并发请求来加快速度。

使用this answer查看curl_multi