Introduction

Titre : Touripedia API

Version : 1.0.0

Description : Cette API permet d'accéder aux points d'intérêt (POIs). Elle offre des fonctionnalités de recherche, de filtrage et de récupération des détails des POIs.

URL du serveur : /v1

Authentification

Obtention de la clé

Obtention de la clé sur https://touripedia.nl/organisaties/api-aanvragen/

L'API utilise une clé d'authentification unique pour sécuriser les requêtes. Vous pouvez fournir cette clé de deux manières.

Méthode 1 : En-tête HTTP (Recommandée)

Incluez la clé dans l'en-tête X-API-Key de votre requête.

X-API-Key: votre_clé_api_unique

Méthode 2 : Paramètre de requête

Ajoutez la clé comme paramètre api_key dans l'URL de votre requête.

GET /v1/catalog?api_key=votre_clé_api_unique

Limites

Les règles de quotas à date sont les suivantes :

  • Maximum 20 à 30 requêtes concurrentes par client,
  • Pas plus de ~10 requêtes/seconde de manière prolongée,
  • Limite de 1000 requêtes/heure.

Lister et rechercher les POIs

GET/catalog

Récupère une liste paginée de l'ensemble des points d'intérêt disponibles, avec de nombreuses options de filtrage et de recherche.

Paramètres de requête

Nom Type Description
filters string Expression de filtres avancée. Voir la section dédiée.
fields string Liste des champs à retourner. Voir la section dédiée.
search string Terme(s) de recherche plein texte. Ex: château. Voir la section dédiée.
lang string Langue(s) pour les champs multilingues. Ex: fr,en. Voir la section dédiée.
sort string Champs de tri. Ex: lastUpdate[desc]. Voir la section dédiée.
page integer Numéro de la page. Défaut: 1. Voir la section Pagination.
page_size integer Nombre d'éléments par page. Défaut: 20, Max: 250.
type, insee, etc. string Filtres spécifiques. Voir les thésaurus pour les valeurs possibles.

Réponse (200 OK)

La réponse est un objet JSON structuré avec deux clés principales :

{
  "objects": [ ... ],
  "meta": { ... }
}
  • objects: Un tableau contenant la liste des objets POI pour la page actuelle. La structure détaillée de chaque objet est disponible dans la section Schéma POI.
  • meta: Un objet contenant les métadonnées de pagination. Voir la section Schéma Metadata pour plus de détails.

Endpoints Pré-filtrés

Ces endpoints sont des raccourcis vers /catalog avec un filtre pré-appliqué sur le type de POI. Ils acceptent tous les mêmes paramètres que /catalog.

GET /placeOfInterest : Liste des Lieux d'intérêt.

GET /entertainmentAndEvent : Liste des Fêtes et Manifestations.

GET /tour : Liste des itinéraires.

GET /product : Liste des produits.

Détail d'un POI

GET/catalog/{uuid}

Récupère les informations détaillées d'un point d'intérêt spécifique à partir de son UUID.

Paramètres de chemin

Nom Type Description
uuid string Requis. L'identifiant unique du POI.

Obtenir un Thésaurus

GET/thesaurus/{code}

Récupère les valeurs contrôlées (termes) pour un thésaurus donné, utiles pour construire des filtres précis.

Paramètres de chemin

Nom Type Description
code string Requis. Identifiant du thésaurus. Valeurs possibles : Theme, Amenity, PeopleAudience, LocomotionMode, DifficultyLevel, Rating, PointOfInterestClass.

Syntaxe du paramètre lang

Ce paramètre permet de spécifier la langue des champs traduisibles dans la réponse.

  • Syntaxe : Une liste de codes de langue (ex: fr, en) séparés par des virgules.
  • Valeur par défaut : Si le paramètre est omis, la réponse inclura le français (fr) et l'anglais (en).
  • Valeur spéciale `*` : Utilisez lang=* pour recevoir toutes les langues disponibles pour un champ.
# Demander les POIs avec les champs en français et espagnol
GET /v1/catalog?lang=fr,es

Syntaxe du paramètre fields

Ce paramètre permet de définir précisément la liste des champs à retourner pour chaque objet. Il permet d'optimiser la taille des réponses.

Comportement par défaut

Si le paramètre fields n'est pas précisé, l'API ne renvoie qu'une sélection de champs par défaut :

- uuid
- uri
- label
- type
- isLocatedAt.geo
- isLocatedAt.address
- !isLocatedAt.address.hasAddressCity.isPartOfDepartment
- COVID19SpecialMeasures
- hasBeenCreatedBy
- !hasBeenCreatedBy.address
- lastUpdate
- lastUpdateDatatourisme
- hasContact
- !hasContact.address.hasAddressCity.isPartOfDepartment
- hasReview
- hasMainRepresentation
- hasDescription

Note : Un point d'exclamation ! au début d'un champ indique l'exclusion de cette sous-arborescence.

Sélection personnalisée

Si vous avez besoin d'autres champs non inclus dans cette liste par défaut, vous devez utiliser le paramètre fields pour fournir la liste exhaustive de tous les champs que vous souhaitez obtenir.

Attention : L'utilisation du paramètre fields remplace totalement la sélection par défaut.

Hiérarchie

La sélection est hiérarchique : demander un champ parent retournera automatiquement toutes ses sous-propriétés.

# Demander l'UUID, le nom, et toutes les infos de contact
GET /v1/catalog?fields=uuid,label,hasContact

Syntaxe du paramètre filters

Le paramètre filters offre une syntaxe puissante pour construire des requêtes complexes en combinant plusieurs conditions.

Opérateurs de filtre

Les opérateurs sont placés entre crochets [] après le nom du champ. Ils sont insensibles à la casse.

Opérateur Description Exemple
[eq] Égal à (par défaut) type[eq]=PlaceOfInterest
[ne] Différent de amenity[ne]=Wifi
[gt] Supérieur à hasReview.hasReviewValue[gt]=3
[gte] Supérieur ou égal à offers.priceSpecification.minPrice[gte]=10.50
[lt] Inférieur à lastUpdate[lt]=2023-01-01
[lte] Inférieur ou égal à tourDistance[lte]=5000
[in] Inclus dans une liste (valeurs séparées par ,) isLocatedAt.address.hasAddressCity.isPartOfDepartment.insee[in]=35,22
[nin] Non inclus dans une liste type[nin]=Hotel,Restaurant
[between] Compris entre deux bornes (incluses) lastUpdate[between]=2023-01-01,2023-12-31
[text] Recherche plein texte sur un champ label[text]="château"
[geo_distance] Recherche géographique par distance isLocatedAt.geo[geo_distance]=...
[geo_bounding] Recherche géographique par zone isLocatedAt.geo[geo_bounding]=...

Combinaison d'expressions

Utilisez les opérateurs logiques AND et OR pour combiner des filtres. Les parenthèses () sont supportées pour gérer les priorités.

# Restaurants avec Wifi OU Parking
type=Restaurant AND (isEquippedWith=Wifi OR isEquippedWith=CarPark)

Syntaxe des opérateurs géospatiaux

Ces opérateurs permettent de rechercher des POIs en fonction de leur localisation géographique.

Opérateur [geo_distance]

Recherche les POIs dans un rayon donné autour d'un point central.

  • Format : lat,lon,distanceunité
  • Unités supportées : m, km, mi, yd, ft, in, cm, mm.
  • Contraintes : La latitude doit être entre -90 et 90, la longitude entre -180 et 180, et la distance doit être positive.
# POIs à moins de 10km de Rennes
filters=isLocatedAt.geo[geo_distance]=48.1173,-1.6778,10km

Opérateur [geo_bounding]

Recherche les POIs dans une boîte rectangulaire définie par ses coins supérieur-gauche et inférieur-droit.

  • Format : top_left_lat,top_left_lon,bottom_right_lat,bottom_right_lon
  • Contraintes : top_left_lat doit être supérieur à bottom_right_lat, et top_left_lon doit être inférieur à bottom_right_lon.
# POIs dans un quartier de Rennes
filters=isLocatedAt.geo[geo_bounding]=48.118,-1.675,48.115,-1.670

Syntaxe du paramètre sort

Le paramètre sort permet de trier les résultats. Vous pouvez trier par un ou plusieurs champs, y compris des champs imbriqués.

Opérateurs de tri

Opérateur Description Exemple
[asc] Ordre ascendant (par défaut) sort=label[asc] ou sort=label
[desc] Ordre descendant sort=lastUpdate[desc]

Tri sur plusieurs champs

Séparez les champs par une virgule ,. Le tri est appliqué dans l'ordre de la liste.

# Trier par département (croissant), puis par date de mise à jour (décroissant)
sort=isLocatedAt.address.hasAddressCity.isPartOfDepartment.insee,lastUpdate[desc]

Pagination

Pour naviguer dans de grands ensembles de résultats, l'API utilise un système de pagination. Les informations de pagination sont incluses dans l'objet meta de la réponse.

Exemple de réponse

{
  "objects": [...],
  "meta": {
    "total": 471688,
    "page": 1,
    "page_size": 20,
    "total_pages": 23585,
    "next": "http://api.datatourisme.fr/v1/catalog?api_key=...&page=2",
    "previous": null
  }
}

Méthode 1 : Liens de navigation (Recommandée)

C'est la méthode la plus simple et la plus fiable. Utilisez directement les URL fournies dans les champs next et previous de l'objet meta pour naviguer entre les pages.

Conseil : Privilégiez cette méthode pour parcourir l'intégralité du catalogue. Elle garantit de ne manquer aucun résultat.

Méthode 2 : Paramètre page

Vous pouvez demander une page spécifique en utilisant le paramètre page. Cependant, cette méthode a des limites techniques.

  • Limite : L'accès direct par numéro de page est limité aux 10 000 premiers résultats (soit 500 pages de 20 résultats).
  • Usage : Utile pour accéder rapidement aux premières pages de résultats.

Attention : Au-delà de la 10 000ème ressource, vous devez utiliser les liens next fournis dans la réponse précédente pour continuer la navigation.

Schéma POI (PointOfInterest)

Ceci est la structure complète et hiérarchique d'un objet POI. Cliquez sur les propriétés pour déplier leur contenu.

Schéma Metadata

L'objet meta accompagne chaque réponse de liste et contient les informations de pagination.

{
  "total": 15320,
  "page": 1,
  "page_size": 20,
  "total_pages": 766,
  "next": "/v1/catalog?page=2...",
  "previous": null
}
Propriété Type Description
total integer Nombre total de résultats pour la requête.
page integer Numéro de la page actuelle.
page_size integer Nombre d'éléments par page.
total_pages integer Nombre total de pages.
next string | null URL de la page suivante, ou null si c'est la dernière.
previous string | null URL de la page précédente, ou null si c'est la première.