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

Geolokácie podľa IP adresy v C # .NET WPF - Časť 1

Dnes vás prevediem svetom geolokácie napísané v C# a využívajúce .NET framework. Budeme využívať IP adresy pre určenie polohy. Využijeme na to servery http://checkip.dyndns.org a API https://ipgeolocation.io, ktoré poskytne triedu pre komunikáciu s ich databázou. Cieľom bude zistenie aktuálnej polohy pomocou GPS koordinátu, Longitude a Latitude, a prípadne ďalšie detailnejšie informácie.

Čo budeme potrebovať

  • Visual Studio 2017 alebo 2019 (v tejto verzii budem vytvárať sprievodca, zmeny oproti verzii 2017 by mali byť len kozmetické)
  • Základná znalosť jazyka C# a Visual Studia
  • Registráciu na https://ipgeolocation.io
Čo sa dnes naučíme
  • Prácu s balíčkami nugety
  • Jednoduchý návrh formulára pomocou WPF
  • Implementáciu triedy https://ipgeolocation.io 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 nový .NET Core, či UWP, ale tam treba počítať s nulovou spätnou kompatibilitou (spravidla je problém aj s OS Windows 10, ktorý nemá tohtoročný update 1903). Pre verzie UWP pre .NET Core použijeme oficiálny balík nugety - viac neskôr.

Design aplikácie

Tu sa nebudeme nad ničím pozastavovať, dizajn bude čisto účelný:

XAML kód okna bude nasledujúci:

<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ó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ším kódom zistená IP adresa, prípadne môžeme zadať ručne pre vyskúšanie funkcie
  • Button pre automatické zistenie IP adresy
  • ListView, kam sa nám vypíšu všetky informácie získané z IPGeolocation.io pomocou nášho kódu
  • A príslušné tlačidlo pre spustenie nášho kódu

Takto približne by mal formulár vyzerať:

formulár vzor - C # - Pre pokročilých

Vlastný kód - Zistenie IP adresy

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

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

Toho využijeme v nasledujúcich riadkoch, kde si zdrojový kód načítame do textového reťazca:

...
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 tu systémové metódy pre načítanie a prevzatie oslovených webové stránky. Tie poskytujú triedy WebRequest, WebResponse a potom už familiárna trieda StreamReader pre načítanie obsahu stránky do premennej string sr. Z premenné sr prečítame vďaka metódam ReadToEnd().Trim() dáta a vynecháme všetky prázdne znaky. Zvyšok uložíme:

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

Využijeme jedinečného znaku :, ktorý sa v reťazci vyskytuje vždy a reťazec tu rozdelíme:

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

Tu rozdelený reťazec obsahujúci IP adresu uložíme do novej premennej a2:

string a2 = a[1].Substring(1);

Teraz v reťazci zostáva IP adresa a za ňou zvyšok HTLM tagov, ktoré odrežeme detekciou prvý ostré zátvorky <. To uložíme do nového stringového poľa a3:

string[] a3 = a2.Split('<');

A funkcií navrátime hodnotu prvého reťazca stringu a3 obsahujúce nami požadovanú IP adresu:

    return a3[0];
}

Týmto máme hotovú funkciu pre navrá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 pre zistenie polohy z IP adresy.

1. Založenie účtu u ipgeolocation.io

Na https://app.ipgeolocation.io/auth/login sa zaregistrujte pod vaším e-mailom / Google účtom atp. a vykonajte potrebné kroky pre overenie emailu.

Sign up pre registráciu - C # - Pre pokročilých

Potom sa prihláste do vášho účtu, kde hneď na prvej stránke nájdete to, čo budete potrebovať - vaše API údaje hneď pod textom Your API Key. API Key si niekam poznačte, alebo si nechajte stránku otvorenú na pozadí, budeme ho potrebovať neskôr:

Dashboard Vašej registrácie s API kľúčom - C # - Pre pokročilých

2. Inštalácia nugety balíčka IPGeolocation

Teraz, keď už máme založený účet, môžeme jednoducho využiť funkcií IPGeoLocation cez balíčky. Oficiálne balíček má však jednu vadu a to že nepodporuje nový .NET Core. Nanešťastie komunita zapracovala na balíčku pre .NET framework, s ktorým budeme pracovať my. Na GitHub nájdete balíčky aj pre ďalšie programovacie jazyky.

Balíček nugety pre .NET framework

Balíček pre klasický .NET nainštalujeme nasledujúcim spôsobom:

  • V menu vyberieme Nástroje -> Správca balíčkov nugety -> Spravovať balíčky nugety pre riešenie ...
  • Prepneme sa do záložky Prehľadávať a vyhľadáme IPGeolocation.Net, na obrázku 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 nainštalované, kde sa zobrazí všetky nainštalované balíčky
  • Manuál a zdrojové kódy nájdeme na GitHub - https://github.com/...i-dotnet-sdk

Balíček nugety pre .NET Core

Ak chcete ísť cestou .NET Core, zvolíme iný balík:

  • V menu prejdeme na Nástroje -> Správca balíčkov nugety -> Spravovať balíčky nugety pre riešenie ...
  • Vyberieme balíček IP2Location.IPGeolocation, na obrázku zobrazený ako druhá položka
  • Pokračujeme rovnako ako v postupe pre klasický .NET
Inštalácia nugety balíčka - C # - Pre pokročilých

Pokračovať budeme v druhej časti tutoriálu.


 

Všetky články v sekcii
C # - Pre pokročilých
Článok pre vás napísal Michal Kotek
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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