Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 1 - Geolokace podle IP adresy ve VB.NET - IPGeolocation

V dnešním tutoriálu Síť ve VB.NET se naučíme, jak zjistit veřejnou IP adresu uživatele a připravíme vše potřebné pro zjištění GPS lokace podle této IP adresy.

Budeme využívat IP adresy pro určení polohy. Využijeme k tomu server a API, které poskytne třídu pro komunikaci s jejich databází. Cílem bude zjištění aktuální polohy pomocí GPS koordinátů, Longitude a Latitude a případně další detailnější informace.

Co budeme potřebovat

Budeme potřebovat:

Co se dnes naučíme

Naučíme se:

  • práci s balíčky NuGet,
  • jednoduchý návrh formuláře pomocí WPF,
  • implementaci kódu v našem kódu.

Založení nového projektu

Vytvoříme nový projekt typu Aplikace WPF (.NET Framework).

Můžete zvolit i postup pro .NET, či UWP, ale tam je třeba počítat s nulovou zpětnou kompatibilitou (zpravidla je problém i s OS Windows 10, který nemá update 1903). Pro verze UWP pro .NET použijeme oficiální balíček NuGet – více později.

Design aplikace

Tady se nebudeme nad ničím pozastavovat, design bude čistě účelný. XAML kód okna bude následující:

<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ódu jsme použili:

  • WrapPanel, který hezky zarovná komponenty na střed a vypořádá se i s případným rostoucím ListView.
  • TextBox, do kterého se vypíše naším kódem zjištěná IP adresa, případně můžeme zadat ručně pro vyzkoušení funkce.
  • Button pro automatické zjištění IP adresy.
  • ListView, kam se nám vypíší veškeré informace získané z IPGeolocation pomocí našeho kódu.
  • Button pro tlačítko Get Position pro spuštění našeho kódu.

Formulář vypadá následovně:

Vzor formuláře - Síť ve VB.NET

Metoda GetIP()

V Code Behind začneme vytvořením vlastní metody GetIP() s návratovou hodnotou typu String, která nám vrátí aktuální veřejnou IP adresu:

Private Function GetIP() As String
    Dim url As String = "http://checkip.dyndns.org"
    ...
End Function

K získání IP adresy využijeme služby tohoto serveru, který navrací hodnotu s jednoduchým textem v HTML. Takto vypadá zdrojový kód stránky:

<html><head><title>Current IP Check</title></head><body>Current IP Address: 212.79.96.92</body></html>

Toho využijeme v následujících řádcích, kde si zdrojový kód načteme do textového řetězce:

 ...
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 zde systémové metody pro načtení a stažení dotazované webové stránky. Ty poskytují třídy WebRequest, WebResponse a poté již familiární třída StreamReader pro načtení obsahu stránky do proměnné sr typu String. Z proměnné sr přečteme díky metodám ReadToEnd().Trim() data a vynecháme veškeré prázdné znaky. Zbytek uložíme:

Dim response As String = sr.ReadToEnd().Trim()

Využijeme jedinečného znaku :, který se v řetězci vyskytuje vždy a řetězec zde rozdělíme:

Dim a As String() = response.Split(":")

Zde rozdělený řetězec obsahující IP adresu uložíme do nové proměnné a2:

Dim a2 As String = a(1).Substring(1)

Nyní v řetězci zbývá IP adresa a za ní zbytek HTLM tagů, které odřízneme detekcí první ostré závorky <. Výsledek uložíme do nového stringového pole a3:

Dim a3 As String() = a2.Split("<")

A funkcí navrátíme hodnotu prvního řetězce stringu a3 obsahující námi požadovanou IP adresu:

Return a3(0)

Celá metoda GetIP() vypadá následovně:

Private Function GetIP() As String
    Dim url As String = "http://checkip.dyndns.org"
    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())
    Dim response As String = sr.ReadToEnd().Trim()
    Dim a As String() = response.Split(":"c)
    Dim a2 As String = a(1).Substring(1)
    Dim a3 As String() = a2.Split("<"c)
    Return a3(0)
End Function

Tímto máme hotovou funkci pro navrácení naší veřejné IP adresy. Nyní se můžeme vrhnout na to, jak z ní vytáhnout naši polohu.

GeoLokace – Zjištění polohy z IP adresy

Zde si projdeme postupně jednotlivé kroky tak, abychom na konci měli funkční kód pro zjištění polohy z IP adresy.

Založení účtu u IPGeolocation

Na přihlašovací stránce IPGeolocation se zaregistrujeme pod naším e-mailem/Google účtem atp. a provedeme potřebné kroky pro ověření emailu:

Sign up pro registraci - Síť ve VB.NET

Poté se přihlásíme do našeho účtu. Hned na první stránce najdeme naše API údaje a API Key:

Dashboard vaší registrace s API klíčem - Síť ve VB.NET

API Key si někam poznamenejme, nebo si nechme stránku otevřenou na pozadí. Budeme ho potřebovat později.

Instalace NuGet balíčku IPGeolocation

Nyní, když již máme založený účet, můžeme jednoduše využít funkcí IPGeoLocation přes balíčky. Oficiální balíček má nicméně jednu vadu, a to že nepodporuje nový .NET. Naštěstí komunita zapracovala na balíčku pro .NET framework, se kterým budeme pracovat my.

Balíček NuGet pro .NET framework

Balíček pro .NET framework nainstalujeme následujícím způsobem:

  • Klikneme pravým tlačítkem myši do Solution Exploreru a poté na správu balíčků NuGet Manage NuGet packages for Solution.
  • Přepneme se do záložky Browse a vyhledáme IPGeolocation.Net, na obrázku níže je jako první.
  • Označíme náš projekt a zvolíme nainstalovat. Počkáme, až se potřebné soubory stáhnou a nainstalují. Úspěšné nainstalování si můžeme zkontrolovat v záložce Output, kde se zobrazí veškeré nainstalované balíčky.
  • Manuál a zdrojové kódy nalezneme na GitHubu.

Balíček ve správě balíčků nalezneme takto:

Instalace NuGet balíčku - Síť ve VB.NET

Balíček NuGet pro .NET

Pokud bychom chtěli jít cestou .NET, zvolíme jiný balíček:

  • Klikneme pravým tlačítkem myši do Solution Exploreru a poté na správu balíčků NuGet Manage NuGet packages for Solution.
  • Vybereme balíček IP2Location.IPGeolocation, na obrázku výše je zobrazen jako druhá položka.
  • Pokračujeme stejně jako v postupu pro .NET framework.

Na GitHubu nalezneme balíčky i pro další programovací jazyky.

To je pro dnešek vše.

V příští lekci, Geolokace podle IP adresy ve VB.NET - Dokončení, využijeme IP adresu pro určení polohy. Výsledkem budou GPS souřadnice a další informace.


 

Měl jsi s čímkoli problém? Zdrojový kód vzorové aplikace je ke stažení každých pár lekcí. Zatím pokračuj dál, a pak si svou aplikaci porovnej se vzorem a snadno oprav.

Všechny články v sekci
Síť ve VB.NET
Přeskočit článek
(nedoporučujeme)
Geolokace podle IP adresy ve VB.NET - Dokončení
Článek pro vás napsal Dominik Horváth
Avatar
Uživatelské hodnocení:
Ještě nikdo nehodnotil, buď první!
Autor se věnuje programování v jazycích VB.NET a C#.
Aktivity