Récupération de la liste des codes postaux français

18/01/06 à 19:45 :: Yannick Torrès
Catégorie : php

28/06/08 à 20:30
Quelques modifications du script et mise à jour de la liste des codes issus du script mis à jour.

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 [sourire]

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 [clin d'oeil]

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...
    Zola2 [@], le 19/01/06 à 21:56 :: Répondre

    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épondre

      Justement, 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
        Zola2 [@], le 23/01/06 à 13:05 :: Répondre

        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épondre

          Je 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.

        • Re : Encore mieux
          georges [@], le 09/03/07 à 18:09 :: Répondre

          super l'astuce , merci pour l'info

    • bravo
      frantz [@], le 16/10/06 à 15:30 :: Répondre

      Bel exercice pratique de PhP et même si le résultat peut s'obtenir autrement c'est un bel exemple d'utilisation astucieuse d'internet.

  • Problème ..
    site David [@], le 01/04/06 à 10:50 :: Répondre

    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]

    Amicalement,
    David

    • exemple
      site David [@], le 01/04/06 à 10:58 :: Répondre

      Par exemple on ne voit pas Gyromagny en 90200..

      Cela dit bon travail !

      • en fait...
        site David [@], le 01/04/06 à 11:01 :: Répondre

        ...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]

        • en fait...
          Yannick Torrès, le 01/04/06 à 14:23 :: Répondre

          Je 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]

          Merci pour le retour

      • Et si !
        Yannick Torrès, le 12/04/06 à 12:37 :: Répondre

        Je 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]

        Par contre, il reste le souci que j'avais identifié pour Neuville les dieppe...

        • une BD acces
          kopeto [@], le 13/12/06 à 18:31 :: Répondre

          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épondre

          Je sais pas l'intérêt de passer par une base de données => un tri sur un fichier plat aurait suffit

  • bravo
    straff, le 05/10/06 à 17:40 :: Répondre

    gé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épondre

    Un grand grand merci pour ce script qui m'aide enormément!!!!!

  • Récupération de la liste des codes postaux français
    site Vaf, le 29/08/07 à 11:57 :: Répondre

    Dé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
    site Philippe [@], le 31/10/07 à 18:40 :: Répondre

    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
    mayeur [@], le 07/01/08 à 19:52 :: Répondre

    "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épondre

      B'soir Mayeur,

      Tu as à dispo le script Php et le fichier résultat.

      Inutile donc de comprendre [clin d'oeil] 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]

  • Récupération de la liste des codes postaux français
    Claire, le 19/01/08 à 21:45 :: Répondre

    merci. 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!!
    Fred [@], le 30/01/08 à 09:57 :: Répondre

    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épondre

      T'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]

      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]

      Jm

  • Récupération de la liste des codes postaux français
    site Ludo [@], le 06/02/08 à 16:21 :: Répondre

    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\">[cri][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/>"[clin d'oeil];
    }
    }
    ?>

    Ludo.

    • Re : Récupération de la liste des codes postaux français
      site Ludo [@], le 06/02/08 à 16:27 :: Répondre

      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\">[cri][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/>"[clin d'oeil];
      }

      • Re : Récupération de la liste des codes postaux français
        Matthieu [@], le 13/05/08 à 12:30 :: Répondre

        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
        Matthieu [@], le 13/05/08 à 13:04 :: Répondre

        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

        • Re : Récupération de la liste des codes postaux français
          site Ludo [@], le 24/05/08 à 10:35 :: Répondre

          Bonjour !

          Je viens de mettre le code source en ligne : http://www.ludosoft.fr/data/codepostaux.php5.txt

          Enjoy [clin d'oeil]

  • Récupération de la liste des codes postaux français
    savannah [@], le 15/07/08 à 00:15 :: Répondre

    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éé[clin d'oeil] 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

promotion

Ne jamais exagérer le mal qu'on peut faire aux autres. Leur laisser ce plaisir.

Daniel Pennac

Tribune

  • 17:04 Bon anniversaire à Madame (un peu en retard) :)
  • 15:32 19:48 :
  • 19:02 plop
  • 15:04 trop classe
  • 21:56 félicitations Lapin ! j'espère que tu as fété ça au champagne ;)
  • 20:51 URL
  • 20:50 salut lapin je suis tout content ce soir : URL premier lien première page !!
  • 17:56 jg
  • 20:18 Yes, woohoo !! des centaines d'heures de travail derrière ce chiffre :p et il en reste encore autant... 800 nouveaux fichiers non traduits ! mais on va y arriver :)
  • 19:48 Manuel PHP français la traduction de près de 100% nouveau ... Woohoo! :)