🏠 Guide Complet - API Logements Boaz Housing
📋 Introduction
Ce guide vous explique comment ajouter des logements à la plateforme Boaz Housing via des requêtes API, même si vous n'avez jamais programmé !
Ce que vous allez pouvoir faire :
- Ajouter des logements automatiquement via script
- Vérifier si un logement existe déjà
- Lister les logements existants
- Modifier ou supprimer des logements
URL de l'API
| https://api-housing.boaz-study.tech/api/logements/
|
Méthodes HTTP
- POST : Créer un nouveau logement
- GET : Récupérer des logements
- PUT : Modifier un logement existant
- DELETE : Supprimer un logement
🏗️ Structure d'un Logement
Champs Obligatoires ✅
| {
"titre": "Appartement 2 pièces centre-ville",
"adresse": "15 Rue de la Paix, Paris",
"ville": "Paris",
"code_postal": "75001",
"loyer": 850.00
}
|
Champs Optionnels ⚪
| {
"description": "Appartement lumineux avec balcon, proche transports",
"pays": "France",
"montant_charges": 80.00,
"coordonnees_gps": "long:2.3522,lat:48.8566,alt:0",
"cood_gps_standart": "48.8566,2.3522",
"statut": "disponible",
"author_id": 123
}
|
Exemple Complet
1
2
3
4
5
6
7
8
9
10
11
12
13 | {
"titre": "Appartement 2 pièces centre-ville",
"description": "Appartement lumineux avec balcon, proche transports",
"adresse": "15 Rue de la Paix, Paris",
"ville": "Paris",
"code_postal": "75001",
"pays": "France",
"loyer": 850.00,
"montant_charges": 80.00,
"coordonnees_gps": "long:2.3522,lat:48.8566,alt:0",
"cood_gps_standart": "48.8566,2.3522",
"statut": "disponible"
}
|
📝 Règles de Validation
Titre
- Minimum : 3 caractères
- Maximum : 200 caractères
- Exemples valides :
- ✅ "Studio meublé"
- ✅ "Appartement 3 pièces avec jardin"
- ❌ "T2" (trop court)
Adresse
- Minimum : 5 caractères
- Maximum : 500 caractères
- Exemples valides :
- ✅ "15 Rue de la Paix, 75001 Paris"
- ✅ "123 Avenue des Champs-Élysées"
Ville
- Minimum : 2 caractères
- Maximum : 100 caractères
- Format : Lettres, espaces, tirets, apostrophes uniquement
- Exemples valides :
- ✅ "Paris"
- ✅ "Saint-Denis"
- ✅ "L'Haÿ-les-Roses"
- ❌ "Paris123" (chiffres interdits)
Code Postal
- Formats acceptés :
- 🇫🇷 France :
75001, 13000
- 🇧🇪 Belgique :
1000, 2000
- 🇨🇭 Suisse :
1200, 8000
- 🇨🇦 Canada :
H3A 1A1
- 🇺🇸 USA :
90210, 10001-1234
Loyer
- Minimum : 0.01€
- Maximum : 50,000€
- Format : Nombre décimal (ex: 850.50)
Charges
- Minimum : 0€
- Maximum : 10,000€
- Défaut : 0€ si non spécifié
Statut
"disponible" (défaut)
"occupe"
"maintenance"
Pays
Pays supportés :
- France, Belgique, Suisse, Luxembourg
- Canada, USA, Etats-Unis
- Allemagne, Italie, Espagne
🚀 Utilisation Pratique
1. Créer un Logement
Requête cURL (Terminal)
1
2
3
4
5
6
7
8
9
10
11
12
13 | curl -X POST "https://api-housing.boaz-study.tech/api/logements/" \
-H "Content-Type: application/json" \
-d '{
"titre": "Studio meublé centre-ville",
"description": "Studio lumineux de 25m², entièrement meublé",
"adresse": "25 Boulevard Saint-Michel, 75005 Paris",
"ville": "Paris",
"code_postal": "75005",
"pays": "France",
"loyer": 950.00,
"montant_charges": 120.00,
"statut": "disponible"
}'
|
Réponse de Succès
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | {
"id": 456,
"titre": "Studio meublé centre-ville",
"description": "Studio lumineux de 25m², entièrement meublé",
"adresse": "25 Boulevard Saint-Michel, 75005 Paris",
"ville": "Paris",
"code_postal": "75005",
"pays": "France",
"loyer": 950.00,
"montant_charges": 120.00,
"montant_total": 1070.00,
"statut": "disponible",
"author_id": 2,
"author": {
"id": 2,
"nom": "Dupont",
"prenom": "Jean",
"email": "jean.dupont@example.com",
"role": "ADMIN"
},
"created_at": "2024-01-15T10:30:00Z",
"updated_at": null
}
|
2. Vérifier si un Logement Existe
| curl "https://api-housing.boaz-study.tech/api/logements/check-existence?adresse=25%20Boulevard%20Saint-Michel&ville=Paris"
|
Réponse si Existe
1
2
3
4
5
6
7
8
9
10
11
12
13 | {
"exists": true,
"logement": {
"id": 456,
"titre": "Studio meublé centre-ville",
"adresse": "25 Boulevard Saint-Michel, 75005 Paris",
"ville": "Paris",
"loyer": 950.00,
"montant_charges": 120.00,
"montant_total": 1070.00,
"statut": "disponible"
}
}
|
Réponse si N'existe Pas
| {
"exists": false,
"logement": null
}
|
3. Lister Tous les Logements
| curl "https://api-housing.boaz-study.tech/api/logements/"
|
4. Lister Logements Disponibles Uniquement
| curl "https://api-housing.boaz-study.tech/api/logements/disponibles"
|
5. Lister Logements du Parc (Non-automatiques)
| curl "https://api-housing.boaz-study.tech/api/logements/parc"
|
6. Récupérer un Logement Spécifique
| curl "https://api-housing.boaz-study.tech/api/logements/456"
|
7. Modifier un Logement
| curl -X PUT "https://api-housing.boaz-study.tech/api/logements/456" \
-H "Content-Type: application/json" \
-d '{
"loyer": 980.00,
"description": "Studio lumineux de 25m², entièrement rénové"
}'
|
8. Supprimer un Logement
| curl -X DELETE "https://api-housing.boaz-study.tech/api/logements/456"
|
🐍 Scripts Python Prêts à Utiliser
Script 1 : Ajouter un Logement Simple
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 | import requests
import json
# Configuration
API_URL = "https://api-housing.boaz-study.tech/api/logements/"
# Données du logement
logement_data = {
"titre": "Appartement 3 pièces familial",
"description": "Appartement spacieux avec 2 chambres, salon et cuisine équipée",
"adresse": "45 Avenue de la République, 75011 Paris",
"ville": "Paris",
"code_postal": "75011",
"pays": "France",
"loyer": 1200.00,
"montant_charges": 150.00,
"statut": "disponible"
}
# Envoi de la requête
try:
response = requests.post(
API_URL,
headers={"Content-Type": "application/json"},
json=logement_data
)
if response.status_code == 200:
logement_cree = response.json()
print(f"✅ Logement créé avec succès !")
print(f"ID: {logement_cree['id']}")
print(f"Titre: {logement_cree['titre']}")
print(f"Montant total: {logement_cree['montant_total']}€")
else:
print(f"❌ Erreur: {response.status_code}")
print(f"Message: {response.text}")
except Exception as e:
print(f"❌ Erreur de connexion: {e}")
|
Script 2 : Ajouter Plusieurs Logements
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 | import requests
import json
import time
# Configuration
API_URL = "https://api-housing.boaz-study.tech/api/logements/"
# Liste de logements à ajouter
logements = [
{
"titre": "Studio étudiant Belleville",
"description": "Petit studio parfait pour étudiant, quartier vivant",
"adresse": "12 Rue de Belleville, 75020 Paris",
"ville": "Paris",
"code_postal": "75020",
"loyer": 650.00,
"montant_charges": 80.00
},
{
"titre": "T2 moderne Montparnasse",
"description": "Appartement rénové avec balcon, proche gare",
"adresse": "33 Boulevard Montparnasse, 75015 Paris",
"ville": "Paris",
"code_postal": "75015",
"loyer": 1050.00,
"montant_charges": 120.00
},
{
"titre": "Maison individuelle Banlieue",
"description": "Maison 4 pièces avec jardin, parking privé",
"adresse": "18 Rue des Lilas, 94100 Saint-Maur-des-Fossés",
"ville": "Saint-Maur-des-Fossés",
"code_postal": "94100",
"loyer": 1800.00,
"montant_charges": 200.00
}
]
# Fonction pour ajouter un logement
def ajouter_logement(logement_data):
try:
# Vérifier d'abord si le logement existe
check_url = f"https://api-housing.boaz-study.tech/api/logements/check-existence"
check_params = {
"adresse": logement_data["adresse"],
"ville": logement_data["ville"]
}
check_response = requests.get(check_url, params=check_params)
if check_response.status_code == 200 and check_response.json().get("exists"):
print(f"⚠️ Logement déjà existant: {logement_data['titre']}")
return False
# Créer le logement
response = requests.post(
API_URL,
headers={"Content-Type": "application/json"},
json=logement_data
)
if response.status_code == 200:
logement = response.json()
print(f"✅ Créé: {logement['titre']} (ID: {logement['id']})")
return True
else:
print(f"❌ Erreur pour '{logement_data['titre']}': {response.text}")
return False
except Exception as e:
print(f"❌ Erreur connexion pour '{logement_data['titre']}': {e}")
return False
# Traitement de la liste
print(f"🏠 Ajout de {len(logements)} logements...")
print("-" * 50)
succes = 0
for i, logement in enumerate(logements, 1):
print(f"[{i}/{len(logements)}] {logement['titre']}")
if ajouter_logement(logement):
succes += 1
# Pause entre les requêtes pour éviter la surcharge
time.sleep(0.5)
print("-" * 50)
print(f"🎯 Résultat: {succes}/{len(logements)} logements ajoutés avec succès")
|
Script 3 : Ajouter Logements depuis Fichier JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 | import requests
import json
import time
# Configuration
API_URL = "https://api-housing.boaz-study.tech/api/logements/"
JSON_FILE = "logements.json" # Nom de votre fichier JSON
def lire_logements_json(fichier_json):
"""Lit les logements depuis un fichier JSON"""
try:
with open(fichier_json, 'r', encoding='utf-8') as file:
logements = json.load(file)
if not isinstance(logements, list):
print(f"❌ Le fichier JSON doit contenir une liste de logements")
return []
print(f"📁 {len(logements)} logements lus depuis {fichier_json}")
return logements
except FileNotFoundError:
print(f"❌ Fichier {fichier_json} introuvable")
return []
except json.JSONDecodeError as e:
print(f"❌ Erreur format JSON: {e}")
return []
except Exception as e:
print(f"❌ Erreur lecture JSON: {e}")
return []
def verifier_existence_logement(adresse, ville):
"""Vérifie si un logement existe déjà"""
try:
check_url = "https://api-housing.boaz-study.tech/api/logements/check-existence"
params = {"adresse": adresse, "ville": ville}
response = requests.get(check_url, params=params, timeout=10)
if response.status_code == 200:
return response.json().get("exists", False)
return False
except:
return False
def ajouter_logement_api(logement_data):
"""Ajoute un logement via l'API"""
try:
response = requests.post(
API_URL,
headers={"Content-Type": "application/json"},
json=logement_data,
timeout=15
)
if response.status_code == 200:
return True, response.json()
else:
try:
error_details = response.json()
return False, f"Erreur {response.status_code}: {error_details.get('detail', response.text)}"
except:
return False, f"Erreur {response.status_code}: {response.text}"
except Exception as e:
return False, str(e)
# Programme principal
if __name__ == "__main__":
print("🏠 Import de logements depuis JSON")
print("=" * 50)
# Lire le fichier JSON
logements = lire_logements_json(JSON_FILE)
if not logements:
print("❌ Aucun logement à traiter")
exit()
# Traiter chaque logement
succes = 0
echecs = 0
doublons = 0
for i, logement in enumerate(logements, 1):
titre = logement.get('titre', 'Sans titre')
print(f"\n[{i}/{len(logements)}] {titre}")
# Vérifier l'existence
if verifier_existence_logement(logement.get('adresse'), logement.get('ville')):
print(f" ⚠️ Logement déjà existant - Ignoré")
doublons += 1
continue
# Créer le logement
succes_api, resultat = ajouter_logement_api(logement)
if succes_api:
print(f" ✅ Créé avec l'ID: {resultat.get('id')}")
print(f" 💰 Total: {resultat.get('montant_total')}€")
succes += 1
else:
print(f" ❌ Échec: {resultat}")
echecs += 1
# Pause entre requêtes
time.sleep(0.5)
print("\n" + "=" * 50)
print(f"🎯 RÉSULTAT FINAL:")
print(f" ✅ Succès: {succes}")
print(f" ❌ Échecs: {echecs}")
print(f" ⚠️ Doublons ignorés: {doublons}")
print(f" 📊 Total: {len(logements)}")
|
Format du fichier JSON (logements.json) :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | [
{
"titre": "Studio centre-ville",
"description": "Studio meublé 20m²",
"adresse": "15 Rue du Commerce, Lyon",
"ville": "Lyon",
"code_postal": "69002",
"pays": "France",
"loyer": 720.00,
"montant_charges": 90.00,
"statut": "disponible"
},
{
"titre": "T2 Belleville",
"description": "Appartement lumineux",
"adresse": "8 Boulevard de Belleville, Paris",
"ville": "Paris",
"code_postal": "75020",
"pays": "France",
"loyer": 980.00,
"montant_charges": 110.00,
"statut": "disponible"
}
]
|
⚠️ Gestion des Erreurs
Erreurs Communes
400 - Données Invalides
| {
"detail": [
{
"type": "value_error",
"loc": ["body", "loyer"],
"msg": "Le loyer doit être supérieur à 0",
"input": 0
}
]
}
|
409 - Logement Déjà Existant
| {
"detail": "Un logement existe déjà à cette adresse: 15 Rue de la Paix, Paris"
}
|
| {
"detail": [
{
"type": "missing",
"loc": ["body", "titre"],
"msg": "Field required"
}
]
}
|
Codes de Réponse HTTP
- 200 : Succès
- 400 : Données invalides
- 404 : Logement non trouvé
- 409 : Conflit (logement déjà existant)
- 422 : Erreur de validation
- 500 : Erreur serveur
🔧 Outils Recommandés
1. Pour Tester (Débutants)
- Postman : Interface graphique pour tester les API
- Insomnia : Alternative à Postman
- curl : Outil en ligne de commande (inclus sur Mac/Linux)
2. Pour Automatiser
- Python +
requests : Scripts personnalisés
- Node.js +
axios : Pour JavaScript
- PowerShell : Sur Windows
- JSON : Format natif et recommandé de l'API ⭐
- Structures de données : Arrays et objects JavaScript/Python
- Éditeurs JSON : Visual Studio Code, JSONLint pour validation
📞 Support et Assistance
Swagger UI (Documentation Interactive)
| https://api-housing.boaz-study.tech/docs
|
Ressources Utiles
✨ Conseils Pro
- Ajoutez une pause de 0.5s entre les requêtes
- Vérifiez l'existence avant de créer
- Utilisez des lots de 50 logements maximum
2. Bonnes Pratiques
- Validez vos données avant envoi
- Gardez une sauvegarde de vos fichiers
- Testez avec 1-2 logements d'abord
- Surveillez les logs d'erreur
3. Sécurité
- Ne partagez jamais vos scripts avec des clés
- Utilisez HTTPS uniquement
- Validez toujours les adresses
🎯 Exemples Rapides
Ajouter UN logement rapidement :
| curl -X POST "https://api-housing.boaz-study.tech/api/logements/" \
-H "Content-Type: application/json" \
-d '{"titre":"Test Studio","adresse":"1 Rue Test, Paris","ville":"Paris","code_postal":"75001","loyer":800}'
|
Vérifier si existe :
| curl "https://api-housing.boaz-study.tech/api/logements/check-existence?adresse=1%20Rue%20Test&ville=Paris"
|
Voir tous les logements :
| curl "https://api-housing.boaz-study.tech/api/logements/"
|
🏡 Bonne chance avec vos ajouts de logements ! Cette API est prête à recevoir tous vos biens immobiliers. 🚀