Biblioteca que dice país por número de teléfono

Tengo mil números de teléfono como+27823374587

¿Hay una biblioteca o un programa de línea de comandos que pueda decirme el país?

Por ejemplo: +27823374587South Africa

Requisitos:

  • se ejecuta sin conexión
  • Gratis, idealmente de código abierto
  • Cualquier sistema operativo o lenguaje de programación está bien

Respuestas (2)

Hay un par de bibliotecas de python que pueden hacer esto python-phonenumbers analizará varios formatos para obtener el código de país.

  • Gratis y de código abierto.
  • Funciona sin conexión
  • Multiplataforma y SO
  • Pitón 2.5-2.7 y 3.x
  • Python puro, por lo que no se necesita un compilador de C.

Basado en los ejemplos de esa página y usando ipython:

In [1]: import phonenumbers

In [2]: from phonenumbers import geocoder

In [3]: query = phonenumbers.parse("+27823374587", None)

In [4]: print repr(geocoder.description_for_number(query, "en"))

u'Sudáfrica'

Buena biblioteca, parece hacer el 90% del trabajo: "+27823374587"→"+27". Supongo que podría escribir un código de mapeo para que sea "+27823374587"→"Sudáfrica", pero si ya hay una biblioteca que hace todo, sería genial :-)
@NicolasRaoul - Lo hace - He agregado un ejemplo a la respuesta anterior. (Había uno en la página, pero supongo que se perdió en los detalles).

Por supuesto, también puede usar la biblioteca de perl puro.

Aquí hay un script de trabajo:

#!/usr/bin/env perl

use 5.014;
use warnings;
use Number::Phone::Country;
use Locale::Country;

for my $arg (@ARGV) {

    #get ISO country code and IDD from the number
    my($iso_cc, $idd) = Number::Phone::Country::phone2country_and_idd($arg);
    unless($iso_cc) {
        warn "Bad phone number $arg";
        next;
    }

    say "Phone: $arg";
    say "ISO Code: $iso_cc";
    say "International direct dialing: $idd";

    #get the country name from the ISO code
    my $country = code2country($iso_cc); 
    say "Country name: $country\n";
}

Si lo ejecutas como:

perl scriptname "+1 302 1234567" +421905905905

salidas:

Phone: +1 302 1234567
ISO Code: US
International direct dialing: 1
Country name: United States

Phone: +421905905905
ISO Code: SK
International direct dialing: 421
Country name: Slovakia

El script utiliza dos módulos perl: