J'accède aux données à partir d'une API fournissant XML à l'aide de PHP, avec un format de récupération et une URL comme celle-ci:

$response = $oauth->get('https://example.com/Main/1');

Dans ce cas, le " 1 " est le numéro de page. Il renverra les 100 premiers résultats. (Que je travaille tous.)

Mais s'il y a plus de résultats, je ne peux pas y accéder automatiquement actuellement. (Je devrais changer l'URL manuellement.)

Le code XML renvoyé affichera un <Links><rel>last</rel><href>https://example.com/Main/3</href></Links> du nombre de pages. (Dans ce cas, 3 pages disponibles.)

Voici un échantillon du XML renvoyé:

<?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>

Existe-t-il un moyen simple de vérifier la valeur donnée de la dernière page, puis de parcourir en boucle la récupération des données de chacune des pages (de la première à la dernière)?

(Étant donné que je ne saurai pas combien de pages il y a jusqu'à ce que les premiers résultats de la demande soient retournés.)

MISE À JOUR J'ai trouvé cela pour trouver le nombre de pages:

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

Alors maintenant, je dois comprendre comment parcourir les demandes ...

0
Ben in CA 14 janv. 2020 à 01:24