0

私がやっていることを実装する方法について、論理的な障害があります。私はInstagram API(この質問には重要ではありません)を使用しており、JSON応答で20の結果と次の20の結果へのリンクを提供します。最初の API 呼び出しから応答を取得できる OOP ライブラリを構築しようとしています。「next_url」値があるかどうかを検索し、ある場合は次の 20 の応答を取得し、次の URL がなくなるまで続けます。 . これを行う方法についてのロジックを完全に収集することはできません...

現在、最初の20を取得するコードは次のとおりです...

function __apiCall($url, $post_parameters = FALSE) {

        $curl_session = curl_init();

        curl_setopt($curl_session, CURLOPT_URL, $url);

        if($post_parameters !== FALSE) {
            curl_setopt ($curl_session, CURLOPT_POSTFIELDS, $post_parameters);
        }

        // Return the curl results to a variable
        curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, $this->codeigniter_instance->config->item('instagram_ssl_verify'));

        $contents = curl_exec ($curl_session);

        curl_close ($curl_session);

        $return = json_decode($contents);
        return $return;


    }

JSON 応答のスニペットを次に示します。

    stdClass Object
(
    [pagination] => stdClass Object
        (
            [next_url] => https://api.instagram.com/v1/locations/3937885/media/recent?min_timestamp=&min_id=&max_timestamp=&access_token=xxxxxxxxxxxx49414762bea69258210d8872&max_id=133226850290424667_21341717
            [next_max_id] => 133226850290424667_21341717
        )

    [meta] => stdClass Object
        (
            [code] => 200
        )

    [data] => Array
        (
            [0] => stdClass Object
                (
                    [tags] => Array
                        (
                        )

                    [type] => image
                    [location] => stdClass Object
                        (
                            [latitude] => 39.95022
                            [name] => Neiman Group
                            [longitude] => -75.168322
                            [id] => 3937885
                        )

                    [comments] => stdClass Object
                        (
                            [count] => 0
                            [data] => Array
                                (
                                )

                        )
4

2 に答える 2

2
function getResults($url)
{
    $gotAllResults = false;
    $results = array();

    while(!$gotAllResults) {
        $result = $this->__apiCall($url);
        $results[] = $result;

        if (!property_exist($result->pagination, 'next_url') {
            $gotAllResults = true;
        } else {
            $url = $result->pagination->next_url;
        }
    }

    return $results;
}

function __apiCall($url)
{
        // settings for cURL

        $contents = curl_exec($curl_session);

        curl_close ($curl_session);

        $result = json_decode($contents);
        return $return;
}

ところで。関数の名前に 2 つのアンダースコアを使用しているのはなぜですか__apiCall。それは私に何か魔法のようなことが起こっていると思わせます.

于 2012-04-18T19:28:06.030 に答える
0
function __apiCall($url, $post_parameters = FALSE) {

        // Initialize the cURL session
        $curl_session = curl_init();

        // Set the URL of api call
        curl_setopt($curl_session, CURLOPT_URL, $url);

        // If there are post fields add them to the call
        if($post_parameters !== FALSE) {
            curl_setopt ($curl_session, CURLOPT_POSTFIELDS, $post_parameters);
        }

        // Return the curl results to a variable
        curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, 1);

        // There was issues with some servers not being able to retrieve the data through https
        // The config variable is set to TRUE by default. If you have this problem set the config variable to FALSE
        // See https://github.com/ianckc/CodeIgniter-Instagram-Library/issues/5 for a discussion on this
        curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, $this->codeigniter_instance->config->item('instagram_ssl_verify'));

        // Execute the cURL session
        $contents = curl_exec ($curl_session);

        // Close cURL session
        curl_close ($curl_session);

        // Return the response
        return  json_decode($contents);


    }

    function getResults($url){

        $gotAllResults = false;
        $results = array();

        while(!$gotAllResults) {
        $result = $this->__apiCall($url);
        $results[] = $result;

        if (!property_exists($result->pagination, 'next_url')) {
            $gotAllResults = true;
        } else {
            $url = $result->pagination->next_url;
        }
    }

    return $results;

    }
于 2012-04-19T14:03:05.080 に答える