Dernière mise à jour le 11/07/2022 à 23:17
Faso Santé met à disposition une API REST qui permet d'interagir avec ses données.
La 1
Ensuite procédez à l'abonnement (tarifs: 250 000F/mois, 400 000F/an)
Enfin, sur la page d' infos compte, vous pourrez (ré-)générer une clé d'accès à l'API.
L'URL d'accès à l'API est https://www.fasopharmacies.ytsamy.name/api.
Pour vos tests, une base de données allégée est disponible sur
https://www.test.fasopharmacies.ytsamy.name/api. Utilisez la clé API
za7fk69vhtETXohFMDP2
ce qui donne un en-tête
-H "Authorization: Basic emE3Zms2OXZodEVUWG9oRk1EUDI6Cg=="
Note: Afin de ne pas surcharger notre infrastructure, une limitation est appliquée au nombre de requêtes par utilisateur (ceci est indiqué dans l'en-tête de la réponse du serveur). Vous pouvez nous contacter si vous avez besoin de capacités supplémentaires.
Les exemples sont donnés avec l'outil en ligne de commande cURL. À vous de les adapter à votre client/langage de programmation favori. Le format général de la commande est le suivant:
curl [options] -i URL...
Les principales options sont les suivantes:
Vous pouvez consulter le manuel (en anglais).
Lister tous les établissements de santé (éventuellement, en tenant compte de certains critères).
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/pharmacies
[{
"id": 1,
"nom": "Pharmacie Avenir",
"tri_nom": "pharmacie avenir",
"telephone": null,
"otherphones": "25452999, 25361338",
"longitude": -1.49388,
"latitude": 12.37513,
"typeId": 14,
"groupe": 1,
"ville": 1,
"assurances": "Raynal, Sonar, UAB",
"garde": "3",
"pharmacieEstDeGarde": false,
"distance": null
},{
"id": 2,
"nom": "Pharmacie Béatitudes",
...
"garde": "3",
"pharmacieEstDeGarde": false,
"distance": null
}]
id
: identifiant de l'établissementnom
: nom de l'établissementtri_nom
: nom de l'établissement, en minuscule et sans accent, afin d'assurer un ordre
de tritelephone
: numéro de téléphone principalotherphones
: autres numéros de téléphonelongitude
: longitude de l'établissementlatitude
: latitudetypeId
: identifiant du type d'établissementgroupe
: groupe de la pharmacie (s'il ne s'agit pas d'une pharmacie, ce champs est à 0)ville
: identifiant de la ville où se trouve l'établissementassurances
: assurances acceptéesgarde
: le groupe qui est de gardepharmacieEstDeGarde
: indique si une pharmacie est de garde (true), ou non
(false).distance
: distance par rapport au centre de la recherche, null s'il
ne s'agit pas d'une recherche par coordonnéesNote: d'autres codes HTTP peuvent apparaitre, en fonction de la situation.
Vous pouvez lister les champs qui vous intéressent en ajoutant le paramètre fields
:
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/pharmacies?fields=id,nom,assurances
Cette requête n'affichera que les champs id
, nom
, et
assurances
.
Vous pouvez également préciser des critères de recherche. La syntaxe est:
PharmacieSearch[champs]=valeur
. Ainsi:
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/pharmacies?PharmacieSearch\[id\]=2
pour n'afficher que l'établissement ayant l'identifiant 2.
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/pharmacies?PharmacieSearch\[assurances\]=raynal&fields=id,nom,assurances
pour obtenir les champs id
, nom
, et assurances
des
établissements affiliés Raynal.
Note: les crochets ([]
) peuvent avoir besoin d'être échappés
comme dans l'exemple.
Il est encore possible de trier suivant un champs donné avec le paramètre
sort
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/pharmacies?sort=tri_nom
pour trier suivant le champs tri_nom
(pour inverser l'ordre de
tri, mettre un signe "-" devant: sort=-tri_nom
)
Enfin, vous pouvez afficher des informations étendues avec le paramètre expand
:
ville
: la ville de l'établissement
groupes
: les groupes auxquels appartient la pharmacie (pour les villes qui n'ont pas
un cycle de garde régulier)
votes
: les votes reçus
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/pharmacies?PharmacieSearch\[id\]=184&expand=ville,groupes,votes
[
{
"id": 184,
"nom": "Pharmacie Thérésa",
"tri_nom": "pharmacie theresa",
"telephone": "24776802",
"otherphones": null,
"longitude": 0.350705,
"latitude": 12.066818,
"typeId": 14,
"groupe": 3,
"ville": {
"id": 4,
"nom": "Fada N'Gourma",
"dateReference": "2021-07-03 08:00:00",
"nbGroupes": 26,
"longitude": 0.359748,
"latitude": 12.061561,
"fixedGroups": 0,
"garde": "17"
},
"assurances": "MCI, Sonar, Sunu",
"garde": "17",
"pharmacieEstDeGarde": false,
"distance": null,
"groupes": [
{
"groupe": 8,
"pharmacie": 184
},
{
"groupe": 10,
"pharmacie": 184
},
{
"groupe": 13,
"pharmacie": 184
},
{
"groupe": 15,
"pharmacie": 184
},
{
"groupe": 18,
"pharmacie": 184
},
{
"groupe": 19,
"pharmacie": 184
},
{
"groupe": 27,
"pharmacie": 184
},
{
"groupe": 30,
"pharmacie": 184
},
{
"groupe": 32,
"pharmacie": 184
},
{
"groupe": 35,
"pharmacie": 184
}
],
"votes": {
"upvotes": 13,
"downvotes": 3,
"pharmacie": 184
}
}
]
Dans une ville comme Ouaga où le cycle de garde est régulier, une pharmacie est de garde si
les champs groupe
et garde
sont égaux.
Dans le cas de la pharmacie Thérésa, à Fada N'Gourma, l'attribut fixedGroups
(attribut de la ville) est égal à 0, ce qui signifie que le cycle de garde n'est
pas régulier. Il faut donc passer en revue tous les groupes (objets du
champs groupes
ou chaîne du champs lesGroupes
) auxquels
appartient la pharmacie. Si l'un d'entre eux correspond
au champs garde
, alors la pharmacie est effectivement de garde.
Le champs pharmacieEstDeGarde
est un raccourci qui indiquera toujours
le statut de garde de la pharmacie, quel que soit le cycle de garde de la ville.
Lister toutes les répertoriées.
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/villes
[
{
"id": 1,
"nom": "Ouagadougou",
"dateReference": "2017-01-14 08:00:00",
"nbGroupes": 4,
"longitude": -1.535278,
"latitude": 12.357222,
"fixedGroups": 1,
"garde": "3"
},
{
"id": 2,
"nom": "Bobo Dioulasso",
...
},
...
]
id
: identifiant de la ville
nom
: nom de la ville
dateReference
: date à laquelle commence la garde du groupe 1 pour cette ville
nbGroupes
: nombre de groupes de la ville
longitude
, latitude
: coordonnées de la ville
fixedGroups
: est-ce que les groupes sont fixes (le cycle des gardes est régulier)? 1 pour
oui, 0 pour non
garde
: le groupe actuellement de garde (nécessairement inférieur à nbGroupes)
Comme pour les établissements de santé, vous pouvez lister les champs qui vous
intéressent (fields=champs1,champs2...
), indiquer un ordre de tri
(sort=champs
) ou filtrer les résultats suivant des critères de
recherche (VilleSearch[champs]=valeur
).
Déterminer dans quelle ville (ou à proximité de quelle ville) se trouve en emplacement donné
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/ville/ville-par-coordonnees?longitude=-4.299988&latitude=11.173766
longitude
, latitude
: les coordonnées de l'emplacement qui vous intéresse
{
"id": 2,
"nom": "Bobo Dioulasso",
"dateReference": "2013-04-20 08:00:00",
"nbGroupes": 4,
"longitude": -4.283333,
"latitude": 11.183333,
"fixedGroups": 1
}
Lister les assureurs répertoriés
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/assureurs
[
{
"id": 11,
"nom": "Ascoma"
},
{
"id": 7,
"nom": "Coris"
},
...
{
"id": 5,
"nom": "UAB"
}
]
Comme pour les établissements de santé, vous pouvez lister les champs qui vous
intéressent (fields=champs1,champs2...
), indiquer un ordre de tri
(sort=champs
) ou filtrer les résultats suivant des critères de
recherche (AssureurSearch[champs]=valeur
).
Trouver les établissements de santé à proximité d'un point donné
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/pharmacie/pharmacies-par-coordonnees?latitude=12.36785&longitude=-1.530917&fields=id,nom,assurances&garde=1&etablissements=4,%2013,%2014&per-page=5&assurance=1&page=1
Paramètres de la requête:
longitude
, latitude
: obligatoires, coordonnées du
centre de votre recherche
garde
: rechercher toutes les pharmacies (0, par défaut) ou seulement
les pharmacies de garde. Ce paramètre, bien sûr, ne s'applique qu'aux pharmacies. Si
vous ne recherchez pas de pharmacies, il reste sans effet.
etablissements
: identifiant du type d'établissement que vous recherchez.
Par défaut, la valeur est 14 (Pharmacies). Si vous en recherchez plusieurs, séparez-les
par ",
" (virgule et espacement; attention: l'API est
intraitable sur ce point!) encodés au format URL.
Ex: etablissements=6,%2013,%204
assurance
: identifiant de l'assurance, laisser vide si indiférrent
per-page
: nombre de résultats par page (1-25)
page
: la page de résultats à renvoyer (par défaut: 1; le maximum dépend
du nombre global de résultats disponibles).
[
{
"id": 3625,
"nom": "Polyclinique Yentema",
"longitude": -1.5268847,
"latitude": 12.3659878,
"tri_nom": "polyclinique yentema",
"telephone": "25337070",
"otherphones": "71668839-68153787-75383744",
"typeId": 4,
"groupe": null,
"ville": 1,
"garde": "3",
"distance": "0.48474486540170886",
"assurances": null,
"pharmacieEstDeGarde": false
},
{
"id": 3723,
"nom": "Clinique St Jean",
...
"distance": "0.8788162539505393",
"assurances": null,
"pharmacieEstDeGarde": false
},
...
{
"id": 3621,
"nom": "Laboratoire d'Analyses Médicales du Centre",
...
"distance": "1.557766063751697",
"assurances": null,
"pharmacieEstDeGarde": false
}
]
Le champs supplémentaire distance
indique la distance (en Kilomètres)
à partir du point d'origine de votre recherche.
pharmacieEstDeGarde
indique si une pharmacie est de garde (true), ou non
(false).
Parmi les en-têtes de la réponse figurent les lignes suivantes:
X-Pagination-Current-Page
: la page actuelle
X-Pagination-Page-Count
: le nombre total de pages disponibles
X-Pagination-Per-Page
: le nombre d'éléments par page (entre 1 et 25
en fonction de ce que vous avez demandé dans la requête)
X-Pagination-Total-Count
: le nombre total de résultats disponibles
Link
: des liens vers la 1ère page,
dernière page, page actuelle, page suivante et page précédente des résultats
Trouver les établissements de santé d'une ville donnée
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/pharmacie/pharmacies-par-ville?ville=3&garde=1&limite=3&etablissements=14
Paramètres de la requête:
ville
: obligatoire, identifiant de la ville objet de votre
recherche
garde
: rechercher toutes les pharmacies (0, par défaut) ou seulement
les pharmacies de garde. Ce paramètre, bien sûr, ne s'applique qu'aux pharmacies. Si
vous ne recherchez pas de pharmacies, il reste sans effet.
etablissements
: identifiant du type d'établissement que vous recherchez.
Par défaut, la valeur est 14 (Pharmacies). Si vous en recherchez plusieurs, séparez-les
par ",
" (virgule et espacement) encodés au format URL.
Ex: etablissements=6,%2013,%204
assurance
: identifiant de l'assurance, laisser vide si indiférrent
per-page
et page
: pour gérer la pagination (cf
Trouver les établissements de santé à
proximité)
[
{
"id": 167,
"nom": "Pharmacie Faag-Yonre",
"longitude": -2.362645,
"latitude": 12.250207,
"tri_nom": "pharmacie faag-yonre",
"telephone": "25440230",
"otherphones": null,
"typeId": 14,
"groupe": 3,
"ville": 3,
"garde": "3",
"assurances": "GA, MCI, Raynal, Sunu, UAB",
"pharmacieEstDeGarde": false
},
{
"id": 168,
"nom": "Pharmacie Kuilig-Noore",
"longitude": -2.374332,
"latitude": 12.251041,
"tri_nom": "pharmacie kuilig-noore",
"telephone": "25441188",
"otherphones": null,
"typeId": 14,
"groupe": 3,
"ville": 3,
"garde": "3",
"assurances": "Coris, GA, MCI",
"pharmacieEstDeGarde": true
}
]
Lister le nombre de votes obtenus par chaque établissement
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/votes
[
{
"upvotes": 22,
"downvotes": 5,
"pharmacie": 1
},
{
"upvotes": 19,
"downvotes": 0,
"pharmacie": 2
},
...
{
"upvotes": 26,
"downvotes": 2,
"pharmacie": 20
}
]
upvotes
: votes positifs,
downvotes
: votes négatifs,
pharmacie
: identifiant de la pharmacie,
Comme pour les établissements de santé, vous pouvez lister les champs qui vous
intéressent (fields=champs1,champs2...
), indiquer un ordre de tri
(sort=champs
) ou filtrer les résultats suivant des critères de
recherche (VilleSearch[champs]=valeur
).
Obtenir la liste des types d'établissements de santé
Chaque établissement a un type (Pharmacie, Clinique, Laboratoire,...) indiqué
par le champs typeId
et certaines requêtes demandent un type en paramètre.
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/types
[
{
"id": 1,
"libelleType": "Centre Hospitalier (Régional, Universitaire)",
"order": 20
},
{
"id": 2,
"libelleType": "Centre Médical (Urbain, avec Antenne)",
"order": 25
},
...
{
"id": 15,
"libelleType": "Autre",
"order": 100
}
]
Les noms des champs id
et libelleType
s'expliquent d'eux-mêmes.
Le champs order
permet de suivre un ordre que nous avons manuellement défini
et qui se veut "naturel".
Comme pour les établissements de santé, vous pouvez lister les champs qui vous
intéressent (fields=champs1,champs2...
), indiquer un ordre de tri
(sort=champs
) ou filtrer les résultats suivant des critères de
recherche (VilleSearch[champs]=valeur
).
Obtenir la liste des catégories d'établissements de santé
Pour simplifier les manipulations côté utilisateur, nous avons regroupés les types
en catégories. Celles-ci ne servent qu'à l'utilisateur pour (dé)sélectionner rapidement
certains types. Mais aucune requête ne fonctionne avec les catégories; seuls les types
sont pris en compte.
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/categories
[
{
"id": 1,
"libelleCategorie": "Etablissements publics",
"typeIds": "1, 2, 3",
"order": null
},
{
"id": 2,
"libelleCategorie": "Etablissements privés",
"typeIds": "4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14",
"order": null
},
{
"id": 3,
"libelleCategorie": "Soins hospitaliers",
"typeIds": "1, 2, 4, 5, 6",
"order": null
},
{
"id": 4,
"libelleCategorie": "Soins non hospitaliers",
"typeIds": "3, 7, 8, 9, 10, 11",
"order": null
},
{
"id": 5,
"libelleCategorie": "Autres établissements",
"typeIds": "12, 13, 14, 15",
"order": null
}
]
Le champs typeIds
donne la liste des types qui se classent dans chaque
catégorie. order
n'est pas (encore) utilisé.
Comme pour les établissements de santé, vous pouvez lister les champs qui vous
intéressent (fields=champs1,champs2...
), indiquer un ordre de tri
(sort=champs
) ou filtrer les résultats suivant des critères de
recherche (VilleSearch[champs]=valeur
).
Voter (ou annuler un vote) pour un établissement
Un système de vote a été mis en place afin de recueillir un avis (basique) des
utilisateurs sur les services des établissements de santé. Cette requête permet donc
de voter pour un établissement (ou éventuellement annuler un vote qui aurait été
fait par erreur).
Attention: le nombre de votes est limité - 3 en
15 minute(s) - pour l'utilisateur final, et donc aussi pour vous en
tant que client de l'API.
curl -X POST -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/pharmacie/upvote --data '{"pharmacie": 1}'
curl -X POST -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/pharmacie/downvote --data '{"pharmacie": 1}'
upvote
est pour les avis positifs, downvote
est pour
les avis négatifs.
Paramètres:
pharmacie
: l'identifiant de l'établissement de sante pour lequel vous
souhaitez voter.
cancel
: 0 (par défaut) ou 1 (pour annuler un vote fait par erreur).
[
{
"resultat": true,
"votes": {
"upvotes": 27,
"downvotes": 5,
"pharmacie": 1
}
}
Le vote a été pris en compte et le système vous indiques les nouvelles valeurs
des votes (upvote
et downvote
).
Proposer un nouvel établissement de santé à rajouter à la base de données.
Si un manque a été repéré dans la base de données, vous avez la possibilité
de proposer l'ajout de l'établissement manquant.
curl -X POST -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/pharmacie/create" --data '{"nom": "etablissement bidon1", "telephone": "89898989", "longitude": -1.5, "latitude": 12.4, "ville": 3, "comment": "comentaire"}'
Paramètres:
pharmacie
: l'identifiant de l'établissement de sante pour lequel vous
souhaitez voter.
nom
: Nom de l'établissement à ajouter
telephone
: numéro de téléphone
longitude
et latitude
: les coordonnées de l'emplacement
de l'établissement
groupe
: le groupe (uniquement pour les pharmacies)
ville
: l'identifiant de la ville
comment
: éventuel commentaire
[
{
"field": "latitude",
"message": "Ces coordonnées sont hors du Burkina Faso"
},
{
"field": "ville",
"message": "Cette ville n'est pas répertoriée"
},
{
"field": "telephone",
"message": "Téléphone doit comporter 8 caractères."
}
]
Trouver le prix d'un médicament à partir (d'un fragment) du nom
curl -X GET -H 'Content-Type: application/json' -i https://www.fasopharmacies.ytsamy.name/api/medicament/search?term=*denk
[
{
"label": "ACYCLOVIR DENK 200MG COMP B/25.",
"prix": 8150
},
{
"label": "ACYCLOVIR DENK 5% CREM 5G",
"prix": 3350
},
...
{
"label": "AMOXI-DENK 500MG CP B/20",
"prix": 2100
}
]
Note: l'astérisque (*
) est utilisé comme caractère générique et
est toujours rajouté automatiquement à la fin de la chaîne recherchée.