3 votes

Limitation du nombre d'articles à récupérer avec l'API Blogger (erreur 400)

J'essaie de récupérer tous les articles d'un blog en utilisant l'API Blogger. Le nombre maximum d'articles à récupérer semble être limité à 20 pour des raisons inconnues.

Si j'essaie cette URL :

https://www.googleapis.com/blogger/v3/blogs/3089072491354463482/posts?maxResults=20&fields=items(title)&key=AIzaSyAJO5J-pRCaGOIeRLIJfvAPwxpMLKvwebU

J'obtiens la réponse suivante (listant les titres des 20 derniers messages comme prévu) :

{
"items": [
  {
   "title": "El Caballero"
  },
  {
   "title": "Une traversée de frontière… étonnante!"
  },
  {
   "title": "Hasta luego querida Argentina!"
  },
  {
   "title": "Dernier jour en Argentine"
  },
  {
   "title": "Humahuaca"
  },
  {
   "title": "Purmamarca"
  },
  {
   "title": "Tilcara"
  },
  {
   "title": "Premières grèves"
  },
  {
   "title": "Le Nord Argentin: Salta"
  },
  {
   "title": "Ca en fait de l'eau tout ça..."
  },
  {
   "title": "Un peu de pluie au Brésil"
  },
  {
   "title": "Iguazu"
  },
  {
   "title": "San José"
  },
  {
   "title": "Adieu à Buenos Aires"
  },
  {
   "title": "Traversons en Uruguay"
  },
  {
   "title": "Retour à Buenos Aires"
  },
  {
   "title": "Fin de l'aventure Patagonienne"
  },
  {
   "title": "Les fameuses tours nous surprennent"
  },
  {
   "title": "Un peu de pluie pour se changer les idées"
  },
  {
   "title": "Valle Francés"
  }
 ]
}

Cependant, si j'augmente les paramètres maxResults,

https://www.googleapis.com/blogger/v3/blogs/3089072491354463482/posts?maxResults=21&fields=items(title)&key=AIzaSyAJO5J-pRCaGOIeRLIJfvAPwxpMLKvwebU

J'obtiens l'erreur suivante :

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalid",
    "message": "Invalid Value"
   }
  ],
  "code": 400,
  "message": "Invalid Value"
 }
}

Comment puis-je augmenter la limite du nombre maximum de messages que je peux récupérer ?

Merci,

Nicolas

6voto

Walid Laribi Points 150

Je pense que l'API est limitée à 20 résultats au maximum.

Ainsi, pour obtenir plus de 20 résultats, vous devez utiliser l'option pageToken comme spécifié dans l'API de référence de Bloggers.

Votre première demande doit comprendre les éléments suivants nextPageToken afin de l'inclure dans la réponse. Ensuite, utilisez ce jeton pour récupérer la page suivante et ainsi de suite.

Votre première demande doit ressembler à ceci :

https://www.googleapis.com/blogger/v3/blogs/3089072491354463482/posts?maxResults=20&fields=items%28title%29%2CnextPageToken&key=AIzaSyAJO5J-pRCaGOIeRLIJfvAPwxpMLKvwebU

Voici le résultat attendu :

{
 "nextPageToken": "CgkIChignPaz5ycQ-rn0pIfipe8q",
 "items": [
  {
   "title": "El Caballero"
  },
  {
   "title": "Une traversée de frontière… étonnante!"
  },
  {
   "title": "Hasta luego querida Argentina!"
  },
  {
   "title": "Dernier jour en Argentine"
  },
  {
   "title": "Humahuaca"
  },
  {
   "title": "Purmamarca"
  },
  {
   "title": "Tilcara"
  },
  {
   "title": "Premières grèves"
  },
  {
   "title": "Le Nord Argentin: Salta"
  },
  {
   "title": "Ca en fait de l'eau tout ça..."
  }
 ]
}

Il ne vous reste plus qu'à choisir la "nextPageToken": "CgkIChignPaz5ycQ-rn0pIfipe8q" dans le résultat et l'inclure dans votre prochaine demande comme ceci :

https://www.googleapis.com/blogger/v3/blogs/3089072491354463482/posts?%20maxResults=20&pageToken=CgkIChignPaz5ycQ-rn0pIfipe8q&fields=items%28title%29%2CnextPageToken&key=AIzaSyAJO5J-pRCaGOIeRLIJfvAPwxpMLKvwebU

Le résultat devrait montrer les 20 prochains messages en plus d'un nouveau ``nextPageToken`` à utiliser dans la prochaine requête.

2voto

nbeuchat Points 1708

J'ai implémenté ce qui a été suggéré par Walid Laribi pour une page de blog de voyage qui récupère l'emplacement de tous les articles du blog et dessine le chemin parcouru pendant le voyage ( blog ).

Pour récupérer l'emplacement de tous les messages, j'ai d'abord un script qui récupère les 10 premiers messages et me donne l'adresse suivante nextPageToken :

<script src="https://www.googleapis.com/blogger/v3/blogs/3089072491354463482/posts?fields=nextPageToken,items(title,location(name,lat,lng),url,published)&key=AIzaSyAJO5J-pRCaGOIeRLIJfvAPwxpMLKvwebU&callback=handleResponse">

Dans le rappel du script précédent, nous pouvons obtenir l'emplacement de chaque message ainsi que créer et exécuter le script pour récupérer les prochains messages :

// Get latitude/longitude from Blogger
function handleResponse(response) {
 for(i=0; i< response.items.length; i++){
  if(response.items[i].location != undefined){
   Lat.push(response.items[i].location.lat);
   Lng.push(response.items[i].location.lng);
   // etc.
  }
 }

 if(response.nextPageToken != undefined){
  var srctxt = 'https://www.googleapis.com/blogger/v3/blogs/3089072491354463482/posts?fields=nextPageToken,items(title,location(name,lat,lng),url,published)&key=AIzaSyAJO5J-pRCaGOIeRLIJfvAPwxpMLKvwebU&callback=handleResponse&pageToken=' + response.nextPageToken;

  // Execute the new script
  var head = document.getElementsByTagName('head')[0];
  var scriptElement = document.createElement('script');
  scriptElement.setAttribute('type', 'text/javascript');
  scriptElement.setAttribute('src', srctxt);
  head.appendChild(scriptElement);
  head.removeChild(scriptElement);
 }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X