Un programme initialement développé par axeleroy/untoitpourcaramel (inspiré par VikParuchuri/apartment-finder) qui récupère les annonces immoblières de Leboncoin, Logic Immo, PaP et SeLoger pour les aggréger dans un tableau Trello.
- Python 3
- peewee
- Requests
- BeautifulSoup4
- lxml
- py-trello (et ses dépendances)
Puisque les sites exploités ne proposent pas publiquement d'API permettant de récupérer les annonces, il m'a fallu étudier les requêtes effectuées et les réponses reçues par les applications Android de ces sites à l'aide de Packet Capture.
Une fois Packet Capture installé et configuré, il n'y a plus qu'à lancer les applications, effectuer une première recherche avec tous les critères possibles afin d'identifier la requête et les critères ; et une seconde qui retourne au moins deux résultats pour pouvoir étudier l'objet retourné par l'API.
Avec cette méthodologie on peut déterminer comment interroger le service avec les critères que l'on souhaite et quelles réponses il renvoit.
La procédure est ensuite répétée pour obtenir le contenu des annonces. Les requêtes et les réponses sont situées
dans le dossier sample-requests pour votre analyse (et pour tirer partie des paramètres propres à chaque service).
- annonce :
- rep.xml / rep.json : Corps de la réponse contenant l'annonce
- req.log : En-têtes de la requête pour obtenir l'annonce
- recherche :
- rep.xml / rep.json : Corps de la réponse contenant les résultats de la recheche
- req.full.log : En-têtes de la requête de recherche avec tous les paramètres proposés par l'application
- req.norm.log : En-têtes de la requête d'une recherche dans un cas d'utilisation normale
Avant de commencer à utiliser #toitoimontoit, il vous faut créer le fichier trello.json qui contiendra vos
jetons pour Trello ainsi que le nom de votre tableau et de votre liste :
{
"ApiKey": "you-key",
"ApiSecret": "your-secret",
"Token": "your-oauth-token-key",
"TokenSecret": "your-oauth-token-secret",
"BoardName": "Recherche appartement"
}ApiKey et ApiSecret sont à obtenir ici tandis que Token
et Token Secret sont à générer avec l'utilitaire util.py de py-trello :
TRELLO_API_KEY=ApiKey TRELLO_API_SECRET=ApiSecret python3 `python3 -c "import site; print(site.getsitepackages()[0])"`/trello/util.py
De même que les jetons Trello, les paramètres de recherce communs à tous les services sont dans le fichier
parameters.json qu'il faut créer avant d'utiliser le programme :
{
"ad-providers": ["leboncoin", "logic-immo"],
"cities":
[
["Nanterre", 92000, 920050],
["Rueil-Malmaison", 92500, 920063]
],
"price": [200, 900],
"surface": [30, 70],
"rooms": [2, 5],
"bedrooms": [1, 2],
"leboncoin": {
"c": 10,
"f": "p",
"ret": [1, 2],
"q": "terasse"
},
"seloger": {
"idtt": 1,
"idtypebien": "1,2",
"getDtCreationMax": 1
},
"pap": {
"recherche[produit]": "location",
"recherche[typesbien][]": "appartement",
"order": "date-desc"
},
"logic-immo": {
"domain": "rentals",
"order": "date-desc"
}
}
Les paramètres sont donc :
ad-providersspécifie les fournisseurs d'annonces selectionnées :- logic_immo : www.logic-immo.com
- seloger : www.seloger.com
- leboncoin : www.leboncoin.com
- pap : www.pap.fr
citiescontient les villes, avec leur nom, code postal puis le code INSEE utilisé par SeLoger,price,surface,roomsetbedroomssont donc respectivement le prix, la surface, le nombre de pièces et le nombre de chambres avec les bornes minimales et maximales,leboncoincontient les paramètres propres à LeBonCoin :creprésente la catégorie des annonces :9pour les ventes immobilières,10pour les locations,11pour les collocations.
retpermet de filtrer le type de bien : (optionnel)1pour les maisons,2pour les appartements,3pour les terrains,4pour les parkings,5pour les autres.
fpermet de filtrer le type d'annonceur : (optionnel)ppour les particulierscpour les professionnels
furnpermet de choisir si un bien est meublé1ou non2. (optionnel)qreprésente le contenu du champ de recherche. (optionnel)
selogercontient les paramètres propres à SeLoger :idttreprésente la catégorie des annonces :1pour les locations,2pour les ventes.
idtypebienreprésente le type de bien : (optionnel)1pour les appartements,2pour les maisons et villas,3pour les parkings et boxs,4pour les terrains,6pour les boutiques,7pour les locaux,8pour les bureaux,9pour les lofts et ateliers.
getDtCreationMax=1est requis par l'API.
papcontient les paramètres propres à PAP :recherche[produit]permet de préciser si l'on cherche unelocationou unevente,recherche[typesbien][]permet de préciser le type de bien cherché.recherche[tags][]permet de renseigner des critères avancés : (optionnel)meubleetvidelongue-dureeetcourte-dureeduplex-triplexplain-piedetdernier-etagepiscinebalcon-terrassegarages-parkingacces-handicape
logic-immocontient les paramètres propres à Logic Immo :domainpermet de préciser si l'on cherche un bien en location (rentals) ou en vente (sales)
Les paramètres restants de chaque service peuvent être facilement obtenus à partir processus d'ingénierie inversée.
Testé sur un Raspberry Pi sous Raspbian Jessie.
- Installer
python3-pipetpython3-lxml(en plus de Python 3)sudo apt install python3-pip python3-lxml -y - Installer les dépendances
sudo pip3 install peewee requests requests_oauthlib py-trello pytz python-dateutil beautifulsoup4 - Clonner le projet
git clone https://github.com/mazelx/toitoimontoit.git - Créer les fichiers
parameters.jsonettrello.jsoncomme indiqué plus haut - Créer une tâche
cronpour lancer ce script régulièrement (dans mon cas toutes les 2h)crontab -e0 */2 * * * python3 /home/pi/toitoimontoit/main.py