2012-04-18 5 views
0

私は何かを実装する方法についての論理的な障害になっています。私はInstagram API(この質問には重要ではありません)を使って作業しています.JSONの回答では、20件の結果と次の20件の結果へのリンクを示しています。私は、最初のAPI呼び出しから応答を得ることができるOOPライブラリを構築しようとしています。次のURLがなくなるまで、next_url値を持っているかどうか検索し、そうであれば次の20応答を取得します。私はかなり JSONのループロジック

は現在、ここに最初の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 
           (
           ) 

         ) 
+0

"私はOOPライブラリを構築しようとしています" OOPはどこですか? :) – PeeHaa

+0

よくここに貼り付けるのは無駄でしょう、私は実際には既存のライブラリで作業しています –

+0

'post_parameters'には何が入っていますか?それ以上の電話でも必要ですか? – PeeHaa

答えて

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

。なぜ__apiCall関数の名前で2つのアンダースコアを使用していますか?それで、私は何かが考えているmagicalが起こっている。

+0

素晴らしいよ、ありがとう、私は固定したが、あなたは男だった...私は私の最終的な...と回答するだろう –

+0

@GThompson喜んで私は助けて、誤植を残念。それがちょうどうまくいくなら、楽しいことではないでしょう;-) – PeeHaa

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; 

    } 
関連する問題