Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scrap d'un nouveau site - clikodoc.com #428

Open
tdevlaeminck opened this issue May 12, 2021 · 13 comments
Open

Scrap d'un nouveau site - clikodoc.com #428

tdevlaeminck opened this issue May 12, 2021 · 13 comments
Assignees
Labels

Comments

@tdevlaeminck
Copy link
Collaborator

Bonjour,

Voici un site qui pourrait être scrapé : clikodoc.com
A voir si c'est pertinent.
Selon leur site ils ont 300 pros, mais c'est du 100% DOM-TOM.

Thanks

@tdevlaeminck tdevlaeminck changed the title Scrap d'un nouveau site Scrap d'un nouveau site - clikodoc.com May 12, 2021
@Maijin Maijin added enhancement New feature or request and removed low-prio labels May 13, 2021
@Bouska
Copy link
Contributor

Bouska commented May 13, 2021

Analyse préliminaire de l'API

Clikodoc semble avoir une API assez simple mais potentiellement authentifiée.

Liste des praticiens détaillés + motives

POST endpoint: https://www.clikodoc.com/getDoctorsListForAllState ; payload state_id=45&city_id=9993&id=9&type=Speciality&page=1&_token=Ojqpi9PBpYpBulkmqFCpusO5XAMVT6P7V6jXu3Le

Ca c'est pour une recherche de tous les médecins généralistes (id 9) sur toute la Martinique (state_id + city_id ?). Je ne sais pas d'où sort le token ni s'il est nécessaire pour faire l'appel.

Dans la réponse, on a toute les infos utiles sur le practitien. Pour les motives, il faut regarder les type_ids, il faut chercher 699 pour une première injection AZ et 715 pour une deuxième injection (c'est standardisé entre tous les practiciens \o/). [PS.: après analyse complémentaire, c'est standardisé en Martinique, en Guadeloupe c'est 737 🙄 ]

Sur 65 médecins listés en Martinique, 7 font des injections. Et il n'y a pas de pharmacie. En Guadeloupe, 2 sur 6. En Guyane rien. A la Réunion, 1 sur 6.

Liste slots

POST endpoint: https://www.clikodoc.com/getSlotsForBookingV2 ; payload doctorid=305567&typeid=215&from=2021-05-13&to=2021-05-16&slotfor=next&work_location_id=0&date_mandatory_value=

doctor_id, c'est l'user_id de l'endpoint précédent, typeid c'est le 699 de la première injection qui nous intéresse. Ensuite il faut regarder les slots.

Opinion personnelle

Même si l'API est simple (en espérant que le _token ne pose pas de soucis), ça me semble beaucoup de boulot pour ajouter 10 médecins (pas beaucoup de volume et que de l'AZ). Après, pour la Martinique, ça double presque le nombre de centre. Je pense que c'est bien si quelqu'un veut faire une @grubounet

@Noezor
Copy link
Collaborator

Noezor commented May 13, 2021

Ok, good first issue + travail conséquent alors. Par contre, avant de vous lancer, vérifiez vraiment que c'est possible d'envoyer des requêtes sans _token.

C'est assez "guidé" car le travail a déjà été fait pour doctolib, maiia... et il suffit juste de calquer + ajouter l'itérateur au center_iterator.

edit -> viré good first issuecar ça représente quand même au minumum quelques centaines de lignes de code.

@Noezor Noezor added good first issue Good for newcomers nouvelle plateforme and removed good first issue Good for newcomers labels May 13, 2021
@Bouska
Copy link
Contributor

Bouska commented May 15, 2021

Sans _token, on récupère une erreur 401 Unauthorized, donc il va falloir voir comment on fait pour récupérer un token ou comment le contourner.

@thebackslashs
Copy link

Bonjour à tous,
j'ai commencé à regarder pour _token, et le récupérer est assez simple.

Pour le token

Il suffit de faire une request GET https://www.clikodoc.com/ pour récupérer le contenue classique en html de la page d'accueil, puis dans <head> trouver la balise meta du nom de csrf-token. Son contenue est le token. Le site ne semble pas doté de protection comme cloudflare, donc pas de restrictions ou de blocages. Le token est réutilisable pour plusieurs requests pour les endpoints.

Pour la collecte des données

Une fois la request passée au endpoint getDoctorsListForAllState, la réponse est assez lourde, mais contient toutes les informations nécessaires à un bon traitement : pour chaque médecin est accordé son nom, prénom, email, adresse, spécialité(s) (comme dit plus haut) et le nom de la clinique. De plus, avec une seul request, il semble possible de récupérer tout les médecins généralistes, avec leur information, du site, ce qui est un bon point.

Je laisse un exemple de réponse du server, pour 1 médecins.

https://pastebin.com/7k2EAGpu

@Bouska
Copy link
Contributor

Bouska commented May 18, 2021

Pour le token

Il suffit de faire une request GET https://www.clikodoc.com/ pour récupérer le contenue classique en html de la page d'accueil, puis dans <head> trouver la balise meta du nom de csrf-token. Son contenue est le token. Le site ne semble pas doté de protection comme cloudflare, donc pas de restrictions ou de blocages. Le token est réutilisable pour plusieurs requests pour les endpoints.

J'ai utilisé une solution similaire pour le token. J'ai copié le fonctionnement du JS de la page d'accueil. Je recupère le token dans un input _token caché. Après, juste le token ce n'est pas suffisant, il faut également renvoyé le cookie laravel récupéré au premier appel et mettre les bons headers.

Dans l'état actuel de mon code, j'arrive bien à récupérer la liste des médecins et à extraire les infos que je veux. Il faut que je fasse un code pour extraire les business_hours (pas simple) et pour gérer correctement les adresses (les adresses d'entrée sont de mauvaise qualité). Après j'ai peu de temps libre cette semaine donc je n'avance pas très vite.

@thebackslashs
Copy link

Dans l'état actuel de mon code, j'arrive bien à récupérer la liste des médecins et à extraire les infos que je veux. Il faut que je fasse un code pour extraire les business_hours (pas simple) et pour gérer correctement les adresses (les adresses d'entrée sont de mauvaise qualité). Après j'ai peu de temps libre cette semaine donc je n'avance pas très vite.

Pour récupérer les créneaux horaires disponibles d'un médecin, une des solutions serait d'utiliser l'endpoint POST https://www.clikodoc.com/getSlotsForBookingV2 qui prend en paramètre l'id du docteur, un id de consultation, et pour finir un étendue de jours avec une date de début et de fin. Les résultats de cette request retourne une liste de consultation possible avec leurs id, leurs états ( booked or not ) avec leurs horaires de début et de fin ainsi que le jour du rdv.

Si tu as besoin d'aide pour aller plus vite, j'ai pas grand chose de prévue pour ma part, et je cherche activement un projet dans lequel m'investir :)

@Bouska
Copy link
Contributor

Bouska commented May 18, 2021

@kanodevs retrouve moi sur Mattermost, je te transmettrai ce que j'ai déjà fait et on verra pour se repartir le boulot

@thebackslashs
Copy link

Ok pas de soucis merci, je n'ai jamais utiliser Mattermost par contre
Serait-t'il juste possible d'avoir un lien d’invitation ? De se que j'ai crue comprendre, le serveur ne permet pas d'inscriptions ouvertes :/

@Bouska
Copy link
Contributor

Bouska commented May 18, 2021

@kanodevs Vas sur ce lien https://mattermost.covidtracker.fr/covidtracker/channels/town-square, tu devrais pouvoir créer ton compte ensuite, il n'y a pas de restriction sur les inscriptions (normalement)

@thebackslashs
Copy link

C'est se que j'ai fait, mais l'options de création de compte ne semble pas disponible, et nous redirige vers login?redirect_to=%2Fcovidtracker%2Fchannels%2Ftown-square
Et même en utilisent https://mattermost.covidtracker.fr/signup_email?id=, on nous affiche,une fois la tentative de création de compte, que Ce serveur ne permet pas d'inscriptions ouvertes. Veuillez contacter votre administrateur pour recevoir une invitation.

@tdevlaeminck
Copy link
Collaborator Author

Hello,
Voici le lien d'inscription sur le mattermost Vite Ma Dose : https://mattermost.covidtracker.fr/signup_email?id=oxdon8y5etnuuxumksdctpb5hc

@Bouska
Copy link
Contributor

Bouska commented May 18, 2021

@thebackslashs
Copy link

Parfait ça marche, merci à vous deux

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

6 participants