Я получаю доступ к данным из API, предоставляющего XML, используя PHP, с форматом поиска и URL-адресом, подобным этому:
$response = $oauth->get('https://example.com/Main/1');
В этом случае " 1"это номер страницы. Он вернет первые 100 результатов. (Это у меня все работает.)
Но если есть еще результаты, я не могу получить к ним доступ в настоящее время автоматически. (Мне бы пришлось изменить URL-адрес вручную.)
Возвращенное значение XML отобразит <Links><rel>last</rel><href>https://example.com/Main/3</href></Links>
количества страниц. (В данном случае доступно 3 страниц.)
Вот пример возвращаемого значения XML:
<?xml version="1.0" encoding="UTF-8"?>
<Fleet xmlns="http://standards.iso.org/iso/15143/-3" version="2" snapshotTime="2020-01-13T20:12:55.224Z">
<Links>
<rel>self</rel>
<href>https://example.com/Main/1</href>
</Links>
<Links>
<rel>last</rel>
<href>https://example.com/Main/3</href>
</Links>
<Equipment>
<EquipmentHeader>
<OEMName>CAT</OEMName>
<Model>D6</Model>
<EquipmentID>1111111</EquipmentID>
<SerialNumber>1111111</SerialNumber>
<PIN>1111111</PIN>
</EquipmentHeader>
<CumulativeOperatingHours datetime="2018-07-29T18:15:30.000Z">
<Hour>1111</Hour>
</CumulativeOperatingHours>
</Equipment>
// ... and so on - 100 results...
</Fleet>
Существует ли простой способ проверить значение данные последней страницы, а затем l oop путем извлечения данных с каждой из страниц (с первой до последней)?
(Поскольку я не буду знать, сколько страниц существует до первой результаты запроса возвращаются.)
ОБНОВЛЕНИЕ Я придумал это для определения количества страниц:
$total_pages = NULL;
$xml = simplexml_load_string($response);
// Get used name space, and use that
$namespaces = $xml->getDocNamespaces();
if(isset($namespaces[''])) {
$defaultNamespaceUrl = $namespaces[''];
$xml->registerXPathNamespace('default', $defaultNamespaceUrl);
$nsprefix = 'default:';
} else {$nsprefix = '';}
$nodes = $xml->xpath('//'.$nsprefix.'Links');
foreach($nodes as $node) {
if($node->rel == 'last'){
$last_page_url = $node->href;
$pos = strrpos($last_page_url, '/'); // position of last slash in url
$total_pages = $pos === false ? 0 : substr($last_page_url, $pos + 1); // if slash doesn't exist, then 0, otherwise the value after the last slash
} // end if
} // end foreach
echo $total_pages;
Так что теперь мне нужно выяснить, как к l oop через запросы ...