Skip to content

0x6e69636f/api-sites-immo

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#API Sites Immobilier

Ce script récupère les annonces immobilières de plusieurs sites français : Se Loger, Le Bon Coin, de Particulier à Particulier et Logic Immo.

Il est basé sur le script Un toit pour caramel créé par Axel Leroy lui même inspiré par VikParuchuri/apartment-finder qui récupère les annonces immoblières pour les aggréger dans un tableau Trello.

Ce projet reprend une grosse partie du code de Un toit pour caramel et l'adapte pour en faciliter l'usage de manière plus générale (#UnToitPourCaramel étant focalisé sur l'import des annonces dans un tableau Trello). La documentation ci-dessous est en grande partie reprise depuis le très complet fichier original.

Pré-requis

Paramétrer le script pour ses besoins

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-providers spécifie les fournisseurs d'annonces selectionnées :
  • cities contient les villes, avec leur nom, code postal puis le code INSEE utilisé par SeLoger,
  • price, surface, rooms et bedrooms sont donc respectivement le prix, la surface, le nombre de pièces et le nombre de chambres avec les bornes minimales et maximales,
  • leboncoin contient les paramètres propres à LeBonCoin :
    • c représente la catégorie des annonces :
      • 9 pour les ventes immobilières,
      • 10 pour les locations,
      • 11 pour les collocations.
    • ret permet de filtrer le type de bien : (optionnel)
      • 1 pour les maisons,
      • 2 pour les appartements,
      • 3 pour les terrains,
      • 4 pour les parkings,
      • 5 pour les autres.
    • f permet de filtrer le type d'annonceur : (optionnel)
      • p pour les particuliers
      • c pour les professionnels
    • furn permet de choisir si un bien est meublé 1 ou non 2. (optionnel)
    • q représente le contenu du champ de recherche. (optionnel)
  • seloger contient les paramètres propres à SeLoger :
    • idtt représente la catégorie des annonces :
      • 1 pour les locations,
      • 2 pour les ventes.
    • idtypebien représente le type de bien : (optionnel)
      • 1 pour les appartements,
      • 2 pour les maisons et villas,
      • 3 pour les parkings et boxs,
      • 4 pour les terrains,
      • 6 pour les boutiques,
      • 7 pour les locaux,
      • 8 pour les bureaux,
      • 9 pour les lofts et ateliers.
    • getDtCreationMax=1 est requis par l'API.
  • pap contient les paramètres propres à PAP :
    • recherche[produit] permet de préciser si l'on cherche une location ou une vente,
    • recherche[typesbien][] permet de préciser le type de bien cherché.
    • recherche[tags][] permet de renseigner des critères avancés : (optionnel)
      • meuble et vide
      • longue-duree et courte-duree
      • duplex-triplex
      • plain-pied et dernier-etage
      • piscine
      • balcon-terrasse
      • garages-parking
      • acces-handicape
  • logic-immo contient les paramètres propres à Logic Immo :
    • domain permet 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.

Déploiement sur un Raspberry Pi

Testé sur un Raspberry Pi sous Raspbian Jessie.

  1. Installer python3-pip et python3-lxml (en plus de Python 3)
    sudo apt install python3-pip python3-lxml -y
    
  2. Installer les dépendances
    sudo pip3 install peewee requests requests_oauthlib pytz python-dateutil beautifulsoup4
    
  3. Clonner le projet
    git clone https://github.com/axeleroy/untoitpourcaramel.git
    
  4. Créer une tâche cron pour lancer ce script régulièrement (dans mon cas toutes les 2h)
    crontab -e
    
    0 */2 * * * python3 /home/pi/untoitpourcaramel/main.py
    

Le processus d'ingénierie inversée

Puisque les sites exploités ne proposent pas publiquement d'API permettant de récupérer les annonces, l'auteur du script original a étudié les requêtes effectuées et les réponses reçues par les applications Android de ces sites à l'aide de Packet Capture.

screenshot_2017-06-06-21-07-33

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.

2017 jun 06 21-13-36

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

About

API Sites Immobiliers français

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%