如何从PHP中的REST API加载多个页面

时间:2013-01-31 19:42:38

标签: php api rest simplexml

以下是从REST XML API获取结果的简单代码示例。

这只是我从真正的PHP课程中提取的一小部分内容。

在返回XML文档的API URL中,我很好奇如何从1页获取所有结果,然后继续从下一页获取。

$this->api_page设置API从中返回数据的页面。

使用SimpleXMLElement查看下面的基本代码我如何从页面编号开始返回API中的10页或所有页面中的数据,加载该页面的结果然后获取下一页继续前进。

现在我正在使用JavaScript和PHP通过使用Page number将URL中的$_GET['page']传递给我的脚本来解决这个问题,这需要用户加载页面,这就是马虎。

我的真实API脚本将从服务器上的Cron作业运行,所以考虑到这一点,我该如何获取所有页面?

我根据下面的示例代码问这个问题,但是因为这是我经常要对其他项目执行的任务,我不知道这样做的好方法吗?

<?php

$this->api_url = 'http://api.rescuegroups.org/rest/?key=' .$this->api_key.
'&type=animals&limit=' .$this->api_limit.
'&startPage='. $this->api_page;

$xmlObj = new SimpleXMLElement($this->api_url, NULL, TRUE); 

foreach($xmlObj->pet as $pet){

    echo $pet->animalID;
    echo $pet->orgID;
    echo $pet->status;

    // more fields from the  Pet object that is returned from the API call

    // Save results to my own Database

}
?>

1 个答案:

答案 0 :(得分:4)

基于您在非常稳定的环境中运行的假设,您可以遍历以下页面:

<?php
$this->base_url = 'http://api.rescuegroups.org/rest/?key=' .$this->api_key.
'&type=animals&limit=' .$this->api_limit.
'&startPage=';
$start_page = $this->api_page;
$end_page = 10; //If you have a value for max pages.
// sometimes you might get the number of pages from the first returned XML and then you could update the $end_page inside the loop.

for ($counter = $start_page; $counter <= $end_page; $counter++) {
    try {
        $xmlObj = new SimpleXMLElement($this->base_url . $counter, NULL, TRUE); 

        foreach($xmlObj->pet as $pet){

            echo $pet->animalID;
            echo $pet->orgID;
            echo $pet->status;

            // more fields from the  Pet object that is returned from the API call

            // Save results to my own Database

        }


    } catch (Exception $e) {
        // Something went wrong, possibly no more pages?
        // Please Note! You wil also get an Exception if there is an error in the XML
        // If so you should do some extra error handling
        break;
    }
}

?>