Perlovský modul GEO

Perl CamelPerl má nespočet modulů a knihoven s nejrůznějšími funkcemi, což je jeho obrovská výhoda. Byl jsem nadšen, když jsem zjistil, že Perl má modul i pro zjištění místa odeslání zprávy podle IP adresy a zobrazení vlajky příslušného státu. A to vše jen na pár řádek kódu. Představím Vám funkci get_country_flag(), která na základě IP adresy vrátí cestu k obrázku vlajky státu pravděpodobného umístení počítače.

Kód pro získání symbolu státu díky IP adrese

Z knihovny GEO je pro tento případ užití potřeba pouze dva moduly a to

use Geo::IP; # zjištění státu podle IP adresy
use Geo::CountryFlags; # vlajka státu podle indicie
Geo::IP je modul, který na základě vlastní databáze IP adres vyhledá jméno státu, odkud IP adresa pochází. Databází je několik a vedle volně přístupných verzí existují i velké komerční databáze. V kódu je použita databáze GeoIP.dat, která je volně ke stažení zde.

Druhý modul, jež obhospodaří název státu vlajkou, se jmenuje Geo::CountryFlags. Díky tomu, že soubory s obrázky vlajek jsou přímo v instalačním balíku modulu, je jeho použítí přímočaře jednoduché.

Každý z nich poskytne objekt, který po inicializaci vše vykoná za programátora jednou funkcí.

my $gcf = new Geo::CountryFlags;
# konstruktor objektu $gi přebírá cestu k IP databázi a nastavení
my $gi = Geo::IP->new("./GeoIP.dat", GEOIP_MEMORY_CACHE);
# vložením české IP adresy vrátí "cz"
my $country_code = $gi->country_code_by_addr($ip_address);
# vložením "cz" vrátí českou vlajku
my $flag_path = $gcf->get_flag($country_code, "./cesta/k/vlajkam");
Je-li proměnná $flag_path definována, je v ní cesta k příslušné vlajce státu. Návratovou hodnotu funkce ošetří podmíněný operátor ? :

 defined $flag_path  ?
   return $flag_path : return DEFAULT_FLAG;
Jednoduché, rychlé a pohodlné.

Celý kód funkce v jazyce Perl

sub get_country_flag() {
  use Geo::IP; # zjištění státu podle IP adresy
  use Geo::CountryFlags; # vlajka státu podle indicie
  my $gcf = new Geo::CountryFlags;
  # konstruktor objektu $gi přebírá cestu k IP databázi a nastavení
  my $gi = Geo::IP->new("./GeoIP.dat", GEOIP_MEMORY_CACHE);
  # vložením české IP adresy vrátí "cz"
  my $country_code = $gi->country_code_by_addr($ip_address);
  # vložením "cz" vrátí českou vlajku
  my $flag_path = $gcf->get_flag($country_code, "./cesta/k/vlajkam");
  defined $flag_path  ?
    return $flag_path : return DEFAULT_FLAG;
}

Knihovna modulů GEO je funkčně velmi obsáhlá. Nebudu se dál pokoušet popisovat její další jednotlivé části, avšak odkážu na stránku, kde si můžete vyhledat modul podle zájmu i se všemi podstatnými informacemi.