1

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

这只是我为这个问题从我的真实 PHP 类中提取的一小部分。

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

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

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

现在,我正在使用 JavaScript 和 PHP 通过将Page numberURL 中的 a 传递给我的脚本来$_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

}
?>
4

1 回答 1

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

?>
于 2013-01-31T20:35:24.777 回答