[C#]Web Service: Meteo sluzba

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod tesco.kvalita 20. 1. 2008 17:51

Ahojte chcem sa spytat aky najrozumnejsim sposobom by som vybral udaje z tejto tabulky:

Kód: Vybrat vše
http://www.shmu.sk/sk/?page=1&id=meteo_apocasie_sk#tab


ide mi o tie udaje o pocasi, teraz taham data z RSS na yahoo ale je to skromny vyber pre Slovensko, parsujem to z XML-ka, dik som zaciatocnik tak dakomu sa to moyno bude zdat primitivne.Dakujem :)
tesco.kvalita
Junior

Odeslat příspěvekod Nargon 20. 1. 2008 19:16

Pokud autor neudelal nejakej jinej pristup (treba to xml) tak mas jedinou moznost.
Stahnout zdrojovy kod stranky, a vyparsovat to z nej. Bude to urcite slozitejsi nez to obycejny xmlko, ale taky to jde.

Poradim ti zacatek :) zacni tim ze si celou tu stranku ulozis do jednoho stringu (bude to mit asi par desitek KB). Ale to je zatim v pohode.

Kód: Vybrat vše
webclient wc = new webclient();
string stranka = wc.downloadstring("http://www.shmu.sk/sk/?page=1&id=meteo_apocasie_sk");
if (stranka!= null)
{
int index = stranka.indexof("<td style=\"white-space: nowrap; text-align:center;\"");
int lastindex = stranka.lastindexof("<td style=\"white-space: nowrap; text-align:center;\"");
stranka = stranka.substring(index, lastindex-index);
}

No potrebujes minimalne .NET 2.0, ale to snad nevadi. na 1.1 snad uz nikdo nedela :) A neni to spravne, mam tam urcite blbe maly a velky pismenka (pisu to z hlavy), ale s tim si poradis.

Je to takovej zacatek :) tohle ti stahne tu stranku a vytahne z ni jen tu tabulku s tema hodnotama (ne zcela presne a celou, ale pro zacatek to staci). A ted uz je jen na tobe aby jsi z toho vysekal ty data co potrebujes.
Nargon
Moderátor

Odeslat příspěvekod tesco.kvalita 20. 1. 2008 19:52

VELMI PEKNE DAKUJEM...
Naposledy upravil Vebloud dne 21. 11. 2011 00:30, celkově upraveno 1
Důvod: Odstraněna citace
tesco.kvalita
Junior

Odeslat příspěvekod meteos 20. 11. 2011 22:39

Dobrý den,
moc jsem to nepochopil. Rád bych kopíroval data ze stránky http://chmu.cz/files/portal/docs/uoco/web_generator/actual_hour_data_CZ.html. Uvádím část kódu tabulky:
Kód: Vybrat vše
<tr class="list-row-odd">

                        <td>

                            <a href="./aqindex_slide1/mp_AKALA_CZ.html">AKALA</a>

                        </td>

                        <td>Pha8-Karlín</td>

                        <td>ČHMÚ</td>

                        <td align="center" style="background-color: #9BD3AE">

                            <span style="color: #000000">2 - dobrá</span>

                        </td>

                        <td align="right" style="background-color: #C7EAFB">

                            <span style="color: #000000">1,3</span>

                        </td>

                        <td align="right" style="background-color: #9BD3AE">

                            <span style="color: #000000">35,8</span>

                        </td>

                        <td align="right" style="background-color: #CFCFCF">

                            <span style="background-color: black"/>

                        </td>

                        <td align="right" style="background-color: #CFCFCF">

                            <span style="background-color: black"/>

                        </td>

                        <td align="right" style="background-color: #9BD3AE">

                            <span style="color: #000000">33,0</span>

                        </td>

                        <td style="background-color: white"/>

                        <td align="right" style="">

                            <span>55,7</span>

                        </td>

                    </tr>



Dále nevím, jaké třídy používáte a jak vypíši data do např. labelu. Například pokud budu chtít vypsat do label kvalitu ovzduší, jak to udělám? Předem děkuji za Vaše odpovědi.
meteos
Kolemjdoucí

Odeslat příspěvekod procto 21. 11. 2011 17:24

No je to dost podobné, stáhneš si zas celý ten web a použiješ regulární výrazy (http://www.regularnivyrazy.info/), to už si budeš muset napsat sám ;)
S tím, že pak pomocí Regexpu získáš konkrétní prvky a ty dáš do těch např labelů
procto
Kolemjdoucí

Odeslat příspěvekod Popi 21. 11. 2011 17:52

Na slušné procházení HTML webu doporučuji HTML Agility Pack.

Je zde implementovaná logika XPATH, tudíž jde HTML procházet skrze DOM.
..?
Popi
Junior
Uživatelský avatar

Odeslat příspěvekod flyingbird 22. 11. 2011 14:05

meteos> Můžu vědět o co se pokoušíš ? Data o kvalitě ovzduší jsou k dispozici v XML pro aplikaci SmogAlarm (Android).

Dále je dobré vědět, že na ČHMÚ nejsou zrovna odvázaní z toho, když si někdo bere jejich data a prezentuje po svém. Dochází pak ke zmatkům a dezinformacím. Bylo by dobré se alespoň pokusit o domluvu.

L.V.
flyingbird
Junior
Uživatelský avatar

Odeslat příspěvekod meteos 22. 11. 2011 19:55

Chtěl bych vytvořit aplikaci zatím jen pro vlastní použití (dokud se nedohodnu s ČHMÚ).
Jinak bych všeobecně rád věděl jak parsovat data. Může to být i jiná stránka, ale jen abych to pochopil ;-).
meteos
Kolemjdoucí

Odeslat příspěvekod flyingbird 22. 11. 2011 21:38

meteos> XML parserem. Dej si do google: "c# xml parsing" vyjede ti toho tuna. Předpokládám že to budeš dělat v C#.

Ta stránka (actual_hour_data_CZ.html) je validní XHTML. Mnohem lepší ale bude parsovat XML pro SmogAlarm. Ten se teď dává někam na FTP, ale brzy by to snad mělo být dostupné na portále ČHMÚ.

Jinak nechápu, co ta aplikace přinese proti informaci na webu.

L.V.
flyingbird
Junior
Uživatelský avatar

Odeslat příspěvekod Vebloud 23. 11. 2011 00:18

Konkrétně prezentace informací z webu ČHMŮ
Žít a nechat žít, ty máš svůj názor, já mám svůj názor, já ti nebudu nutit svůj, nemusím souhlasit s tvým, ale udělám vše, abys ho mohl svobodně vyjádřit.
Vebloud
Ex-moderátor
Uživatelský avatar

Odeslat příspěvekod meteos 2. 12. 2011 21:34

Dobře, tak jinak.
Mám následující kód:
Kód: Vybrat vše
<table>
<tr><td class="aktualni_data">Aktuální teplota:</td><td>-1 °C</td></tr>
<tr><td>Rychlost vetru</td><td>2.7 km/h</td></tr>
<tr><td>Narazy vetru:</td><td>4 km/h</td></tr><tr><td>Smer vetru:</td><td>N 315°</td></tr>
<tr><td>Dnesni srazky:</td><td>0 mm</td></tr>
<tr><td>Tlak:</td><td>991.9 hPa.</td></tr>
<tr><td>Fáze měsíce:</td><td><img src="/pocasi/moonicon.gif"></td></tr></table>


Nyní bych chtěl do label1 vyparsovat například hodnotu aktuální teploty.

Jak na to?

Předem děkuji
meteos
Kolemjdoucí

Odeslat příspěvekod Nargon 2. 12. 2011 21:48

Kód: Vybrat vše
            string text = System.IO.File.ReadAllText("TextFile1.txt"); //obsah souboru je to co jsi uvedl.
            Match m = Regex.Match(text, "Aktuální teplota:</td><td>(.*?)</td></tr>");

            if (m.Success) label1.Text = m.Groups[1].Value;

A v tom label1 budes mit: "-1 °C" (bez uvozovek)
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod meteos 3. 12. 2011 10:37

Děkuji, ale znamená to, že bych musel na FTP ukládat txt soubor, ale já bych chtěl řešení, které přečte zdrojový kód, najde tam tento kód a z něj získá teplotu.
meteos
Kolemjdoucí

Odeslat příspěvekod Nargon 3. 12. 2011 14:55

Mno a v cem je problem. Tak tu promenou "text" proste napln nejak jinak. Ja to ctu ze souboru, protoze je to pro me nejsnadnejsi zpusob. Ty pouzij treba tridu WebClient. Ty druhy dva radky meho kodu budou stejne.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod meteos 3. 12. 2011 15:02

WebClient? Můžete mi prosím poslat ukázku kódu s WebClient?
meteos
Kolemjdoucí

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků