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 v C# .NET WPF - IPGeolocation

V dnešním C# .NET WPF tutoriálu si ukážeme svět geolokace napsané v C# a využívající .NET framework.

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 2017 či 2019 (v této verzi budu vytvářet průvodce, změny oproti verzi 2017 by měly být jen kosmetické)
  • Základní znalost jazyka C# a Visual Studia
  • Registraci na https://ipgeolocation.io

Co se dnes naučíme

Naučíme se:

  • Práci s balíčky NuGet
  • Jednoduchý návrh formuláře pomocí WPF
  • Implementaci třídy https://ipgeolocation.io 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 nový .NET Core, č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á letošní update 1903). Pro verze UWP pro .NET Core 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="IPlist" Margin="5" ></TextBox>
            <Button x:Name="IP_button" Content="Get IP" Click="IP_button_Click" FontSize="16" Margin="5"/>
            <TextBlock Text="Locate our city name :" FontSize="24" Margin="5"/>
            <ListView Name="Citytext" FontSize="18" Foreground="Magenta" Margin="5"/>
            <Button x:Name="GPS" Content="Get Position" Click="Button_Click" FontSize="16" 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.io pomocí našeho kódu
  • A příslušné tlačítko pro spuštění našeho kódu

Takto přibližně by měl formulář vypadat:

Formulář vzor - Síť v C# .NET

Vlastní kód – Zjištění IP adresy

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 string GetIP()
{
    string url = "http://checkip.dyndns.org";
    //...

K získání IP adresy využijeme služby serveru http://checkip.dyndns.org, 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:

//...
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());

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é string sr. 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:

string response = sr.ReadToEnd().Trim();

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

string[] a = response.Split(':');

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

string a2 = 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 <. To uložíme do nového stringového pole a3:

string[] a3 = 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];
}

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.io

Na https://app.ipgeolocation.io/auth/login se zaregistrujte pod vaším e-mailem/Google účtem atp. a proveďte potřebné kroky pro ověření emailu.

Sign up pro registraci - Síť v C# .NET

Poté se přihlaste do vašeho účtu, kde hned na první stránce najdete to, co budete potřebovat - vaše API údaje hned pod textem Your API Key. API Key si někam poznamenejte, nebo si nechte stránku otevřenou na pozadí, budeme jej potřebovat později:

Dashboard vaší registrace s API klíčem - Síť v C# .NET

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 Core. Naštěstí komunita zapracovala na balíčku pro .NET framework, se kterým budeme pracovat my. Na GitHubu naleznete balíčky i pro další programovací jazyky.

Balíček NuGet pro .NET framework

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

  • V menu vybereme Nástroje -> Správce balíčků NuGet -> Spravovat balíčky NuGet pro řešení....
  • Přepneme se do záložky Procházet a vyhledáme IPGeolocation.Net, na obrázku 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 nainstalováno, kde se zobrazí veškeré nainstalované balíčky.
  • Manuál a zdrojové kódy nalezneme na GitHubu.

Balíček NuGet pro .NET Core

Pokud chcete jít cestou .NET Core, zvolíme jiný balíček:

  • V menu přejdeme na Nástroje -> Správce balíčků NuGet -> Spravovat balíčky NuGet pro řešení....
  • Vybereme balíček IP2Location.IPGeolocation, na obrázku zobrazen jako druhá položka.
  • Pokračujeme stejně jako v postupu pro klasický .NET.
Instalace NuGet balíčku - Síť v C# .NET

To je pro dnešek vše.

V příští lekci, Geolokace podle IP adresy v C# .NET WPF - Dokončení, využijeme IP adresu pro určení polohy. Výsledkem budou GPS souřadnice Longitude a Latitude 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íť v C# .NET
Přeskočit článek
(nedoporučujeme)
Geolokace podle IP adresy v C# .NET WPF - Dokončení
Článek pro vás napsal Michal Kotek
Avatar
Uživatelské hodnocení:
7 hlasů
Autor se věnuje programování již od útlých let, aktuálně se věnuje výrobě Webových stránek jako fullstack, využívám Nette framework. Mám znalosti jazyků JS, PHP, SASS C# .NET, C++ pro Arduino. Jo a strašně rád střílím ;)
Aktivity