ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php-使用Instagram API请求在用户中循环非常慢

2019-11-23 00:33:35  阅读:242  来源: 互联网

标签:performance instagram php


我试图遍历用户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正在跟随的准确数量的用户似乎已经开始工作…(???)…

对于其他尝试按照与我相同的方式做某事的人,也许这段代码可以为您指明正确的方向,直到有人回答原始内容为止.

$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);
        }
    }
}

解决方法:

顺序执行请求要比并行执行请求花费更长的时间.您将要执行并发请求以加快速度.

使用curl_multi查看this answer.

标签:performance,instagram,php
来源: https://codeday.me/bug/20191122/2063538.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有