VICOPO

VICOPO

API HTTP et Script pour trouver les villes à partir d'un code postal et code postaux à partir d'une ville

Vicopo est un moyen léger et rapide rechercher une ville française et implémenter des propositions à la volée, l'autocomplétion d'un champ de ville ou de code postal et la conversion de l'un vers l'autre.

Testez-la ci-dessous en tapant le début d'un code postal ou du nom d'une ville :

API jQuery :

API en JS pur (ne nécessite aucune autre librairie) actuellement en beta-test :

Afficher les villes possibles dans une liste

Placez le code ci-dessus n'importe où sur votre page, et insérez le script en fin de page (par exemple avant </body>) :

<script src="vicopo-vanilla.min.js"></script>

Si vous utilisez jQuery, insérez le script après jQuery (par exemple avant </body>) :

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="vicopo-jquery.min.js"></script>

Ajoutez l'attribut data-vicopo à un élément et passez-lui en paramètre un sélecteur qui pointera vers un champ(<input>, <select> ou <textarea>). Quand la valeur du champs change, l'élément sera duppliqué autant de fois qu'il y a de villes commençant par la valeur tapée ou dont le code postal commence par la valeur tapée (la recherche commence à partir de 2 caractères tapés).

À l'intérieur de ces éléments, les balises portant les attributs data-vicopo-code-postal, data-vicopo-ville seront respectivement pourvus du code postal et de la ville. Si ces balises sont des champs, utilisez data-vicopo-val-code-postal et data-vicopo-val-ville pour que les informations soient assignées en tant que valeur.

Remplir le champ au clic sur un des choix

Ajoutez l'attribut data-vicopo-click à ce même élément pour rendre les choix clicables, cet attribut prend en valeur un objet JSON dont les clés sont les sélecteurs et les valeurs la donnée à insérer au clic ("ville", "code" ou n'importe quel texte dont les mots "code" et "ville" seront remplacé par le code postal et la ville du choix sur lequel l'utilisateur a cliqué.

Alternativement, ajoutez l'attribut data-vicopo-get="ville" à l'élement de saisie (input, textarea, etc.) et remplir le champ avec la ville au clic.

Utilisez data-vicopo-get="code" pour remplir le champ avec le code postal ou data-vicopo-get="code ville" / data-vicopo-get="ville code" pour obtenir les 2 dans l'ordre voulu.

Compléter le champ avec le premier nom de ville trouvé

Lors de l'appui sur Entrée, on récupère la première ville et on l'applique comme nouvelle valeur du champ.

L'ajout optionnel de .vicopoTargets().vicopoClean() permet d'effacer la liste de suggestions.

Récupérer les villes au fur et à mesure de la saisie

Les méthodes .vicopo(), .codePostal() et .ville() appliquées à un élément jQuery permettent de récupérer dans une variable le résultat de la recherche à chaque lettre saisie dans le champ.

Utilisation sans champs de saisie

Les méthodes $.vicopo(), $.codePostal() et $.ville() prennent en premier paramètre le code postal ou la ville (partiel ou entier) recherché et en second paramètre une fonction de callback appelée avec le terme recherché en premier paramètre, les villes trouvées en second et en troisième 'code' pour une recherche de code postal ou 'city' pour une recherche de ville.

API HTTP brute au fomart JSON (par défaut)

https://vicopo.selfbuild.fr/cherche/680
{
input: "680",
cities: [
    {
        code: 68040,
        city: "INGERSHEIM"
    },
    {
        code: 68000,
        city: "COLMAR"
    }
]
}

Le paramètre cherche (ou search) permet de faire une recherche parmi les villes et codes postaux. Utilisez ville (ou city) pour chercher uniquement dans les villes, code ou code-postal pour chercher dans les codes postaux seulement.

API HTTP brute au fomart JSONP (avec callback)

https://vicopo.selfbuild.fr/ville/mul?format=callback
maFonction(
{
    input: "mul",
    cities: [
        {
            code: 67350,
            city: "MULHAUSEN"
        },
        {
            code: 78790,
            city: "MULCENT"
        },
        {
            code: 41500,
            city: "MULSANS"
        },
        {
            code: 72230,
            city: "MULSANNE"
        },
        {
            code: 68100,
            city: "MULHOUSE"
        },
        {
            code: 68200,
            city: "MULHOUSE"
        },
        {
            code: 57260,
            city: "MULCEY"
        }
    ]
}
)

Ce format JSONP peut être utilisé pour exécuter du code DSL (Dynamic Script Loading)

API au format XML

https://vicopo.selfbuild.fr/code/680?format=xml
<vicopo>
<input>680</input>
<cities>
    <city>INGERSHEIM</city>
    <code>68040</code>
</cities>
<cities>
    <city>COLMAR</city>
    <code>68000</code>
</cities>
</vicopo>

API au format YAML

https://vicopo.selfbuild.fr/ville/argel?format=yaml
---
input: argel
cities:
- code: 65400
city: ARGELES-GAZOST
- code: 40700
city: ARGELOS
- code: 64450
city: ARGELOS
- code: 65200
city: ARGELES-BAGNERES
- code: 34380
city: ARGELLIERS
- code: 11120
city: ARGELIERS
- code: 66700
city: ARGELES-SUR-MER
- code: 40430
city: ARGELOUSE
...

Utilisation côté serveur ou dans un programme

Comme n'importe quel web-service HTTP, vous pouvez appeler Vicopo depuis un programme ou un serveur en utilisant votre langage préféré (PHP, Node.js, Python, Ruby, C, C#, etc.), voici un exemple en PHP :

afficheCodePostalLille.php
$ville = 'Lille';
$vicopoUrl = 'http://vicopo.selfbuild.fr/city/' . urlencode($ville);
$json = @json_decode(file_get_contents($vicopoUrl));
$codePostal = ! is_object($json) || empty($json->cities) ? 'introuvable' : $json->cities[0]->code;
echo $codePostal;

Package Composer

Vicopo est disponible via composer require kylekatarnls/vicopo :

afficheCodePostalLille.php
<?php
use Vicopo\Vicopo;
print_r(Vicopo::http(75001));
print_r(Vicopo::https('paris'));

Plugin node.js

Vicopo est disponible sous node.js directement via npm install vicopo dans un invité de commande puis require('vicopo') :

afficheCodePostalLille.js
var ville = 'Lille';
var vicopo = require('vicopo');
vicopo(ville, function (err, cities) {
if (err) {
    throw err;
} else {
    console.log(cities);
}
});

Gem Ruby

Vicopo est disponible sous Ruby directement via gem install vicopo dans un invité de commande puis require 'vicopo' :

afficheCodePostalLille.rb
require 'vicopo'
ville = 'Lille'
puts Vicopo.http ville

Package Python

Vicopo est disponible sous Python directement via pip install vicopo dans un invité de commande puis require 'vicopo' :

afficheCodePostalLille.py
from Vicopo import Vicopo

ville = Vicopo.http(75001)

ville = Vicopo.http('paris')

Liens du plug-in vicopo