Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: jekku - 19.02.17 - klo:11.57

Otsikko: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon? [RATKAISTU]
Kirjoitti: jekku - 19.02.17 - klo:11.57
Olen aikaisemmin ryystänyt (wgetillä) sivun
http://www.foreca.fi/Finland/Kajaani
Ja parsinut siitä muutamia detaljeja, kuten lämpötilan ja lumensyvyyden tilastoihini.

Mutta jokunen päivä sitten sivun rakenne muuttunut enkä löydä noita tietoja enää.

Onko joku temppu jolla saa napattua ulkolämpötilan jostain havaintoasemalta ihan tekstiformaatissa?

Hyvin irtoaa, tuolla myöhemmin mainitulla python-palikalla :)
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: kamara - 19.02.17 - klo:12.21
http://ilmatieteenlaitos.fi/saa/kajaani

Täällä on vähän parsittuna:
https://foorumi.linux.fi/t/uusi-conky-saascripta-ilmatieteenlaitos-fi/1475/64
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: jekku - 19.02.17 - klo:13.15
http://ilmatieteenlaitos.fi/saa/kajaani

Täällä on vähän parsittuna:
https://foorumi.linux.fi/t/uusi-conky-saascripta-ilmatieteenlaitos-fi/1475/64

En muuten keksinyt miten noista napataan se info tekstitiedostoon?
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: kamara - 19.02.17 - klo:15.41
http://ilmatieteenlaitos.fi/saa/kajaani

Täällä on vähän parsittuna:
https://foorumi.linux.fi/t/uusi-conky-saascripta-ilmatieteenlaitos-fi/1475/64

En muuten keksinyt miten noista napataan se info tekstitiedostoon?

Mitkä tiedot tarvitset. Näyttäisi forecaltakin saavan joitain tietoja grepattua:
Koodia: [Valitse]
wget http://www.foreca.fi/Finland/Kajaani
cat Kajaani |grep date

Lämpötila näkyy löytyvän, muttei lumen syvyyttä.

Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: jekku - 19.02.17 - klo:15.59
http://ilmatieteenlaitos.fi/saa/kajaani

Täällä on vähän parsittuna:
https://foorumi.linux.fi/t/uusi-conky-saascripta-ilmatieteenlaitos-fi/1475/64

En muuten keksinyt miten noista napataan se info tekstitiedostoon?

Mitkä tiedot tarvitset. Näyttäisi forecaltakin saavan joitain tietoja grepattua:
Koodia: [Valitse]
wget http://www.foreca.fi/Finland/Kajaani
cat Kajaani |grep date

Lämpötila näkyy löytyvän, muttei lumen syvyyttä.

Tuollaiset olen aiemmin saanut kiiinni:
Lumen syvyys : 11 cm
Lämpötila: -3°C Havaintoaika: 12.2. 17.10

Eli tuota koetan saada kiinni joka näkyy selaimessa:   
-3 °C

Havaintoaika: 19.2. 15.30

Minun greppiini ei osu sama arvo :(
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: kamara - 19.02.17 - klo:16.08
Joo lumen syvyyttä ei tosiaan näy, mutta lämpötila näkyy – ainakin itselläni:
Koodia: [Valitse]
wget http://www.foreca.fi/Finland/Kajaani
cat Kajaani |grep date
1020002897': { date: '19.2.', time: '15.00', temp: -3, flike: -8, rhum: 82, v ...

Eli greppaa date:lla, jotta näkyy arvoja.
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: jekku - 19.02.17 - klo:16.22
Joo, niin greppasin.
Mutta hämäsi ettei samaa havaintoaikaa osunut.

Ja näkyy olevan nuo sijaintikooditkin löydettävissä         
Koodia: [Valitse]
var stations = [{id: '1020002897', n: "Kajaani Lentoasema"}, {id: '1020002739', n: "Sotkamo Kuolaniemi"}, {id: '1020002859', n: "Puolanka, Paljakka"}, {id: '1020002834', n: "Vieremä Kaarakkala"}, {id: '1020002883', n: "Kajaani Petäisenniska"}];

Kai noilla on pärjättävä..
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: kamara - 19.02.17 - klo:16.49
Kai noilla on pärjättävä..

Jos haluat sateen määrän ja todennäköisyyden, niin kannattaa tutustua ohnonot:n tekemään sääscriptaan, mutta sen parsiminen taitaa olla hivenen hankalampaa. Koodeja tutkimalla varmaan jotain saa selvää...

https://foorumi.linux.fi/t/uusi-conky-saascripta-ilmatieteenlaitos-fi/1475/64

https://github.com/ohnonot/conky-itl-weather

... itselläni ei ole tarvetta sille, niin en viitsi tutkia näitä koodeja.
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: pata - 19.02.17 - klo:17.25
Ilmatieteen laitoksen "Paikalliset säähavainnot" tietojen poimiminen ei taida onnistua näillä koska se käyttää Javaskriptiä. Tuon jos joku tietäisi miten. Näinhän todetaan myös em. forum ketjun lopussa. Toistaiseksi olen käyttänyt Forecan tms. sivua.
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: Tomin - 19.02.17 - klo:17.34
Jos viitsisi skriptata (Python lienee helpoin työkalu) tarpeeksi, niin tuosta saattaisi olla hyötyä:
http://ilmatieteenlaitos.fi/avoin-data-avattavat-aineistot
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: jekku - 19.02.17 - klo:19.05
Jos viitsisi skriptata (Python lienee helpoin työkalu) tarpeeksi, niin tuosta saattaisi olla hyötyä:
http://ilmatieteenlaitos.fi/avoin-data-avattavat-aineistot

Tuohon pitääkin perehtyä oikein ajatuksella ja aikaisin aamulla kun ajatus vielä kulkee, jotenkin :)

Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: nm - 19.02.17 - klo:20.02
Kyhäsin skriptin Foreca.fi:n havaintodatan latailuun. Näyttää kaikki sivulla piilevät havaintoasemat.

Lataa:
Koodia: [Valitse]
wget https://raw.githubusercontent.com/nmikkila/weatherdata/master/current_weather/foreca.py
Aja:
Koodia: [Valitse]
python foreca.py http://www.foreca.fi/Finland/Kajaani
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: raimo - 19.02.17 - klo:20.36
Kyhäsin skriptin Foreca.fi:n havaintodatan latailuun. Näyttää kaikki sivulla piilevät havaintoasemat.

Lataa:
Koodia: [Valitse]
wget https://raw.githubusercontent.com/nmikkila/weatherdata/master/current_weather/foreca.py
Aja:
Koodia: [Valitse]
python foreca.py http://www.foreca.fi/Finland/Kajaani

Wau, nyt on hieno! Kiitos paljon! :)

Vaatii tosin python-requests -paketin asentamisen jotta toimii.
Se ei ainakaan minun KDE neonissa eikä Raspin Debian Jessiessä ollut asennettuna, mutta näinhän sen saa:
Koodia: [Valitse]
sudo apt-get install python-requests
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: nm - 19.02.17 - klo:20.39
Jees. En muistanut, ettei requests ole vakiokalustoa.


Ilmatieteen laitokselta saa vastaavat datat ja enemmänkin aika suoraviivaisesti:

Sääasematunnukset paikkakunnan sivun kautta:
Koodia: [Valitse]
wget -O- http://ilmatieteenlaitos.fi/saa/kajaani | grep -oP "supportedStations=.*?;"
Tai vähän selkeämmin listattuna:
Koodia: [Valitse]
wget -O- http://ilmatieteenlaitos.fi/saa/kajaani | grep -oP "supportedStations=.*?;" | sed "s/\([0-9]*:{\)/\n\1/g"
Vajaan viikon havainnot JSON-muodossa (sama data kuin sivulla näkyvä graafisesti selattava Paikalliset säähavainnot):
Koodia: [Valitse]
wget "http://ilmatieteenlaitos.fi/observation-data?station=126736" -O observations.json
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: pata - 19.02.17 - klo:21.52
Vajaan viikon havainnot JSON-muodossa (sama data kuin sivulla näkyvä graafisesti selattava Paikalliset säähavainnot):
Koodia: [Valitse]
wget "http://ilmatieteenlaitos.fi/observation-data?station=126736" -O observations.json
Kiitos tästä! Mistähän tuokin löytyi?
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: nm - 19.02.17 - klo:22.05
Vajaan viikon havainnot JSON-muodossa (sama data kuin sivulla näkyvä graafisesti selattava Paikalliset säähavainnot):
Koodia: [Valitse]
wget "http://ilmatieteenlaitos.fi/observation-data?station=126736" -O observations.json
Kiitos tästä! Mistähän tuokin löytyi?

Selaimen web-kehitystyökaluilla (Firefoxissa Shift+Ctrl+I tai Työkalut -> Web-työkalut -> Toggle tools) voi näppärästi tutkia mm. JavaScript-koodin tekemiä pyyntöjä ja muuta verkkoliikennettä. Lataa sivu uudelleen, kun työkalut ovat käytössä. Kyseinen pyyntö näkyy Network -> XHR -listauksessa. (XHR=XMLHttpRequest)

Joillain sivuilla on paljon mainoksista johtuvaa liikennettä, joka hidastaa oleellisen informaation etsimistä. Adblock+ auttaa siihen vaivaan.
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: jekku - 20.02.17 - klo:06.49
Kyhäsin skriptin Foreca.fi:n havaintodatan latailuun. Näyttää kaikki sivulla piilevät havaintoasemat.

Lataa:
Koodia: [Valitse]
wget https://raw.githubusercontent.com/nmikkila/weatherdata/master/current_weather/foreca.py
Aja:
Koodia: [Valitse]
python foreca.py http://www.foreca.fi/Finland/Kajaani

Hienosti tulee :)

Mutta kun koetan ohjata tulosteen, esim:
Koodia: [Valitse]
python foreca.py http://www.foreca.fi/Finland/Kajaani | less
niin
Koodia: [Valitse]
Traceback (most recent call last):
  File "foreca.py", line 138, in <module>
    main()
  File "foreca.py", line 135, in main
    pretty_print(parsedObservations)
  File "foreca.py", line 126, in pretty_print
    o["snow_depth"]))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xb0' in position 123: ordinal not in range(128)
(END)

Ilmeisesti tuttu juttu ja jos/kun python tutumpi niin oikaistavissa?
http://stackoverflow.com/questions/9942594/unicodeencodeerror-ascii-codec-cant-encode-character-u-xa0-in-position-20

EDIT:

Ja syyhän oli tuossa kun kutsuin vanhempaa tulkkia,

Koodia: [Valitse]

python3 foreca.py http://www.foreca.fi/Finland/Kajaani | less


toimii - tosin ohittaa ääkköset sujuvasti, mutta se ei ole olennaista tässä tapauksessa.
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
Kirjoitti: nm - 20.02.17 - klo:14.57
Mutta kun koetan ohjata tulosteen, esim:
Koodia: [Valitse]
python foreca.py http://www.foreca.fi/Finland/Kajaani | less
niin
Koodia: [Valitse]
Traceback (most recent call last):
  File "foreca.py", line 138, in <module>
    main()
  File "foreca.py", line 135, in main
    pretty_print(parsedObservations)
  File "foreca.py", line 126, in pretty_print
    o["snow_depth"]))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xb0' in position 123: ordinal not in range(128)
(END)

Ilmeisesti tuttu juttu ja jos/kun python tutumpi niin oikaistavissa?
http://stackoverflow.com/questions/9942594/unicodeencodeerror-ascii-codec-cant-encode-character-u-xa0-in-position-20

EDIT:

Ja syyhän oli tuossa kun kutsuin vanhempaa tulkkia,

Joo, Python 2:ssa ulostulon enkoodaus toimii oudosti joissain tilanteissa, kuten putkituksissa. PYTHONIOENCODING-ympäristömuuttujalla sen voi pakottaa UTF-8:ksi:

Koodia: [Valitse]
PYTHONIOENCODING=utf-8 python2 foreca.py http://www.foreca.fi/Finland/Kajaani | less

Koodia: [Valitse]
python3 foreca.py http://www.foreca.fi/Finland/Kajaani | less

toimii - tosin ohittaa ääkköset sujuvasti, mutta se ei ole olennaista tässä tapauksessa.

Skandien ja muiden erikoismerkkien pitäisi kyllä näkyä, ellei less tai pääte hävitä niitä. Python herjaa ja lopettaa prosessin, jos ei pysty konvertoimaan merkkijonoja häviöttömästi käytössä olevaan merkistöön.
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon? [RATKAISTU]
Kirjoitti: hyttysmyrkky - 19.01.19 - klo:14.25
Tässä vielä yksi esimerkki, miten hankkia viimeisin lämpötila (yms.) Ilmatieteen laitokselta JSON- tai XML-muodossa (1/2019):

JSONista saa poimittua viimeisimmän lämpötilan helposti esimerkiksi JavaScriptillä:
Koodia: [Valitse]
// https://ilmatieteenlaitos.fi/observation-data?station=874863 -----> httpContent
var jsonData = JSON.parse(httpContent);
var temperatureArray = jsonData.t2m;
var lastTemperature = temperatureArray[temperatureArray.length-1];    // [epochtime, value]
var lastTemperatureValue = lastTemperature[1];
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon? [RATKAISTU]
Kirjoitti: _Pete_ - 21.01.19 - klo:08.42
Olen aikaisemmin ryystänyt (wgetillä) sivun
http://www.foreca.fi/Finland/Kajaani
Ja parsinut siitä muutamia detaljeja, kuten lämpötilan ja lumensyvyyden tilastoihini.

Mutta jokunen päivä sitten sivun rakenne muuttunut enkä löydä noita tietoja enää.

Onko joku temppu jolla saa napattua ulkolämpötilan jostain havaintoasemalta ihan tekstiformaatissa?

Hyvin irtoaa, tuolla myöhemmin mainitulla python-palikalla :)

Tulikin jo hyviä vastauksia, tässä muutama muu paikka mistä saa vähän säätietoja muualtakin kuin Suomesta:

https://github.com/chubin/wttr.in

https://www.aviationweather.gov/metar

Metar tiedot on maailman lentokentiltä mitattua säätietoa jotka saa monessa muodossa, viimeisimmät mittaustiedot
per lentokenttä löytyy tekstimuodossa esimerkiksiä täältä:

ftp://tgftp.nws.noaa.gov/data/observations/metar/decoded/

Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon? [RATKAISTU]
Kirjoitti: anonyymi_007 - 30.04.19 - klo:09.46
Eipä ilmatieteenlaitos tätä ole tehnyt mitenkään helposti lähestyttäväksi.
Moni haluais varmaan simppeliä JSONia eikä XML overhead oksennusta.

Tämä https://ilmatieteenlaitos.fi/observation-data?station=1234567 on hyvä löytö. Tämä ei taida olla mikään virallinen API?
Tosin, ois kiva tietää mistä löytyis lisää parametreja, esim. anna vain viimeisin havainto (tosin se viimeisen epoch aika näkyy tossa JSONin alussa). Täytyypä veronmaksajana ja omistajana ;-) kysyä ilmatieteenlaitokselta.

Sitten tossa EPOCH/Unix aikastampissa on liikaa nollia perässä "1556616000000" ->"1556616000".

Onko joku käyttänyt tätä: https://ilmatieteenlaitos.fi/observation-data?station=1234567 jo vuosia? toimii luotettavasti?
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon? [RATKAISTU]
Kirjoitti: nm - 30.04.19 - klo:11.54
Eipä ilmatieteenlaitos tätä ole tehnyt mitenkään helposti lähestyttäväksi.
Moni haluais varmaan simppeliä JSONia eikä XML overhead oksennusta.

WFS on paras yleinen standardi säähavaintojen ja -ennusteiden välittämiseen, ja sen vakioformaatti on XML. Periaatteessa WFS 2.0 voisi tarjota myös JSON-dataa, mutta sitä ei nähtävästi ole toteutettu FMI:n palvelussa.

Tämä https://ilmatieteenlaitos.fi/observation-data?station=1234567 on hyvä löytö. Tämä ei taida olla mikään virallinen API?

Se on FMI:n nettisivua ja varmaankin myös mobiilisovelluksia varten suunniteltu rajapinta. Ei varsinaisesti tarkoitettu avoimen datan lähteeksi, joten saattaa muuttua varoittamatta.


Tosin, ois kiva tietää mistä löytyis lisää parametreja, esim. anna vain viimeisin havainto (tosin se viimeisen epoch aika näkyy tossa JSONin alussa). Täytyypä
veronmaksajana ja omistajana ;-) kysyä ilmatieteenlaitokselta.

Tuskinpa saat muuta vastausta kuin että avoimen datan rajapinta on dokumentoitu ja vapaasti käytettävissä.

Voit tutkia, miten FMI:n sivusto käyttää JSON-rajapintaa eri sivuilla, mutta voi olla niinkin, ettei sieltä saa pelkkää viimeistä havaintoa ulos.


Sitten tossa EPOCH/Unix aikastampissa on liikaa nollia perässä "1556616000000" ->"1556616000".

Se on JavaScript-tyyliin epoch-aikaleima millisekunteina, ja palvelee hyvin rajapinnan tarkoitusta. Jaa luku tuhannella, jos tarvitsee muuntaa sekunneiksi. :)


Onko joku käyttänyt tätä: https://ilmatieteenlaitos.fi/observation-data?station=1234567 jo vuosia? toimii luotettavasti?

No ainakin reilut pari vuotta on nähtävästi toiminut tuon osoitteen kautta. Luulisi olevan suhteellisen luotettava, kun virallinen nettisivu käyttää kyseistä rajapintaa.
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon? [RATKAISTU]
Kirjoitti: anonyymi_007 - 08.05.19 - klo:19.40
Huh, menipä tovi C#:lla. En halunnut käyttää indexejä. Sain ratkaistua tuon anonymous type listalla. Joku tietty voi tähänkin keksiä miten tuon saa rutistettua ilman tuota välioperaatiota -> tai siis tungettua kaiken yhdelle riville. Kun tuossa elementissä on kivasti 2 arvoa, saa ne ulos näppärästi First ja Last propertyillä.

Noh, jos tästä on jollekkin apuja:
Koodia: [Valitse]

                    JObject jsonObj = JObject.Parse(json);
                    // "latestObservationTime" -> 1557340800000
                    var latestEpochTimeStamp = jsonObj.SelectToken("latestObservationTime").Value<double>();
                    //"t2m" -> [[1557335400000,8.7],[1557335400000,8.6] ....]
                    var t2ms = jsonObj.SelectToken("t2m").Select(a => new { UnixTime = (double)a.First, Temperature = (float)a.Last });
                    var temperature = t2ms.FirstOrDefault(b => b.UnixTime == latestEpochTimeStamp).Temperature;
                    // "Humidity" -> -> [[1557335400000,8.7],[1557335400000,8.7] ....]
                    var humis = jsonObj.SelectToken("Humidity").Select(a => new { UnixTime = (double)a.First, Humidity = (int)a.Last });
                    var humidity = humis.FirstOrDefault(b => b.UnixTime == latestEpochTimeStamp).Humidity;
Otsikko: Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon? [RATKAISTU]
Kirjoitti: Roberto - 09.05.19 - klo:05.23
Tarvitsin nopeasti tämän hetken tietoja Vantaalta ja muokkasin tällaisen.
Käyttää gxmessage ohjelmaa.
Laitoin myös otsikot näkymään suomeksi foreca.py tiedostossa.
"null" on muodossa "- "
Koodia: [Valitse]
python3 ./foreca.py http://www.foreca.fi/Finland/Vantaa >/tmp/Vantaa.txt && \
tulos=$(awk 'NR >= 1 && NR <= 13' /tmp/Vantaa.txt >/tmp/Vantaa2.txt ) && \
gxmessage -center -title "Helsinki-Vantaa säätila" -timeout 60 -font "Monospace 10" -buttons "Valmis":1 \
-geometry 420x320 -file /tmp/Vantaa2.txt --wrap