簡體   English   中英

從內部調用PHP直到達到條件為止

[英]PHP Call Function from Inside Itself Until Condition Met

我有一個正在創建的函數,該函數基本上連接到Google Plus API並提取信息。 不幸的是,為了一次獲得多個結果,您需要使用API​​回調中提供的nextPageToken 這是我到目前為止的內容:

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條記錄為止。

在上面的勞倫斯的幫助下,我得以解決:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM