Perlovský modul GEO
Perl 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 indicieGeo::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.