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:
- Visual Studio 2022,
- znalost okenních aplikací ve VB.NET WPF a Visual Studia,
- registraci na IPGeolocation.
Co se dnes naučíme
Naučíme se:
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ímListView
.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ě:
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:
Poté se přihlásíme do našeho účtu. Hned na první stránce najdeme naše API údaje a API Key:
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:
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.