Open DavidLibeau opened 3 years ago
Pour le profile il y a aussi : https://www.doctolib.fr/profiles/{profileId}.json
si on connait l'id
.
Wow génial, effectivement il y a moyen d'améliorer pas mal les performances et la stabilité avec ça. Et sûrement de stresser moins les serveurs de Doctolib aussi.
Super si c'est utile. Pour info/pour avoir des exemples plus complet, vous pouvez regarder ce que j'ai fait ici :
availabilities.json
a plus de protection Cloudflare que les autres et donc mon serveur est bloqué…).Pour /avaiabilities.json
:
Le practice_ids
doit contenir la liste du/des praticien(s). Dans les centres médicaux plusieurs médecins y travaillent, ce champ permet de filtrer par praticien.
exemple ici : https://www.doctolib.fr/centre-de-sante/paris/sante-plus-centre-victor-masse.json
{
"data": {
"profile": {
"is_directory": false,
"organization": true,
"subtitle": "Centre de santé",
"id": 8929,
"name": "Santé PLUS - Centre Victor Massé",
"name_with_title": "Santé PLUS - Centre Victor Massé",
"name_with_title_and_determiner": "Santé PLUS - Centre Victor Massé",
"bio": "Le centre médical du spectacle vous accueille rue Victor Massé à Paris 9, du lundi au vendredi. \n\nCe centre existe depuis 1956 et accueille tous les patients pour tous types de soins médicaux (médecine générale, cardiologie, dermatologie, gynécologie, gastro-entérologie et psychiatrie). Nous proposons aussi une offre dentaire élargie comprenant des soins, des prothèses et une radio panoramique dentaire. Le centre est en pleine mutation, un changement de direction avec des rénovations est attendu dans les plus brefs délais.\nLes médecins généralistes vous accueillent également sans rendez-vous à tout moment du lundi au jeudi de 8h30 à 19h et le vendredi de 8h30 à 18h.",
"website_url": "https://www.sante-plus.com/",
"country": "fr",
"covid_profile_message": null,
"freemium": false,
"pictures": [
{
"public_id": "cjb7vbirdbgwdyp7m85m"
}
],
"cover_picture": {
"public_id": "gnrh5fkg2q06hjk1xkjs"
},
"avatar_picture": {
"public_id": "cjb7vbirdbgwdyp7m85m"
},
"agendas_with_covid_vaccination_for_general_practitioners": [],
"vaccination_or_gp_speciality": false,
"all_organizations_without_vaccination_feature": true,
"vaccination_center_with_pfizer_moderna": false
},
"details": [
{
"insurance_card": true,
"practice_id": 4920,
"regulation_sector": "Etablissement conventionné",
"third_party_payer": "national_and_additional",
"display_payment_means": true,
"temporary_message": "Retrouvez-vous sur notre site internet : https://www.sante-plus.com/.",
"payment_means": {
"cash": true,
"check": true,
"credit_card": true
}
}
],
"practitioners": [
{
"id": 22973831,
"profile_id": 200003,
"name_with_title": "Dr Driss ABOULKARAM",
"cloudinary_public_id": "mbkpkuupensbsquzor10",
"speciality": "Gynécologue médical et obstétrique",
"speciality_with_gender": "Gynécologue médical et obstétrique",
"link": "/gynecologue/paris/driss-aboulkaram"
},
{
"id": 19261651,
"profile_id": 167524,
"name_with_title": "Dr Mariam AHMEDOU",
"cloudinary_public_id": "yy4tyvlt4asro4ykcb3y",
"speciality": "Médecin généraliste",
"speciality_with_gender": "Médecin généraliste",
"link": "/medecin-generaliste/paris/mariam-ahmedou"
},
{
"id": 27226155,
"profile_id": 229950,
"name_with_title": "Dr Marie BARON",
"cloudinary_public_id": "qpwp60kd2j4qwjpckjre",
"speciality": "Chirurgien-dentiste",
"speciality_with_gender": "Chirurgien-dentiste",
"link": "/dentiste/paris/marie-baron"
}
],
"fees": [],
"places": [
{
"id": "establishment-5709",
"address": "21 bis rue Victor Massé",
"zipcode": "75009",
"city": "PARIS",
"floor": null,
"latitude": 48.8806829,
"longitude": 2.3382851,
"elevator": false,
"handicap": false,
"formal_name": "Centre Médical du Spectacle",
"landline_number": null,
"reception_info": null,
"full_address": "21 bis rue Victor Massé, 75009 PARIS",
"opening_hours": null,
"practice_ids": [
9549,
4920
],
"is_aphp": false,
"aphp_url": "http://www.aphp.fr/contenu/combien-ca-coute",
"name": "Centre Médical du Spectacle",
"short_name": null,
"parking": {
"name": "MILTON",
"full_address": "33 Rue Milton, 75009 Paris"
},
"stations": [
{
"transport_type": "metro",
"lines": [
"12",
"2"
],
"name": "Pigalle"
},
{
"transport_type": "metro",
"lines": [
"12"
],
"name": "Saint-Georges"
},
{
"transport_type": "rer",
"lines": [
"A"
],
"name": "Auber"
}
]
}
]
}
}
Pour visit_motive_ids
il faut passer les refVisitMotiveIds
ce sont les ids parents :
[
{
"id": 6970,
"name": "1re injection vaccin COVID-19 (Pfizer-BioNTech)"
},
{
"id": 7005,
"name": "1re injection vaccin COVID-19 (Moderna)"
},
{
"id": 7107,
"name": "1ère injection vaccin COVID-19 (AstraZeneca)"
},
{
"id": 7945,
"name": "Injection unique vaccin COVID-19 (Janssen)"
}
]
Et attention aux Slot
qui dans certains cas comme ci-dessus sont un array
de Date ISO 8601
, mais parfois des objects
plus complexes.
{
"availabilities": [
{
"date": "2021-05-21",
"slots": [
{
"agenda_id": 459768,
"practitioner_agenda_id": null,
"start_date": "2021-05-21T10:40:00.000+02:00",
"end_date": "2021-05-21T10:50:00.000+02:00",
"steps": [
{
"agenda_id": 459768,
"practitioner_agenda_id": null,
"start_date": "2021-05-21T10:40:00.000+02:00",
"end_date": "2021-05-21T10:50:00.000+02:00",
"visit_motive_id": 2782508
},
{
"agenda_id": 459768,
"practitioner_agenda_id": null,
"start_date": "2021-08-09T10:10:00.000+02:00",
"end_date": "2021-08-09T10:20:00.000+02:00",
"visit_motive_id": 2782509
}
]
}
],
"substitution": null
}
],
"total": 144
}
VS
{
"availabilities": [
{
"date": "2021-05-21",
"slots": [
"2021-05-21T10:35:00.000+02:00",
"2021-05-21T12:20:00.000+02:00",
"2021-05-21T12:35:00.000+02:00",
"2021-05-21T12:50:00.000+02:00",
"2021-05-21T13:35:00.000+02:00",
"2021-05-21T14:35:00.000+02:00",
"2021-05-21T14:50:00.000+02:00"
],
"substitution": null
}
],
"total": 15
}
Hello , Savez vous si il existe une API pour trouver tous les spécialistes dans une ville précise ?
Pour améliorer la stabilité de l'extension, il est proposé d'utiliser l'API interne de Doctolib.
Voici une documentation rapide du truc :
{urlCompleteDuCentre}.json
Exemple : https://www.doctolib.fr/pharmacie/paris/pharmacie-faidherbe.json
Exemple de réponse :
/booking/{urlUnique}.json
ou/booking/{id}.json
{urlUnique}
est la fin de l'url complète. Exemple : https://www.doctolib.fr/booking/pharmacie-faidherbe.json{id}
est l'id dispo sousdata.profile.id
dans le{urlCompleteDuCentre}.json
. Exemple : https://www.doctolib.fr/booking/237135.jsonExemple de réponse :
availabilities.json?start_date={date}&visit_motive_ids={visit_motive_ids}&agenda_ids={agenda_ids}&practice_ids={practice_ids}
{date}
est la date du jour au format2021-05-20
.{visit_motive_ids}
est la liste desvisit_motive_id
. Attention, il faut sélectionner les visit_motive pour les première injection uniquement. Perso je cherche"1ère injection vaccin COVID-19" || "1re injection vaccin COVID-19"
dans le champdata.visit_motives.name
du endpoint/booking
.{agenda_ids}
est la liste de tout les agendas au format{idA}-{id2}-{id3}
(parfois il n'y a qu'un agenda mais aprfois plusieurs, dans le doute, je les mets tous).{practice_ids}
(je sais plus trop ce que c'est mais en gros je mets la valeur dedata.places[0].practice_ids[0]
dedans).Exemple : https://pro.doctolib.fr/availabilities.json?start_date=2021-05-20&visit_motive_ids=2764585&agenda_ids=400342&practice_ids=159640
Exemple de réponse :
Il y a d'autres trucs mais c'est déjà un bon début… :)