1. diel - Geolokácia podľa IP adresy vo VB.NET WPF - IPGeolocation
V dnešnom VB.NET WPF tutoriále sa naučíme, ako zistiť verejnú IP adresu užívateľa a pripravíme všetko potrebné na zistenie GPS lokácie podľa tejto IP adresy.
Budeme využívať IP adresy na určenie polohy. Využijeme na to server a API, ktoré poskytne triedu pre komunikáciu s ich databázou. Cieľom bude zistenie aktuálnej polohy pomocou GPS koordinátov, Longitude a Latitude a prípadne ďalšie detailnejšie informácie.
Čo budeme potrebovať
Budeme potrebovať:
- Visual Studio 2022,
- Základná znalosť jazyka VB.NET s WPF a Visual Studia,
- Registráciu na IPGeolocation
Naučíme sa:
Založenie nového projektuVytvoríme nový projekt typu Aplikácia WPF (.NET Framework).
Môžete zvoliť aj postup pre .NET, či UWP, ale tam treba počítať s nulovou spätnou kompatibilitou (spravidla je problém aj s OS Windows 10, ktorý nemá update 1903). Pre verzie UWP pre .NET použijeme oficiálny balíček NuGet – viac neskôr.
Design aplikácie
Tu sa nebudeme nad ničím pozastavovať, design bude čisto účelný. XAML kód okna bude nasledovný:
<Grid> <WrapPanel Margin="5,0,5,0" HorizontalAlignment="Center" Background="DarkGray" Orientation="Vertical" > <TextBlock Text="Locate ours IP adress" FontSize="24" Margin="5"/> <TextBox Name="IP_TBox" Margin="5" PreviewTextInput="IP_TBox_PreviewTextInput" ></TextBox> <Button x:Name="IP_button" Content="Get IP" Click="IP_button_Click" FontSize="16" Margin="5"/> <Rectangle Margin="5" Height="3" Fill="DarkGoldenrod"></Rectangle> <TextBlock Text="Locate our city name :" FontSize="24" Margin="5"/> <Button x:Name="GPS" Content="Get Position" Click="Button_Click" FontSize="16" Margin="5"/> <ListView Name="City_ListV" FontSize="18" Foreground="Magenta" Margin="5"/> </WrapPanel> </Grid>
V kóde sme použili:
WrapPanel
, ktorý pekne zarovná komponenty na stred a vysporiada sa aj s prípadným rastúcimListView
,TextBox
, do ktorého sa vypíše našim kódom zistená IP adresa, prípadne môžeme zadať ručne na vyskúšanie funkcie,Button
pre automatické zistenie IP adresy,ListView
, kam sa nám vypíšu všetky informácie získané z IPGeolocation pomocou nášho kódu,Button
pre tlačidlo Get Position pre spustenie nášho kódu.
Metóda GetIP()
Začneme vytvorením vlastnej metódy GetIP()
s návratovou
hodnotou typu String
, ktorá nám vráti aktuálnu verejnú
IP adresu:
Private Function GetIP() As String Dim url As String = "http://checkip.dyndns.org" ... End Function
Na získanie IP adresy využijeme služby tohto servera, ktorý navracia hodnotu s jednoduchým textom v HTML. Takto vyzerá zdrojový kód stránky:
<html><head><title>Current IP Check</title></head><body>Current IP Address: 212.79.96.92</body></html>
To využijeme v nasledujúcich riadkoch, kde si zdrojový kód načítame do textového reťazca:
... Dim req As Net.WebRequest = Net.WebRequest.Create(url) Dim resp As Net.WebResponse = req.GetResponse() Dim sr As IO.StreamReader = New IO.StreamReader(resp.GetResponseStream())
Využijeme tu systémové metódy na načítanie a stiahnutie opýtanej
webovej stránky. Tie poskytujú triedy WebRequest
,
WebResponse
a potom už familiárna trieda
StreamReader
pre načítanie obsahu stránky do premennej
sr
typu String
. Z premennej sr
prečítame vďaka metódam ReadToEnd().Trim()
dáta a vynecháme
všetky prázdne znaky. Zvyšok uložíme:
Dim response As String = sr.ReadToEnd().Trim()
Využijeme jedinečný znak :
, ktorý sa v reťazci vyskytuje
vždy a reťazec tu rozdelíme:
Dim a As String() = response.Split(":")
Tu rozdelený reťazec obsahujúci IP adresu uložíme do novej premennej
a2
:
Dim a2 As String = a(1).Substring(1)
Teraz v reťazci zostáva IP adresa a za ňou zvyšok HTLM tagov, ktoré
odrežeme detekciou prvej ostré zátvorky <
. Výsledok
uložíme do nového stringového poľa a3
:
Dim a3 As String() = a2.Split("<")
A funkciou vrátime hodnotu prvého reťazca stringu a3
obsahujúcu nami požadovanú IP adresu:
Return a3(0)
Týmto máme hotovú funkciu na vrátenie našej verejnej IP adresy. Teraz sa môžeme vrhnúť na to, ako z nej vytiahnuť našu polohu.
GeoLokácia – Zistenie polohy z IP adresy
Tu si prejdeme postupne jednotlivé kroky tak, aby sme na konci mali funkčný kód na zistenie polohy z IP adresy.
Založenie účtu pri IPGeolocation
Na prihlasovacej stránke IPGeolocation sa zaregistrujeme pod naším e-mailom/Google účtom atp. a vykonáme potrebné kroky pre overenie emailu:
Potom sa prihlásime do nášho účtu. Hneď na prvej stránke nájdeme naše API údaje a API Key:
API Key si niekam poznamenajme, alebo si nechajme stránku otvorenú na pozadí. Budeme ho potrebovať neskôr.
Inštalácia NuGet balíčka IPGeolocation
Teraz, keď už máme založený účet, môžeme jednoducho využiť funkciu IPGeoLocation cez balíčky. Oficiálny balíček má však jednu chybu, a to že nepodporuje nový .NET. Našťastie komunita zapracovala na balíčku pre .NET framework, s ktorým budeme pracovať my.
Balíček NuGet pre .NET framework
Balíček pre .NET framework nainštalujeme nasledujúcim spôsobom:
- Klikneme pravým tlačidlom myši do Solution Exploreru a potom na správu balíčkov NuGet Manage NuGet packages for Solution.
- Prepneme sa do záložky Browse a vyhľadáme
IPGeolocation.Net
, na obrázku nižšie je ako prvý. - Označíme náš projekt a zvolíme nainštalovať. Počkáme, až sa potrebné súbory stiahnu a nainštalujú. Úspešné nainštalovanie si môžeme skontrolovať v záložke Output, kde sa zobrazia všetky nainštalované balíčky.
- Manuál a zdrojové kódy nájdeme na GitHube
Balíček NuGet pre .NET
Pokiaľ by sme chceli ísť cestou .NET, zvolíme iný balíček:
- Klikneme pravým tlačidlom myši do Solution Exploreru a potom na správu balíčkov NuGet Manage NuGet packages for Solution.
- Vyberieme balíček
IP2Location.IPGeolocation
, na obrázku vyššie je zobrazený ako druhá položka. - Pokračujeme rovnako ako v postupe pre .NET framework.
To je pre dnešok všetko.
V budúcej lekcii, Geolokácia podľa IP adresy vo VB.NET WPF - Dokončenie , využijeme IP adresu pre určenie polohy. Výsledkom budú GPS súradnice Longitude a Latitude a ďalšie informácie.