Kirjoittaja Aihe: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon? [RATKAISTU]  (Luettu 20015 kertaa)

jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
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 :)
« Viimeksi muokattu: 05.03.17 - klo:17.00 kirjoittanut jekku »


jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili

kamara

  • Käyttäjä
  • Viestejä: 3031
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #3 : 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ä.


jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #4 : 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 :(

kamara

  • Käyttäjä
  • Viestejä: 3031
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #5 : 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.

jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #6 : 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ä..

kamara

  • Käyttäjä
  • Viestejä: 3031
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #7 : 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.

pata

  • Käyttäjä
  • Viestejä: 50
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #8 : 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.

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11481
    • Profiili
    • Tomin kotisivut
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #9 : 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
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #10 : 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 :)


nm

  • Käyttäjä
  • Viestejä: 16428
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #11 : 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
« Viimeksi muokattu: 19.02.17 - klo:20.37 kirjoittanut nm »

raimo

  • Käyttäjä
  • Viestejä: 4269
  • openSUSE Tumbleweed
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #12 : 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
Tietä käyden tien on vanki. Vapaa on vain umpihanki.
Aaro Hellaakoski

nm

  • Käyttäjä
  • Viestejä: 16428
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #13 : 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
« Viimeksi muokattu: 19.02.17 - klo:20.48 kirjoittanut nm »

pata

  • Käyttäjä
  • Viestejä: 50
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #14 : 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?

nm

  • Käyttäjä
  • Viestejä: 16428
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #15 : 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.
« Viimeksi muokattu: 19.02.17 - klo:22.08 kirjoittanut nm »

jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #16 : 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.
« Viimeksi muokattu: 20.02.17 - klo:07.18 kirjoittanut jekku »

nm

  • Käyttäjä
  • Viestejä: 16428
    • Profiili
Vs: Mistä saa ryystettyä reaaliaikaisen lämpötilatiedon?
« Vastaus #17 : 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.

hyttysmyrkky

  • Käyttäjä
  • Viestejä: 1
    • Profiili
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];
« Viimeksi muokattu: 19.01.19 - klo:15.05 kirjoittanut hyttysmyrkky »

_Pete_

  • Käyttäjä
  • Viestejä: 1845
  • Fufufuuffuuu
    • Profiili
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/