- 13:38 123
- 21:16 lapin!!!
- 14:04 galette
- 09:14 22:37 :
- 14:01 Vu le nombre de messages en tribune, j'ai l'impression de prendre 2 ans d'un coup, là !!;)
- 14:00 merci Gui (car je suppose que c'est toi :) )
- 10:54 Bon anniversaire à Madame (un peu en retard, pour la deuxième année consécutive) :)
- 15:29 salut, ca farte ?
- 23:21 window.location = "URL
- 10:26 Hello. It is very kind for you to allow guests to post here (if it *is* possible) :)
Récupération de la liste des codes postaux français
14/07/10 à 01:31
Mise à jour du script afin de supprimer les caractères aléatoires injectés dans le source des pages de la Poste.
Maintenant, il est composé de 36909 entrées.
Merci à Thierry pour son commentaire instructif ![]()
21/01/10 à 23:36
Mise à jour du script suite aux modifications de la page de la Poste.
Avant cette modification, le fichier résultat était composé de 36 633 entrées.
Maintenant, il est composé de 36 804 entrées.
Merci à Laurent de m'avoir prévenu par email de ces changements.
23/01/09 à 18:54
Mise à jour du script suite aux modifications de la page de la Poste. Merci à Jean-Christophe de m'avoir prévenu par email de ces changements.
28/06/08 à 20:30
Quelques modifications du script et mise à jour de la liste des codes issus du script.
18/01/06 à 19:45
Voilà longtemps que je voulais vous faire partager ce petit script mais par manque de temps, il n'arrive que maintenant.
La problèmatique est simple :
Lorsque l'on développe certaines applications en interne pour le boulot, il arrive un moment (ou pas) où l'on a besoin de la liste des codes postaux français.
Et là, on cherche, on cherche encore et... on ne trouve pas ! (peut-être n'a t-on pas cherché au bon endroit d'ailleurs...)
La solution :
Écrire un script qui va chercher les codes postaux pour nous.
La source ? La Poste bien thûr !
Il suffit donc d'aller sur cette page et de récupérer un à un les codes postaux, par copier / coller....
ou alors, faire un script qui le fait pour nous ![]()
Le principe est simple : on ouvre un socket sur la page, on parse le résultat et on passe à une valeur suivante.
Je vous fournis donc ici le script Php qui m'a permis d'arriver à mes fins et ici, le fichier résultat.
Je ne sais pas si j'ai légalement le droit d'avoir fait cela, je ne sais pas si j'ai le droit de diffuser la solution pour le refaire.
Mais si ca peut servir à d'autres personnes, ce sera déjà bien ![]()
PS : Le fichier résultant contient plusieurs entrées ayant un code postal et une commune identique et c'est normal. Personnellement, j'ai exploité ce fichier via une base MySQL, ce qui permet d'éliminer les doublons d'une manière simple et rapide.
Commentaires
-
Dommage...
Beaucoup de temps perdu... suffit d'aller sur le site de l'INSEE y a tous les fichiers : codes postaux, villes, pays, catégories socio professionnelles, etc
-
?!
Yannick Torrès, le 19/01/06 à 22:09 :: RépondreJustement, j'ai parcouru le site de l'INSEE à la recherche de ces fichiers... et je n'ai rien trouvé.
Tu as des liens ?-
Encore mieux
J'ai mieux :
http://www.galichon.com/codesgeo/
Tu y trouveras les fichiers des codes postaux, villes, coordonnées, population...-
Encore mieux
Yannick Torrès, le 23/01/06 à 18:33 :: RépondreJe veux pas paraitre rabajoie mais est-ce fiable ?
Ce qui me plait dans ce que j'ai écris, c'est surtout que les données sont fiables parce que venant de La Poste. Donc, on peut les utiliser les yeux fermés sans se demander s'il n'y a pas une faute de frappe, une erreur quelconque, etc.
Et là, non seulement je donne le fichier résultat mais aussi la manière de le réaliser soi-même. Du coup, ca enlève tous les doutes posés par mes premières remarques.
-
-
-
-
Problème ..
J'ai l'impression que tu as enlevé trop de doublons ...
exemple 90200 correspond à plusieurs communes , 8 exactement ( d'après le site de la poste ), et on ne les voit plus ces communes dans ton fichier résultat :-//
( en fait je cherchais la liste exhaustive de toutes les communes de France )
Si tu peux juste changer ce point![[clin d'oeil]](http://www.keliglia.com/img/emoticon/wink.png)
Amicalement,
David-
exemple
Par exemple on ne voit pas Gyromagny en 90200..
Cela dit bon travail !-
en fait...
...pour un code postal, tu aurais pu afficher les listes des communes les unes à la lsuite des autres, ce qui permettait avec moins de lignes d'avoir des résultats encore plus complets par exemple
![[sourire]](http://www.keliglia.com/img/emoticon/smile.png)
-
en fait...
Yannick Torrès, le 01/04/06 à 14:23 :: RépondreJe me sers de ce script tous les jours au boulot et perso, je me suis aperçu qu'il manquait Neuville les dieppe dans mon résultat...
Je vais refaire un tour sur le script avec le manque que j'ai trouvé ainsi que les tiens.
On devrait arriver à quelque chose de bien complet![[clin d'oeil]](http://www.keliglia.com/img/emoticon/wink.png)
Merci pour le retour
-
-
Et si !
Yannick Torrès, le 12/04/06 à 12:37 :: RépondreJe suis en train de revérifier le script et....
Les 8 communes correspondant au code postal 90200 sont bien présentes dans le fichier résultat![[sourire]](http://www.keliglia.com/img/emoticon/smile.png)
Par contre, il reste le souci que j'avais identifié pour Neuville les dieppe...-
une BD acces
Je suis juste de passage. Voici un autre fichier (BD acces)
http://officesystem.access.free.fr/ex_codes_postaux.htm
38646 communes (donc un peu moins que toi) mais avec Neuville les dieppe
@+
-
Re : Et si !
pichon, le 31/01/07 à 11:01 :: RépondreJe sais pas l'intérêt de passer par une base de données => un tri sur un fichier plat aurait suffit
-
-
-
-
Elément de comparaison
Bonjour,
Si ca peut vous aider afin de comparer vos résultats, Sur le site de l'université de Sofia Antipolis
Même principe que pour le site de la poste...
-
bravo
straff, le 05/10/06 à 17:40 :: Répondregénial comme idée et mise en pratique
merci
-
Récupération de la liste des codes postaux français
Terence, le 03/01/07 à 14:52 :: RépondreUn grand grand merci pour ce script qui m'aide enormément!!!!!
-
Récupération de la liste des codes postaux français
Vaf, le 29/08/07 à 11:57 :: RépondreDéjà eu l'occasion de récupérer des données par le même principe.
Et ca me fait toujours bien rire...
Bien joué!
-
Récupération de la liste des codes postaux français
Yannick,
Merci pour tous ces codes, c'est sympa. J'ai vu d'autres sites, mais c'est la cata!
Par contre comment faire pour inclure devant des mots pour chaque code postal (par que je suis pas bon en informatique)!!!
Merci de ton aide, mon numéro est sur le site; bonne navigation.
J'attends de vos nouvelles.
-
Récupération de la liste des codes postaux français
"Le principe est simple : on ouvre un socket sur la page, on parse le résultat et on passe à une valeur suivante."
Hum, n'étant pas un spécialiste du langage php, j'avoue que cette explication me laisse sans voix !
Que faut il faire ?-
Re : Récupération de la liste des codes postaux français
Yannick Torrès, le 08/01/08 à 00:37 :: RépondreB'soir Mayeur,
Tu as à dispo le script Php et le fichier résultat.
Inutile donc de comprendre
Soit tu récupères le fichier php, tu le sauvegardes et tu le lances pour récupérer le résultat, soit tu récupères directement le fichier résultat.
Les liens vers ces 2 fichiers sont dans le billet.
Bon courage![[sourire]](http://www.keliglia.com/img/emoticon/smile.png)
-
Re : Récupération de la liste des codes postaux français
Pas une as de l'info non plus...
Comment fait-on pour lancer un fichier php, quel programme faut-il utiliser?
Et au final quel est le script php le plus fiable (doublons...)?
Merci pour ce post qui est vraiment tres utile!-
Re : Récupération de la liste des codes postaux français
Yannick Torrès, le 27/11/08 à 19:15 :: RépondreBonjour,
Pour lancer le script Php, il faut un interpréteur Php. Voir le site http://php.net pour plus d'informations.
Concernant les doublons, comme je le dis en bas du billet, c'est normal. Il suffit de l'exploiter via une base de données MySql.
Maintenant, sachant que ce script commence à prendre de l'age, il se peut que la page du site de laposte est changé. Dans un tel cas, il faudrait le modifier afin de refléter ces changements...
-
-
-
-
Récupération de la liste des codes postaux français
Claire, le 19/01/08 à 21:45 :: Répondremerci. Tu viens de m'enlever une belle épine du pied. J'avais justement un joli bug dans mon application du au fait que je n'avais pas a disposition les codes postaux.
-
J'ai mieux!!
Salut..Pas mal ton fichier mais completement incomplet..va a la poste et achete plutot le livre "CODE POSTAL"..il coute 1.50euros et plus complet..il te manque trop de ville.La mienne Pour commencé!
-
Re : J'ai mieux!!
Jean-Marc, le 30/01/08 à 16:52 :: RépondreT'es gentil Fred mais offre le plutot à ta grand-mère s'il elle s'ennuie elle pourra toujours le recopier dans un fichier à la mano ...
Comment tu veux qu'on puisse exploiter informatiquement parlant un bouquin ??? Gros malin va !![[clin d'oeil]](http://www.keliglia.com/img/emoticon/wink.png)
C'est pas mon genre de poster sur un forum quand c'est pas pour faire avancer les choses, mais là je n'ai pu me retenir de te faire savoir que ça serait pas mal que tu fasses pareil ! Et promis, si j'ai un truc béton, je monte le WebService qui va avec et je vous reposterais le l'URL, histoire d'avoir été contructif ...
Merci aux autres en tout cas![[clin d'oeil]](http://www.keliglia.com/img/emoticon/wink.png)
Jm
-
-
Récupération de la liste des codes postaux français
Salut,
Bien pratique ce petit script. Je l'ai remanié à ma sauce pour le rendre plus robuste et plus concis. Si ça peut servir à quelqu'un le voici :
<?PHP
function httpPost($host,$path,$query){
$handle=fsockopen($host,80);
fwrite($handle,"POST $path HTTP/1.1\r\nHost: $host\r\nContent-type: application/x-www-form-urlencoded\r\nUser-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)\r\nContent-length: ".strlen($query)."\r\nConnection: close\r\n\r\n".$query);
$result='';
if($handle!==false){
while(!feof($handle)){
$result.=fread($handle,4096);
}
fclose($handle);
}
return $result;
}
for($i=10;$i<999;$i++){
$result=httpPost(
'www.laposte.fr',
'/sna/rubrique.php3',
'id_rubrique=59&recalcul=oui&selCritere=CP&txtCP='.str_pad($i,3,'0',STR_PAD_LEFT)
);
preg_match_all("'<TD class=\"resultat\">
[0-9a-zA-Z&; -]*?)<\/TD>'",$result,$out,PREG_PATTERN_ORDER);
for($j=0;$j<count($out[1]);$j++){
$data=trim(ereg_replace('[^0-9A-Z]+',' ',html_entity_decode($out[1][$j],ENT_COMPAT,'UTF-8')));
list($zipCode,$city)=explode(' ',$data,2);
print("$zipCode : $city<br/>"
;
}
}
?>
Ludo.-
Re : Récupération de la liste des codes postaux français
Autre version avec déboulonnage :
function httpPost($host,$path,$query){
$handle=fsockopen($host,80);
fwrite($handle,"POST $path HTTP/1.1\r\nHost: $host\r\nContent-type: application/x-www-form-urlencoded\r\nUser-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)\r\nContent-length: ".strlen($query)."\r\nConnection: close\r\n\r\n".$query);
$result='';
if($handle!==false){
while(!feof($handle)){
$result.=fread($handle,4096);
}
fclose($handle);
}
return $result;
}
$data=array();
for($i=10;$i<20;$i++){
$result=httpPost(
'www.laposte.fr',
'/sna/rubrique.php3',
'id_rubrique=59&recalcul=oui&selCritere=CP&txtCP='.str_pad($i,3,'0',STR_PAD_LEFT)
);
preg_match_all("'<TD class=\"resultat\">
[0-9a-zA-Z&; -]*?)<\/TD>'",$result,$out,PREG_PATTERN_ORDER);
for($j=0;$j<count($out[1]);$j++){
$data[]=trim(ereg_replace('[^0-9A-Z]+',' ',html_entity_decode($out[1][$j],ENT_COMPAT,'UTF-8')));
}
}
$data=array_unique($data);
foreach($data as $item){
list($zipCode,$city)=explode(' ',$item,2);
print("$zipCode : $city<br/>"
;
}-
Re : Récupération de la liste des codes postaux français
Bonjour à tous.
Mon navigateur n'interprète pas correctement deux lignes du listing, j'ai deux émoticônes à la place de certains caractères.
La première ligne:
Après ceci preg_match_all("'<TD class=\"resultat\">
et avant ceci [0-9a-zA-Z&; -]*?)<\/TD>'",$result,$out,PREG_PATTERN_ORDER);
Ensuite la deuxième ligne qui se trouve à la fin:
Après ceci print("$zipCode : $city<br/>"
et avant ceci ;
}
Merci de me donner les caractères manquants.
Cordialement
Matthieu
-
Re : Récupération de la liste des codes postaux français
Re-bonjour, je pense que les caractères qui manque dans chaque ligne sont les suivants ( pour la première ligne et ) pour la deuxième ligne. Cependant rien ne fonctionne quand même. Serait-il possible de reçevoir le fichier dans ma BAL? Merci d'avance
zorba@orinfor.com
-
-
-
Récupération de la liste des codes postaux français
message pour Yannick Torrès : si tu passes sur le forum, ton code comme il est, super, cela m'a bien arranger.
je profite pour ajouter la manière (selon moi) de remplir en même temps une base mysql.
créer une table code_postaux par exemple dans votre base mysql (déjà créé
avec un ID, codepostal, ville.
dans le script de Yannick , au début du php créer votre lien de connection à votre base par un include, vers la fin du script , dans la condition else,
placer un explode : list($Codep,$Ville)=explode(' ',$tmp,2); (les variables doivent correspondre au champs de votre table code_postaux. Créer une requete d'insertion de données à votre table : $requete = "INSERT INTO code_postaux (codep, ville) VALUES ($codep, $ville)";
exécuter la requete : mysql_query($requete,$votrevariabledeconnection);
et pour finir, enregistrer votre fichier script et lancer. avec une bonne connexion le remplissage prendra ps trop de temps.
Merci encore Yannick
-
Manque les communes Paris, Lyon, Marseille...
Bonjour,
Il semble que le site de la poste demande le nom de la rue pour avoir le CP de Paris, Lyon, Marseille. Le script ne fonctionne donc pas pour les CP en 75 par exemple. Je n'ai pas eu le temps de vérifier si d'autres cas particuliers existent mais cela nous conduit à avoir une liste incomplète. Bonne idée le coup de PHP mais elle a ses limites.![[déçu]](http://www.keliglia.com/img/emoticon/sad.png)
-
Récupération de la liste des codes postaux français
Tof, le 12/02/10 à 11:58 :: RépondreMERCI A TOUS. C'est exactement ce que je cherchais (depuis un bon moment d'ailleurs).
C'est vraiment vraiment topissime votre travail !!!
merci !-
Re : Récupération de la liste des codes postaux français
tof, le 12/02/10 à 12:00 :: RépondreC'est juste dommage qu'il n'y ai pas un version minuscule avec accent...
mais bon, c'est déjà tellement cool![[sourire]](http://www.keliglia.com/img/emoticon/smile.png)
-
-
Récupération de la liste des codes postaux français
Bravo pour le travail. N'ayant pas de Php sous la main, j'ai entrepris de faire le même travail en script Bash, et une fois le travail fait, j'ai comparé nos 2 fichiers : j'arrive à 37182 codes postaux (au 15 février).
- Tu sembles laissé de côté plusieurs communes,
- Il y a aussi des lignes mal formées (code postal seul ou 2 communes sur la même ligne sans code postal)
- Il y a enfin des communes qui contiennent des caractères en trop (en hexadécimal ?)
J'ai regardé ton script, mais je ne suis pas assez bon en php pour trouver le problème.Quand tu enlèves les 5a8, cela doit correspondre aux caractères unicode représentant les é. De mon côté, j'utilise la commande iconv pour transformer le fichier utf-8 en encodage latin1.
Si tu le souhaites je peux te fournir le résultat de la commande DIFF sur nos 2 fichiers pour que tu aies la liste complète des différences et je tiens à la disposition de tous mes script bash.
Merci encore pour ton travail.-
Re : Récupération de la liste des codes postaux français
Salut,
Ouai moi je suis en effet interessé je cherche pour mon site une BDD (base de données) comportant toutes les villes de france (par code postale) en effet l'utilisateur entre son code postale et la ville s'affiche automatiquement le problème c 'est qu'en ce moment il me manque des code postales par exemple pour Lyon je dois rentrer 69000 mais 69001 69002... ne fonctionneront pas !!
Le site vous souhaitez le voir est ici (c'est un site de dons d'objet en ligne) : http://faites-vos-dons.fr/donner.php
Je cherche donc une base plus complète.
Ca serait donc cool si tu pouvais en effet faire passer ton fichier bien garni![[sourire]](http://www.keliglia.com/img/emoticon/smile.png)
Le plus cool ca serait que le fichier soit direct en sql (ou si quelqu'un dispose de cela..)
Sinon je pensais faire un petit programme qui trouvait le CP le plus proche de celui rentré mais ca va me prendre encore pas mal de temps. Merci
++-
Re : Récupération de la liste des codes postaux français
Voilà le script Bash réalisant le travail (téléchargeable sur Script de récupération des Codes Postaux français) :
#!/bin/bash
# Script : recupCP
# Rôle : récupère les codes postaux disponibles à l'URL
# http://www.laposte.fr/sna/rubrique.php3?id_rubrique=59
# Dépendances : curl, grep, iconv, sed, sort
# Auteur : Jean Henri
# Date : 16 février 2010
# Mel : henrij@saintjo.org
# Commentaires :
# Ce script se découpe en 3 parties qui s'enchainent
# mais peuvent être étudiées séparément
# étape 1 : récupération des pages HTML
# étape 2 : extraction des informations brutes dans les fichiers téléchargés
# et création d'un unique fichier
# étape 3 : suppression des informations inutiles
# et création d'un fichier final au format CSV
#
# L'étape 1 est l'étape qui prend le plus de temps : 2h30 (ADSL 2Mbps)
# L'étape 2 est réalisée en moins de 30 secondes
# L'étape 3 prend un peu plus d'une minute
#
# Ce script crée un répertoire nommé "res" pour stocker les fichiers
# téléchargés et utilise un certain nombre de fichier temporaires pour les
# différents traitements. Je vous conseille donc de l'exécuter dans un
# répertoire spécifique afin qu'il n'y ait pas de conflit avec vos propres
# fichiers.
# Un fichier log est créé pour avoir le détail des opérations effectuées
# Les fichiers téléchargés ne sont pas effacés à la fin du script (31 Mo)
# répertoire où seront stockés les fichiers HTML
REP_TEMP="./res/"
# extension des fichiers HTML récupérés
EXT_HTML=".html"
# fichier journal utilisé
FICHIER_LOG="recup.log"
# fichiers temporaires (ils seront supprimés à la fin du script)
FICHIER1="recup.001"
FICHIER2="recup.002"
FICHIER3="recup.003"
FICHIER4="recup.004"
FICHIER5="recup.005"
FICHIER6="recup.006"
FICHIER7="recup.007"
FICHIER8="recup.008"
# fichier final, au format CSV (valeurs séparées par des points-virgule)
# champ 1 : code postal
# champ 2 : ville
# champ 3 : champ facultatif, si il existe il vaut 1 pour indiquer que
# pour cette ville le code postal dépend de la rue
# le nom du fichier est de la forme cp_AAAA_MM_JJ-HHhMMmSSs.csv
# en utilisant la date et heure système au début du script
FICHIER_CSV="cp_`date +%Y_%m_%d-%Hh%Mm%Ss`.csv"
#
# ETAPE 1 : on télécharge tous les fichiers HTML des codes postaux
#
DATEDEB=`date`
echo "" >> $FICHIER_LOG
echo "Début de téléchargement des codes postaux : $DATEDEB" >> $FICHIER_LOG
echo -n "Etape 1 : "
# On va réaliser plusieurs fois l'opération de téléchargement
# afin d'élimininer les fichier incomplets
BOUCLE=true
while $BOUCLE
do
# à priori on suppose qu'on ne bouclera pas une autre fois...
BOUCLE=false
echo -n "|"
# on utilise un répertoire temporaire nommé res
if [[ ! -d $REP_TEMP ]]
then
mkdir $REP_TEMP
fi
# on veut récupérer tous les départements, y compris DOM-TOM
for DEP in `seq 10 999`
do
# on ajoute un zéro pour les nombres inférieurs à 100
if [[ $DEP -lt 100 ]]
then
DEPT="0$DEP"
else
DEPT=$DEP
fi
# si le fichier a déjà été téléchargé,
if [[ -f ${REP_TEMP}${DEPT}${EXT_HTML} ]]
then
# alors on vérifie qu'il est complet
LIGNE=`tail --lines=1 ${REP_TEMP}${DEPT}${EXT_HTML}`
# si la dernière ligne du fichier est la fin du html
if [[ "$LIGNE" == "</html>" ]]
then
# alors le fichier est complet, et on le ne télécharge pas à nouveau
RECUP=false
else
# sinon on veut le télécharger
RECUP=true
fi
else
# sinon on veut le télécharger
RECUP=true
fi
# si on veut télécharger le fichier
if $RECUP
then
# on le fait !
echo "Récupération de $DEPT.html" >> $FICHIER_LOG
curl -s -o ${REP_TEMP}${DEPT}${EXT_HTML} \
-d txtCP=$DEPT -d selCritere=CP \
http://www.laposte.fr/sna/rubrique.php3?id_rubrique=59&recalcul=oui
# il faudra donc reboucler pour l'opération de téléchargement,
# dès fois qu'il y aurait un problème.
BOUCLE=true
fi
done
# ATTENTION ! curl travaille en tâche de fond donc quand la boucle ci-dessus
# se termine les téléchargements continuent... un certain temps !
# on va afficher un point à l'écran toutes les 100 boucles
COMPTEUR=0
# est-ce que curl est dans la liste des processus ?
TEST=`ps | grep "curl" | tail --lines=1`
# tant que curl fonctionne
while [[ $TEST != "" ]]
do
# si on a bouclé 100 fois
if [[ $COMPTEUR -ge 100 ]]
then
# alors on affiche un point
echo -n "."
# et on remet le compteur à 0
COMPTEUR=0
else
# sinon on ajoute 1 au compteur
COMPTEUR=$(( $COMPTEUR + 1 ))
fi
# est-ce que curl est toujours dans la liste des processus ?
TEST=`ps | grep "curl" | tail --lines=1`
done
# ca y est curl a fini de tourner !
# Cela termine le TANT QUE contrôlé par la variable BOUCLE
done
# on est maintenant sûr que tous les fichiers ont été téléchargés correctement
echo ""
DATEFIN=`date`
echo "Fin de téléchargement des codes postaux : $DATEFIN" >> $FICHIER_LOG
echo "" >> $FICHIER_LOG
#
# ETAPE 2 : on extrait toutes les lignes contenant des codes postaux
# et on les place dans un seul fichier
#
DATEDEB=`date`
echo "" >> $FICHIER_LOG
echo "Début d'extraction des codes postaux : $DATEDEB" >> $FICHIER_LOG
echo " -> fichiers 010 à 999" >> $FICHIER_LOG
echo -n "Etape 2 : "
# si le fichier résultat existe déjà, on le supprime
if [[ -f ${FICHIER1} ]]
then
rm ${FICHIER1}
fi
# on récupère tous les départements
for DEP in `seq 10 999`
do
# si le numéro est inférieur à 100, on ajoute un zéro devant
if [[ $DEP -lt 100 ]]
then
DEPT="0$DEP"
else
DEPT=$DEP
fi
# un affichage pour faire patienter...
echo -n "$DEPT "
# si le fichier a été récupéré
if [[ -f ${REP_TEMP}${DEPT}${EXT_HTML} ]]
then
# alors on extrait les lignes contenant des codes postaux
cat ${REP_TEMP}${DEPT}${EXT_HTML} | grep "<div align='center'>" \
>> ${FICHIER1}
else
# sinon on le signale absent
echo " Fichier ${DEPT}${EXT_HTML} absent" >> $FICHIER_LOG
fi
done
echo ""
DATEFIN=`date`
echo "Fin d'extraction des codes postaux : $DATEFIN" >> $FICHIER_LOG
echo "" >> $FICHIER_LOG
#
# ETAPE 3 : on fait le ménage dans les lignes récupérées
# et on fabrique un fichier sans doublon au format CSV !
#
DATEDEB=`date`
echo "" >> $FICHIER_LOG
echo "Début de nettoyage des codes postaux : $DATEDEB" >> $FICHIER_LOG
echo -n "Etape 3 : "
# on convertit en latin1 pour éviter les problèmes d'accent avec sed
iconv -t utf-8 -f latin1 ${FICHIER1} > ${FICHIER2}
# on coupe les lignes avant toute fermeture de balise </div>
sed -e "s/<\/div>/\n<\/div>/g" ${FICHIER2} > ${FICHIER3}
# maintenant, on recherche les balises ouvrantes <div align='center'>
# et on remplace par un retour à la ligne
sed -e "s/^.*<div align='center'>/\n/" ${FICHIER3} > ${FICHIER4}
# on supprime toutes les lignes vides
sed "/^$/d" ${FICHIER4} > ${FICHIER5}
# on supprime toutes les lignes qui commencent par </div>
sed "/^<\/div>/d" ${FICHIER5} > ${FICHIER6}
# on s'occupe des villes dont le code postal dépend de la rue,
# ce qui sera signalé par un 3ème champ valant 1
sed -e "s/ .*$/;1/" ${FICHIER6} > ${FICHIER7}
# Normalement, chaque ligne contient soit un code postal, soit une ville
# Il faut donc relier les 2, MAIS ATTENTION :
# certaines villes ont plusieurs codes postaux,
# il faut donc faire un traitement spécifique?
if [[ -f ${FICHIER8} ]]
then
rm ${FICHIER8}
fi
#index <-- 0
INDEX=0
#Ce compteur sert à la barre de progression
COMPTEUR=0
echo -n "."
#pour chaque ligne du fichier faire
while read LIGNE
do
# on affiche un . toutes les 500 lignes
if [[ $COMPTEUR -ge 500 ]]
then
echo -n "."
COMPTEUR=0
else
COMPTEUR=$(( $COMPTEUR + 1 ))
fi
# si la ligne contient un entier (formée de 5 chiffres)
if [[ "$LIGNE" == [0-9][0-9][0-9][0-9][0-9] ]]
then
# numeros[index] <-- ligne
NUMERO[$INDEX]=$LIGNE
# index <-- index + 1
INDEX=$(( $INDEX + 1 ))
# sinon
else
# pour indexLigne <-- 0 à index-1 faire
for INDEXLIGNE in `seq 0 $(( $INDEX - 1 ))`
do
# ecrire numero[index];ligne
echo "${NUMERO[$INDEXLIGNE]};$LIGNE" >> ${FICHIER8}
# fin pour
done
# index <-- 0
INDEX=0
# fin si
fi
done < ${FICHIER7}
#fin pour
# on trie le fichier en éliminant les doublons
sort -u < ${FICHIER8} > ${FICHIER_CSV}
# on supprime tous les fichiers intermédiaires
# vous pouvez commenter ces 2 lignes pour en étudier le contenu
rm ${FICHIER1} ${FICHIER2} ${FICHIER3} ${FICHIER4}
rm ${FICHIER5} ${FICHIER6} ${FICHIER7} ${FICHIER8}
echo ""
DATEFIN=`date`
echo "Fin de nettoyage des codes postaux : $DATEFIN" >> $FICHIER_LOG
echo "" >> $FICHIER_LOG
#
# Fin du script recupCP
#
-
-
-
Récupération de la liste des codes postaux français
Petite question quant fait un copier coller de la liste des codes postaux français dans un fichier de type j'ai dans les memes cellules le code et le nom de la ville correspondant.
Petit astuce pour avoir dans deux cellules différentes un le code deux le nom de la ville.
Merci
-
Récupération de la liste des codes postaux français
GuB, le 16/06/10 à 17:12 :: RépondreCe fichier est meilleur que celui de galichon.com.
Par exemple Aix-en-Provence a pour codes 13090 et 13100 selon la rue. galichon.com ne donne que 13090.
Alors merci![[clin d'oeil]](http://www.keliglia.com/img/emoticon/wink.png)
Il y a cependant quelques bugs dans le fichier final concernant LIERES, LIETTRES, MILHAS, MIREMONT, PLAISANCE, POLASTRON, PONTGOUIN, POUPRY, RIBEYRET, ROCHEBRUNE, ST EULIEN, ST THIEBAULT, TANZAC-THAIRE du style :
62190-LIETTRES
LIERES-LIETTRES
62145-LIETTRES
au lieu de :
62190-LIERES
62145-LIETTRES
Et un : "a1431800-VILLENEUVE DE RIVIERE" au lieu de "31800-VILLENEUVE DE RIVIERE" (que fait ce "a14" ?)
A noter que je n'ai pas testé le script, juste le fichier final.
Par contre voici un "one liner" fait en perl qui j'ai utiliser pour corriger vite fait le fichier et enlever les doublons. Je ne sais pas si ca interessera grand monde tellement c'est moche mais voila quand même :
while (<>
{ chomp; if (/(\d{5})-(.*)/) { $h{"$c - $v\n"} = 1 if ($c); $c = $1; $v = $2; } elsif (/(.*)-(.*)/) { $v = $1; } }; print (sort keys %h)
-
Récupération de la liste des codes postaux français
Pour celles et ceux que ça intéresse, je me suis inspiré de la même idée et j'ai développé une petite application en flex qui se charge de construire une base de données sqlite qui associe communes, code insee, code postal et population.
Explications, résultats, démo et télechargements ici :
http://lamemelongueurdonde.com/blog/?cat=24
Cordialement,
Laurent.
-
Récupération de la liste des codes postaux français
Bonjour
Après étude rapide du post et des commentaires, il semble qu'il y ait un problème dans l'extraction des enregistrements dont les villes contiennent un tiret (-).
Je me suis inpiré du commentaire de GuB, le 16/06/10 à 17:12 :
Début de citation (Extrait)
...
Il y a cependant quelques bugs dans le fichier final concernant LIERES, LIETTRES, MILHAS, MIREMONT, PLAISANCE, POLASTRON, PONTGOUIN, POUPRY, RIBEYRET, ROCHEBRUNE, ST EULIEN, ST THIEBAULT, TANZAC-THAIRE du style :
62190-LIETTRES
LIERES-LIETTRES
62145-LIETTRES
au lieu de :
62190-LIERES
62145-LIETTRES
Et un : "a1431800-VILLENEUVE DE RIVIERE" au lieu de "31800-VILLENEUVE DE RIVIERE" (que fait ce "a14" ?)
A noter que je n'ai pas testé le script, juste le fichier final.
Fin de citation
Ayant copié ton fichier de résultat sur un tableur, j'ai isolé les codes postaux contenant des lettres. Je tombe sur les mêmesrésultat que ci-dessus.
Ensuite, j'ai isolé les villes contenan des tirets (-)
Il n'y en a pas 'autres que celles posant problème.
J'en déduit qu'il y a un poblème lors de l'extraction des dnnées pour les villes contenant des tirets (-).
Je ne sais pas programmer, donc je ne pourrais pas t'aider à corriger ton script.
En espérant que celà puisse t'aider si tu veux le corriger...
Et bravo et merci pour le travail réalisé.-
Re : Récupération de la liste des codes postaux français
Yannick Torrès, le 14/07/10 à 01:44 :: RépondreScript mis à jour (liste comprise).
Merci Thierry![[clin d'oeil]](http://www.keliglia.com/img/emoticon/wink.png)
-
-
Récupération de la liste des codes postaux français
Salut et tout d'abord bravo pour ton énorme travail! ne connaissant pas les script... j'aimerai savoir si y'aurai moyen en plus des code postaux d'avoir aussi les cedex? par exemple:
01150*LAGNIEU
01151 LAGNIEU CEDEX
01152 LAGNIEU CEDEX
01153 LAGNIEU CEDEX
01154 LAGNIEU CEDEX
01155 LAGNIEU CEDEX
01156 LAGNIEU CEDEX
01157 LAGNIEU CEDEX
01158 LAGNIEU CEDEX
01159 LAGNIEU CEDEX
Merci d'avance![[clin d'oeil]](http://www.keliglia.com/img/emoticon/wink.png)
