Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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

Čo sa dnes naučíme

Naučíme sa:

  • prácu s balíčkami NuGet,
  • jednoduchý návrh formulára pomocou WPF
  • Implementáciu kódu v našom kóde.
Založenie nového projektu

Vytvorí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úcim ListView,
  • 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.
Formulár vyzerá takto:
Vzor formulára - Sieť vo VB .NET

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:

Sign up pre registráciu - Sieť vo VB .NET

Potom sa prihlásime do nášho účtu. Hneď na prvej stránke nájdeme naše API údaje a API Key:

Dashboard vašej registrácie s API kľúčom - Sieť vo VB .NET

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 v správe balíčkov nájdeme takto:
Inštalácia NuGet balíčka - Sieť vo VB .NET

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.
Na GitHube nájdeme balíčky aj pre ďalšie programovacie jazyky.

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.


 

Všetky články v sekcii
Sieť vo VB .NET
Preskočiť článok
(neodporúčame)
Geolokácia podľa IP adresy vo VB.NET WPF - Dokončenie
Článok pre vás napísal Dominik Horváth
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování v jazycích VB.NET a C#.
Aktivity