Aller au contenu

Documentation

Lots

Traiter une liste d'entrées en respectant le débit par minute et les délais de réessai.

Ce qui est servi

Ces opérations se lancent sur une liste d'entrées en un appel : Annonce par lien ou identifiant, en lot, Lots d'un immeuble établis par ses DPE, Indice Travaux et état du parc en vente, en lot, Baromètre, en lot.

Une liste, appel par appel

  • Restez sous le débit par minute de votre organisation : RateLimit-Remaining dit ce qui reste dans la minute, RateLimit-Reset dans combien de secondes elle repart.
  • Sur une réponse 429 ou 503, attendez le délai de Retry-After avant de renvoyer.
  • Une réponse identique à une réponse déjà servie dans les 24 h n'est pas débitée une seconde fois : relancer une liste interrompue ne paie pas deux fois ce qui est déjà servi.
JavaScript
// Un appel à la fois : on respecte le débit par minute et le délai de réessai.
async function appeler(url, options, essais = 3) {
  for (let i = 0; i < essais; i++) {
    const reponse = await fetch(url, options)
    if (reponse.status !== 429 && reponse.status !== 503) return reponse
    const attente = Number(reponse.headers.get("Retry-After") ?? 1)
    await new Promise((fin) => setTimeout(fin, attente * 1000))
  }
  throw new Error("toujours refusé après plusieurs essais")
}

const urls = ["https://pillr.fr/api/v1/communes/76540"]
for (const url of urls) {
  const reponse = await appeler(url, { headers: { Authorization: `Bearer ${process.env.PILLR_CLE}` } })
  const donnees = await reponse.json()
  // ... traiter donnees ...
  if (reponse.headers.get("RateLimit-Remaining") === "0") {
    const reprise = Number(reponse.headers.get("RateLimit-Reset") ?? 1)
    await new Promise((fin) => setTimeout(fin, reprise * 1000))
  }
}

Guide suivant : Asynchrone et webhooks

    Lots | Pillr Data