Portrait de Patrice GADEGBEPatrice GADEGBE

Huitivi

Huitivi, présenté à l’utilisateur sous le nom de Miadenou, est un prototype d’application d’annonces immobilières pour le Togo, qui permet de chercher un bien à vendre ou à louer selon le lieu, le type, le budget et quelques critères, puis de contacter l’opérateur.

Rôle
Auteur unique de l’API et de l’application
Période
Février et mars 2025
État
Prototype. Prototype, version 0.0.1
Technologies
Django 4.2, Django REST Framework, PostgreSQL 15, Flutter, Google Maps
Dépôts
Deux
Architecture de HuitiviUne application Flutter interroge Google Maps pour les lieux et la carte, puis appelle une API Django servie par nginx et Daphne, qui enregistre ses données dans PostgreSQL. Les annonces sont saisies dans l’administration de Django.ApplicationFlutter, flutter_bloc14 pagesAPIDjango 4.2, REST Frameworksaisie dans l’administrationPostgreSQL 15annonces, médias, favorisHTTPS, jetonORMGoogle Mapslieux et carte
Figure 1. Architecture de Huitivi. Les lieux sont résolus en coordonnées par l’application, avant que la recherche ne parte vers l’API.

Contexte

L’application s’adresse à une personne qui cherche un logement, un bureau, un commerce ou un terrain au Togo. Elle compose sa recherche en quelques écrans, consulte les résultats en liste ou sur une carte, conserve des favoris, puis contacte l’opérateur par téléphone, par SMS ou par WhatsApp. Les annonces sont saisies par l’opérateur dans l’administration de Django, l’application ne proposant pas de formulaire de dépôt.

Le projet représente quatre semaines de travail, en février et en mars 2025, et il n’a pas été poursuivi depuis. Il s’agit donc d’un prototype.

Problème

Une recherche immobilière porte d’abord sur un lieu, et l’utilisateur attend qu’un bien situé à quelques kilomètres de l’endroit qu’il a nommé lui soit proposé. Une recherche par rayon suppose d’ordinaire une base de données spatiale, que le prototype ne justifiait pas d’installer. Le modèle prévoit par ailleurs de réserver les visites virtuelles à ceux qui les ont achetées, tout en signalant leur existence à tous.

Réponse apportée

Une recherche en un seul document

Les six écrans de recherche, qui portent sur la transaction, le type de bien, les lieux, la surface, le budget et les critères, remplissent un même document de filtres, que l’application envoie à un seul point d’accès. Chaque champ y est facultatif, et le serveur applique tour à tour ceux qu’il reçoit. La dernière recherche et ses résultats sont conservés sur le téléphone, si bien qu’ils sont retrouvés à la réouverture de l’application.

Un rayon sans base spatiale

L’application résout chaque lieu choisi en coordonnées et les joint à la recherche. Le serveur filtre d’abord en SQL sur les autres critères, puis ne retient que les annonces situées à moins de dix kilomètres de l’un des lieux, en calculant la distance géodésique en Python et en passant à l’annonce suivante dès qu’un lieu convient.

for listing in listings:
    geolocation = listing.geolocation
    latitude = geolocation.lat
    longitude = geolocation.lon
    for location in locations:
        location_latitude = location['latitude']
        location_longitude = location['longitude']
        distance = geodesic((latitude, longitude),
                            (location_latitude, location_longitude)).kilometers
        if distance <= 10:
            result.append(listing)
            break
listings = result
Extrait 1. Filtrage par distance, appliqué en Python après les filtres SQL.

Des médias à trois niveaux

Les photographies, les vues panoramiques à 360 degrés et les vidéos sont trois tables distinctes. L’API indique toujours si une annonce possède une vue panoramique ou une vidéo, mais n’en transmet les adresses qu’à l’utilisateur qui détient l’abonnement correspondant. L’application peut ainsi afficher une vignette verrouillée sans jamais recevoir ce qu’elle protège.

Limites et perspectives

Le calcul des distances en Python, de même que le tri au prix par mètre carré, convient à quelques dizaines d’annonces et non à quelques milliers ; une base spatiale deviendrait nécessaire bien avant ce seuil. Le rayon de dix kilomètres est fixé dans le code et la recherche n’est pas paginée.

L’achat d’une visite virtuelle n’est par ailleurs qu’une maquette : la feuille de paiement n’est reliée à aucun prestataire, et un abonnement ne peut être créé que dans l’administration. La vidéo ne dispose pas encore de lecteur. Le prototype ne comporte enfin aucun test, et il n’a pas été publié sur les magasins d’applications.

Retour aux autres projets