3

ユーザー ID のリストをループして、ユーザーの関係ステータスを確認しようとしています。これ (ループを 20 に制限) には、「致命的な PHP は 30 秒以内に処理できませんでした」というエラーが発生するのに十分な時間がかかります。...そして、20 回よりかなり多く繰り返したいと思います。

「バッチ」リクエストを行う方法はありますか? 一度に確認したいすべてのユーザー ID のリストを IG に送信しますか?

これが私の現在のスニペットです:

<?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);
        }
    }
}
4

1 に答える 1

3

要求を順次実行すると、要求を並列で実行するよりも時間がかかります。これを高速化するには、同時リクエストを実行する必要があります。

curl_multiを使用してこの回答を見てください。

于 2013-08-12T13:41:16.237 に答える