2013-05-11 19 views
1

我有一個函數,我正在創建基本連接到Google Plus API和Pulls信息。不幸的是,爲了一次獲得更多的結果,您需要使用API​​回調中提供的nextPageToken。這是我到目前爲止:從內部調用PHP函數直到達到條件

function get_data($url) { 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 
function parseResults($nextPageToken = "") { 
    $count = 0; 
    $content = get_data('https://www.googleapis.com/plus/v1/activities?query=%23throughglass&maxResults=10&orderBy=recent&fields=items(actor(displayName%2Curl)%2Cid%2Cobject(actor%2Cattachments)%2Curl%2Cverb)%2CnextPageToken&pageToken=' . $nextPageToken . '&key=YOUR API KEY HERE'); 
    $posts = json_decode($content); 
    $token = $posts->nextPageToken; 
    foreach ($posts->items as $value){ 
     $id = $value->id; 
     $id_query = mysql_query("SELECT id FROM images WHERE id = '$id'"); 
     if ($value->verb != "post") continue; 
     if (mysql_num_rows($id_query) > 0) continue; 
     echo $value->actor->displayName . "<br />"; 
     $count++; 
    } 
    if ($count < 20){ 
     parseResults($token); 
    }else{ 
     break; 
    } 

} 
parseResults(); 

如果你能看到我在這裏試圖做什麼,希望有人可以幫助我。我基本上想繼續使用提供的nextPageToken重新調用parseResults()函數,直到處理了20條記錄。

+0

什麼問題呢?該功能是否有效?如果不是,怎麼樣? – Gordon 2013-05-11 16:44:53

+1

傳遞'$ count'作爲第二個參數'function parseResults($ nextPageToken =「」,$ count = 0){'then'$ count = $ count == 0? 0:$ count;' – 2013-05-11 16:46:16

+0

謝謝勞倫斯!在編輯您的評論之前,我確實做出了改變,並且它完美地工作!如果你想發佈它作爲答案,我可以給你它的聲譽。 :) – 2013-05-11 16:54:25

回答

1

我能提供幫助,以解決它從上面的勞倫斯:

function get_data($url) { 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 


function parseResults($nextPageToken = "", $count) { 
    $content = get_data('https://www.googleapis.com/plus/v1/activities?query=%23throughglass&maxResults=10&orderBy=recent&fields=items(actor(displayName%2Curl)%2Cid%2Cobject(actor%2Cattachments)%2Curl%2Cverb)%2CnextPageToken&pageToken=' . $nextPageToken . '&key={YOUR_API_KEY}'); 
    $posts = json_decode($content); 
    $token = $posts->nextPageToken; 
    foreach ($posts->items as $value){ 
     $id = $value->id; 
     $name = $value->actor->displayName; 
     $profile = $value->actor->url; 
     $post = $value->url; 
     $post_text = $value->object->attachments[0]->displayName; 
     $image_small = $value->object->attachments[0]->image->url; 
     $image_full = $value->object->attachments[0]->fullImage->url; 

     $id_query = mysql_query("SELECT id FROM images WHERE id = '$id'"); 
     if (mysql_num_rows($id_query) > 0) continue; 

     if ($value->verb != "post") continue; 
     if ($value->object->attachments[0]->image->url == "" || $value->object->attachments[0]->fullImage->url == "") continue; 
     if ($post_text != "#throughglass") continue; 

     mysql_query("INSERT INTO images (id, 
             author_name, 
             author_url, 
             post_url, 
             post_text, 
             image_small, 
             image_full) VALUES (
             '$id', 
             '$name', 
             '$profile', 
             '$post', 
             '$post_text', 
             '$image_small', 
             '$image_full')"); 
     echo "<b>ID: </b>" . $id . "<br />"; 
     echo "<b>Name: </b>" . $value->actor->displayName . "<br />"; 
     echo "<b>Profile URL: </b>" . $value->actor->url . "<br />"; 
     echo "<b>Post URL: </b>" . $value->url . "<br />"; 
     echo "<b>Post Text: </b>" . $value->object->attachments[0]->displayName . "<br />"; 
     echo "<b>Image Small: </b>" . $value->object->attachments[0]->image->url . "<br />"; 
     echo "<b>Image Full: </b>" . $value->object->attachments[0]->fullImage->url . "<br /><br />"; 
     $count++; 
    } 
    if ($count < 100){ 
     parseResults($token, $count); 
    }else{ 
     echo "<br /><br /><br />" . $token; 
     break; 
    } 

} 
parseResults("", 0); 
0

我想你想計算遞歸調用的數量。

您可以通過將函數包裝到類中使用類屬性來實現此目的,但最簡單的方法是將函數的參數添加到函數parseResult並在下次調用之前增加它。