Geolokácie podľa IP adresy v C # .NET WPF - Časť 2
V minulej časti, Geolokácia podľa IP adresy v C# .NET WPF - Časť 1, sme si pripravili všetko potrebné pre naprogramovanie aplikácie na zistenie IP adresy a geolokácie. Dnes budeme pokračovať a aplikáciu dokončíme.
3. Zdrojový kód IPGeolocation
Mali by sme mať všetko pripravené. Pre vyhľadanie polohy podľa IP adresy
si vytvoríme novú privátne metódu LokaceIP()
s parametrom
string IPadress
.
Medzi using
príkazy pridáme novo nainštalovaný balíček
IPGeolocation
. Ďalej inicializujeme API nainštalovaného balíka,
tu budeme potrebovať API kľúč z vášho účtu, ktorý sme si založili v
predchádzajúcej časti. Inštanciu IPGeolocationAPI
inicializujeme ako premennú triedy nášho okna:
IPGeolocationAPI api = new IPGeolocationAPI("Sem_vlozte_svuj_API_Key");
Ďalej pokračujeme deklaráciou našej metódy LokaceIP()
:
private void LokaceIP(string IPadress) { GeolocationParams geoParams = new GeolocationParams(); geoParams.SetIPAddress(IPadress); geoParams.SetFields("geo,time_zone,currency");
Tu si deklarujeme inštanciu GeolocationParams
ako premennú
geoParams
, ktoré nastavíme IP adresu. Ďalej upresníme rozsah
informácií, ktoré bude metóda zisťovať. Pre čisto zistenie GPS súradníc
postačí zadať len "geo"
, my využijeme celkový rozsah
možností tak, ako je deklarované v kóde. Následne zavoláme metódu
GetGeolocation()
a jej návratovú hodnotu spracujeme:
IPGeolocation.Geolocation geolocation = api.GetGeolocation(geoParams); // Check if geolocation lookup was successful if (geolocation.GetStatus() == 200) { City_ListV.Items.Add(geolocation.GetCity()); City_ListV.Items.Add(geolocation.GetCountryName()); City_ListV.Items.Add(geolocation.GetCurrency().GetName()); City_ListV.Items.Add("Lat: " + geolocation.GetLatitude().ToString() +"; Long: " + geolocation.GetLongitude().ToString()); }
Tu využívame návratovej hodnoty metódy GetStatus()
, ktorá
vráti hodnotu 200
pokiaľ sa dohľadania podarilo. A využijeme
listu City_ListV
, aby sme do neho vložili výsledky ako je názov
mesta, názov krajiny, miestnu menu, a to hlavné - Latitude a Longitude, teda
GPS súradnice, ktoré hľadáme.
Zvyšok funkcie rieši už len vypísanie prípadné chyby, ak sa vyhľadanie IP adresy zlyhalo, a jednoduchý textový oddeľovač pre prehľadnosť:
else { City_ListV.Items.Add(geolocation.GetMessage()); } City_ListV.Items.Add("---------------------------------"); }
4. Dokončenie aplikácie
Zostáva pár obslužných metód v Code Behind. Tlačidlu "Get IP" pridelíme obslužnú metódu pre zistenie IP adresy a vypísanie do nášho textbox:
private void IP_button_Click(object sender, RoutedEventArgs e) { IP_TBox.Text = GetIP(); }
To isté vykonáme s tlačidlom "Get Position":
private void Button_Click(object sender, RoutedEventArgs e) { LokaceIP(IP_TBox.Text); }
Záver
Aplikácia by mala fungovať tak ako príklad na na obrázku nižšie. Po kliknutí na "Get IP" sa zistí aktuálna IP adresa. A následne po stlačení "Get position" sa zistí aktuálna poloha podľa IP vpísanej v textbox:
Aplikácia zistí vašu verejnú IP adresu a vašu polohu. Pre otestovanie je možné do textbox vpísať akúkoľvek IP adresu a nechať si vypísať lokáciu a všetky informácie.
Dúfam, že sa vám táto demonštrácia možností Geolokácia pomocou IP adresy a sprievodca páčili, a že vám pomôže s implementáciou treba do vášho projektu. Ja tento program napísal pre otestovanie predtým, než som ho implementoval do najnovšej verzie môjho projektu, tu je jej voľne prístupná súťažné verzia pre zaujímavosť.
Nižšie nájdete kompletný zdrojový kód na stiahnutie. V archíve sa nachádza novo aj verzia pre .NET Core. Tu je náhľad zdrojového kódu Code Behind:
public partial class MainWindow : Window { //public string cityfromIP,lat,longt =""; IPGeolocationAPI api = new IPGeolocationAPI("YOUR_PRIVATE_ASPI_KEY"); public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { LokaceIP(IP_TBox.Text); } private void LokaceIP(string IPadress) { // Get geolocation for IP address (1.1.1.1) and fields (geo, time_zone and currency) GeolocationParams geoParams = new GeolocationParams(); geoParams.SetIPAddress(IPadress); geoParams.SetFields("geo,time_zone,currency"); IPGeolocation.Geolocation geolocation = api.GetGeolocation(geoParams); // Check if geolocation lookup was successful if (geolocation.GetStatus() == 200) { City_ListV.Items.Add(geolocation.GetCity()); City_ListV.Items.Add(geolocation.GetCountryName()); City_ListV.Items.Add(geolocation.GetCurrency().GetName()); City_ListV.Items.Add("Lat: " + geolocation.GetLatitude().ToString() +"; Long: " + geolocation.GetLongitude().ToString()); } else { City_ListV.Items.Add(geolocation.GetMessage()); } City_ListV.Items.Add("---------------------------------"); } private string GetIP() { string url = "http://checkip.dyndns.org"; System.Net.WebRequest req = System.Net.WebRequest.Create(url); System.Net.WebResponse resp = req.GetResponse(); System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream()); string response = sr.ReadToEnd().Trim(); string[] a = response.Split(':'); string a2 = a[1].Substring(1); string[] a3 = a2.Split('<'); return a3[0]; } private static readonly Regex regex = new Regex("^[.0-9]+$"); // výborná pomůcka zde https://regexr.com private void IP_TBox_PreviewTextInput(object sender, TextCompositionEventArgs e) { if (!regex.IsMatch(e.Text)) //otestuje zda vstupní znak je v povoleném rozsahu e.Handled = true; base.OnPreviewTextInput(e); } private void IP_button_Click(object sender, RoutedEventArgs e) { IP_TBox.Text = GetIP(); } }
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 44x (7.7 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#