Skip to main content

Endpoints - Articles de blog

Les endpoints d'articles de blog permettent d'accéder au contenu éditorial publié par les collectivités.

Liste des articles de blog​

Récupère la liste de tous les articles de blog publiés, optionnellement filtrés par groupe de villes.

Requête​

GET /public/blog-posts
GET /public/blog-posts?cityGroupId=group-uuid

Paramètres de requête​

  • cityGroupId (string, optionnel) : Filtrer les articles par groupe de villes

Réponse​

[
{
"id": "post-uuid",
"title": "Comment bien trier ses déchets",
"content": "# Comment bien trier ses déchets\n\nLe tri des déchets est essentiel...",
"published": true,
"publishedAt": "2024-01-10T09:00:00.000Z",
"createdAt": "2024-01-05T10:00:00.000Z",
"updatedAt": "2024-01-10T09:00:00.000Z",
"cityGroup": {
"id": "group-uuid",
"name": "Paris Métropole",
"type": "METROPOLE"
}
},
{
"id": "post-uuid-2",
"title": "Les nouvelles règles de tri",
"content": "# Les nouvelles règles de tri\n\nÀ partir du 1er janvier...",
"published": true,
"publishedAt": "2024-01-15T09:00:00.000Z",
"createdAt": "2024-01-12T10:00:00.000Z",
"updatedAt": "2024-01-15T09:00:00.000Z",
"cityGroup": {
"id": "group-uuid",
"name": "Paris Métropole",
"type": "METROPOLE"
}
}
]

Exemple d'utilisation​

// Récupérer tous les articles
const response = await fetch('https://api.wast-o.com/public/blog-posts');
const allPosts = await response.json();

// Filtrer par groupe de villes
const cityGroupId = 'group-uuid';
const filteredResponse = await fetch(
`https://api.wast-o.com/public/blog-posts?cityGroupId=${cityGroupId}`
);
const filteredPosts = await filteredResponse.json();

console.log(`Total d'articles: ${allPosts.length}`);
console.log(`Articles du groupe: ${filteredPosts.length}`);

Détails d'un article​

Récupère le contenu complet d'un article de blog par son ID.

Requête​

GET /public/blog-posts/:id

Paramètres​

  • id (string, requis) : Identifiant unique de l'article (UUID)

Réponse​

{
"id": "post-uuid",
"title": "Comment bien trier ses déchets",
"content": "# Comment bien trier ses déchets\n\nLe tri des déchets est essentiel pour préserver notre environnement...\n\n## Les règles de base\n\n- Vider et rincer les contenants\n- Retirer les bouchons\n- Séparer les différents matériaux\n\n:::tip\nAstuce: Consultez le calendrier de collecte pour connaître les jours de ramassage.\n:::\n\n![Image de tri](/img/tri-dechets.jpg)",
"published": true,
"publishedAt": "2024-01-10T09:00:00.000Z",
"createdAt": "2024-01-05T10:00:00.000Z",
"updatedAt": "2024-01-10T09:00:00.000Z",
"cityGroup": {
"id": "group-uuid",
"name": "Paris Métropole",
"type": "METROPOLE"
}
}

Exemple d'utilisation​

const postId = 'post-uuid';
const response = await fetch(`https://api.wast-o.com/public/blog-posts/${postId}`);
const post = await response.json();

console.log(`Titre: ${post.title}`);
console.log(`Publié le: ${new Date(post.publishedAt).toLocaleDateString()}`);
console.log(`Groupe: ${post.cityGroup.name}`);

Codes d'erreur​

  • 404 Not Found : L'article avec l'ID spécifié n'existe pas ou n'est pas publié

Format du contenu​

Le contenu des articles est au format MDX (Markdown + JSX), ce qui permet :

  • Formatage Markdown standard : Titres, listes, liens, images, etc.
  • Composants interactifs : Utilisation de composants React pour des éléments interactifs
  • Alertes et callouts : Utilisation de composants spéciaux pour les astuces, avertissements, etc.

Exemple de contenu MDX​

# Titre de l'article

Introduction avec du texte formaté.

## Section 1

Du contenu avec des **mots en gras** et des *mots en italique*.

- Liste à puces
- Autre élément

## Section 2

![Image descriptive](/img/example.jpg)

:::tip
Astuce pour les utilisateurs
:::

:::warning
Attention à ne pas faire ceci
:::

:::info
Information importante
:::

Pour afficher le contenu MDX dans votre application, vous devrez utiliser un processeur MDX comme @mdx-js/react ou @mdx-js/mdx.

Schémas de données​

BlogPost​

interface BlogPost {
id: string;
title: string;
content: string; // Format MDX
published: boolean;
publishedAt?: string;
createdAt: string;
updatedAt: string;
cityGroup: {
id: string;
name: string;
type?: string;
};
}

Exemple d'intégration complète​

async function fetchBlogPosts(cityGroupId) {
const url = cityGroupId
? `https://api.wast-o.com/public/blog-posts?cityGroupId=${cityGroupId}`
: 'https://api.wast-o.com/public/blog-posts';

const response = await fetch(url);
const posts = await response.json();

return posts;
}

async function fetchBlogPost(id) {
const response = await fetch(`https://api.wast-o.com/public/blog-posts/${id}`);

if (!response.ok) {
throw new Error(`Article non trouvé: ${id}`);
}

const post = await response.json();
return post;
}

// Utilisation
const posts = await fetchBlogPosts('group-uuid');
const firstPost = await fetchBlogPost(posts[0].id);
console.log(firstPost.title);