Arvojen poiminta nettisivulta

Forecan sivuilla (foreca.fi) rullaa "SUOMEN SÄÄ JUURI NYT" boksissa lämpimimmät, kylmimmät ja tuulisimmat paikat. Voisiko nuo lukea jotenkin ohjelmallisesti?

"Suomen sää juuri nyt
Lämpimintä klo 12.50

24,0 °C

Ylivieska

24,0 °C

Oulunsalo Pellonpää

26,0 °C

Ylitornio Meltosjärvi

25,8 °C

Sodankylä

25,0 °C

Rovaniemi-Keskusta
Kylmintä klo 12.50

16,3 °C

Nahkiainen

17,0 °C

Muonio Laukukero

9,4 °C

Kilpisjärvi Saana

11,7 °C

Kilpisjärvi

13,9 °C

Kemi I
Tuulisinta klo 12.50

8,0 m/s SW

Rovaniemi Lentoasema Awos
773710
Äänestä

Muut lukivat myös

Vastaukset 77

Vanhimmat

Kyllä, kyllä voisi.

Äänestä
  • Menetelmällä on hieno englanninkielinen nimikin, web scraping.

    Äänestä

Käykö python esimerkki?

Äänestä

Hakeudu nyt lekuriin.. ihan neuvona ystävänä.

Äänestä

Äkkiä vilkastuna esimerkiksi lämpimimmät paikat näyttäisi löytyvän luokan "tr_tmax" jälkeen olevan luokan "ccwrap" sisältä. Siellä on luokka "cclist", jossa "row"-luokkia, missä "val warm" luokassa lämpötila, ja "stn"-luokassa sääasema.

Voi kokeilla nodejs:llä rustata jotain, kunhan ehdin.

Äänestä

ET SITTEN SAANUT KERROTTUA KÄYKÖ PYTHON, niin annan vain minimaalisen esimerkin.

Tiedot voidaan noutaa näinkin vähällä koodilla, mutta tulostuvat vielä ikävästi peräkkäin, ilman välilyöntiä. Tuskin tuo on mikään ongelma sipistellä mieleisekseen.

import requests
from bs4 import BeautifulSoup
url = 'https://www.foreca.fi/'
reqs = requests.get(url)
soup = BeautifulSoup(reqs.text, 'html.parser')
print(soup.find('div', {'class' :'ccwrap'}).text)

Äänestä

Sinun täytyy tehdä sivustolle ns. API-kutsu. JavaScriptillä esimerkki:

fetch('http://example.com/movies.json')
.then(response => response.json())
.then(data => console.log(data));

Tämä tulostaa tiedot konsoliin JSON muodossa. Ainut vaan että tuo Forecan API näyttäisi olevan maksullinen, joskin ilmainen kokeiluversio löytyy:

https://corporate.foreca.com/en/api-point-forecasts

Etsi joku ilmainen API googlaamalla "free weather API"

Jos haluat tallentaa tiedot niin laita console.login tilalle funktio joka tallentaa ne tiedot johonkin.

T. Ammattikoodari

Äänestä
  • Jep, jotain tämmöstä (joka ei tosin tee sitä mitä pyydettiin, tsekkasin vaan tuon kuvion kondikseen):

    const fetch = require("node-fetch");
    const DomParser = require('dom-parser');
    const sivu = "https://foreca.fi"

    fetch(sivu)
    .then(function(response) {
    return response.text()
    })
    .then(function(html) {
    const parser = new DomParser();
    const doc = parser.parseFromString(html, "text/html");
    console.log(doc.getElementsByClassName('tr_tmax')[0].innerHTML);
    })
    .catch(function(e) {
    console.log('Virhe aukaistessa sivua: ', e);
    });

    Äänestä

  • Itse en käyttäisi JavaScript -pohjaisia mentelmiä.

    Liian usein web -sivuston omistajat toteuutavat kaikenlaisia "Anti-JavaScript-WebScraping" -toimintoja. Mutta jos teet kuten neuvoin, eli kaappaat selaimen prosessissa ne Windows API -kutsut, joilla voi tulostaa tekstiä näytölle, niin sitä on web- sivun (tai -palvelimen) omistajan käytännössä mahdoton estää.

    Äänestä

Tehtävä on niin yksinkertainen, että sen olisin voinut tehdä myös Bash Sell komennoin, pythonin sijasta.

Ja tietysti myös JavaScript ja ihan toimivana, ilman mitään APEJA.

Äänestä
  • Jäi sanomatta, että myös kuvakaappaus kyseisestä elementistä voidaan noutaa Bash Shell komentokehotteesta käsin, SIIS siitä ja vain siitä elementistä joka lämpötilat näyttää, EI koko sivusta.

    Äänestä

  • Anonyymi kirjoitti:

    Jäi sanomatta, että myös kuvakaappaus kyseisestä elementistä voidaan noutaa Bash Shell komentokehotteesta käsin, SIIS siitä ja vain siitä elementistä joka lämpötilat näyttää, EI koko sivusta.

    Ja vielä, näin toimii satunnainen harrastelija, josta ei koskaan toivon mukaan tule kusipäistä Ammattikoodaria.

    Äänestä

  • Anonyymi kirjoitti:

    Ja vielä, näin toimii satunnainen harrastelija, josta ei koskaan toivon mukaan tule kusipäistä Ammattikoodaria.

    Näin toimii satunnainen harrastelija, jonka koodit eivät toimi. Mielessäsi ei käynyt, että aloittaja haluaa ehkä myös käsitellä niitä tietoja, ei pelkästään katsella kuvankaappausta?

    T. se sama Ammattikoodari

    Äänestä

  • Anonyymi kirjoitti:

    Näin toimii satunnainen harrastelija, jonka koodit eivät toimi. Mielessäsi ei käynyt, että aloittaja haluaa ehkä myös käsitellä niitä tietoja, ei pelkästään katsella kuvankaappausta?

    T. se sama Ammattikoodari

    Minähän annoin toimivan python koodin, kerroin vain että olisi ollut vaihtoehtoja, ellei python olisi kelvannut.

    Kun taas kusipäinen "Ammattikoodari" ei kyennyt muuta kuin kehumaan itseään, mitään toimivaa ei tainnut netistä löytyä, jouduit kopioimaan asian liittymättömän koodipätkän.

    Äänestä

  • Anonyymi kirjoitti:

    Minähän annoin toimivan python koodin, kerroin vain että olisi ollut vaihtoehtoja, ellei python olisi kelvannut.

    Kun taas kusipäinen "Ammattikoodari" ei kyennyt muuta kuin kehumaan itseään, mitään toimivaa ei tainnut netistä löytyä, jouduit kopioimaan asian liittymättömän koodipätkän.

    Olen puhelimella, mutta olettaen että aloittaja haluaa jotenkin järkevästi käsitellä niitä hakemiaan tietoja, tiedot on saatava puhtaana esimerkiksi JSON tai XML muodossa jolloin ne on haettava rajapinnasta (API). Tuo esimerkkikoodi on tosiaankin kopioitu Mozillan dokumentaatiosta, koska aloittaja ei kertonut mitä hän haluaa tiedoilla tehdä. Toki myös esim. Pythonin pandas-kirjastolla tiedot voi hakea, mutta edelleen niiden on oltava CSV/JSON/XML muodossa jotta niitä voi käsitellä. Lisää aiheesta:

    https://openweathermap.org/api

    https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

    Äänestä

  • Anonyymi kirjoitti:

    Olen puhelimella, mutta olettaen että aloittaja haluaa jotenkin järkevästi käsitellä niitä hakemiaan tietoja, tiedot on saatava puhtaana esimerkiksi JSON tai XML muodossa jolloin ne on haettava rajapinnasta (API). Tuo esimerkkikoodi on tosiaankin kopioitu Mozillan dokumentaatiosta, koska aloittaja ei kertonut mitä hän haluaa tiedoilla tehdä. Toki myös esim. Pythonin pandas-kirjastolla tiedot voi hakea, mutta edelleen niiden on oltava CSV/JSON/XML muodossa jotta niitä voi käsitellä. Lisää aiheesta:

    https://openweathermap.org/api

    https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

    Jos haluaa tiedot Forecan sivuilta, niin sivu pitää ladata ja suodatella halutut tiedot sieltä. Loppujen lopuksi se on vain pelkkää merkkijonojen käpistelyä, kunhan saa vaan sivun lähdekoodin ensin auki tekstimuodossa.

    Äänestä

  • Anonyymi kirjoitti:

    Olen puhelimella, mutta olettaen että aloittaja haluaa jotenkin järkevästi käsitellä niitä hakemiaan tietoja, tiedot on saatava puhtaana esimerkiksi JSON tai XML muodossa jolloin ne on haettava rajapinnasta (API). Tuo esimerkkikoodi on tosiaankin kopioitu Mozillan dokumentaatiosta, koska aloittaja ei kertonut mitä hän haluaa tiedoilla tehdä. Toki myös esim. Pythonin pandas-kirjastolla tiedot voi hakea, mutta edelleen niiden on oltava CSV/JSON/XML muodossa jotta niitä voi käsitellä. Lisää aiheesta:

    https://openweathermap.org/api

    https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

    Höpö höpö, ja huommenna lisää, kun tiedot on noudettu, kuten jo esimerkissä tein, voidaan ne tallentaa minne haluaa, eikä siihen tarvita kuin kaksi komentoa lisää.

    Äänestä

  • Anonyymi kirjoitti:

    Höpö höpö, ja huommenna lisää, kun tiedot on noudettu, kuten jo esimerkissä tein, voidaan ne tallentaa minne haluaa, eikä siihen tarvita kuin kaksi komentoa lisää.

    Pitääkö nyt vääntää rautalangasta? Kyllä, ne tiedot voi teknisesti ottaen hakea ja tallentaa myös ilman rajapintaa. Mutta niiden suodattaminen onkin sitten hauskaa kun datan joukossa on valtava määrä erilaista "roskaa" koska tiedot on tarkoitettu ihmisen luettavaksi, ei ohjelmakoodilla käsiteltäväksi. Jos nettisivu muuttuu, pitää koodi kirjoittaa uudestaan.

    Äänestä

  • Anonyymi kirjoitti:

    Pitääkö nyt vääntää rautalangasta? Kyllä, ne tiedot voi teknisesti ottaen hakea ja tallentaa myös ilman rajapintaa. Mutta niiden suodattaminen onkin sitten hauskaa kun datan joukossa on valtava määrä erilaista "roskaa" koska tiedot on tarkoitettu ihmisen luettavaksi, ei ohjelmakoodilla käsiteltäväksi. Jos nettisivu muuttuu, pitää koodi kirjoittaa uudestaan.

    Jos ja jos. Yleensä API:t vaativat rekisteröitymisen ja maksuttomissa vaihtoehdoissa voi olla rajoituksia. Avointa www-rajapintaa voi käyttää vapaammin. Eihän se tietenkään mitään optimaalista ole, mutta tiedot saa, jos vaan viitsii kaivaa.

    Äänestä

  • Anonyymi kirjoitti:

    Pitääkö nyt vääntää rautalangasta? Kyllä, ne tiedot voi teknisesti ottaen hakea ja tallentaa myös ilman rajapintaa. Mutta niiden suodattaminen onkin sitten hauskaa kun datan joukossa on valtava määrä erilaista "roskaa" koska tiedot on tarkoitettu ihmisen luettavaksi, ei ohjelmakoodilla käsiteltäväksi. Jos nettisivu muuttuu, pitää koodi kirjoittaa uudestaan.

    Suodattamisen 'hankaluus' riippu ihan siitä että minkälainen osaamiskyky ihmisellä on 'käsitellä' ja 'suodattaa' tuollaista 'roskaa'.

    Itse tein juuri yhden rivin ja vajaa parin tusinan merkin mittaisen komentojonokomennon 'bash'illä. joka suodattaa tuon halutun tiedon nyt lähes luettavaan muotoon, mutta, hienostella sitä todellakin vielä pitää että siitä saa järkevän näköisen, eli ei tässä todellakaan vaikeista asioista puhuta...

    Ja niin, tein tämän vain kokeeksi aiempien vastaavien pohjalta, ja tarkoituksenani ei todellakaan ole vääntää tästä mitään toimivaa softaa tai tekelettä vain syystä että asia ei kiinnosta minua.

    Ja jos vääntäisin siitä kunnollisen ja täysin toimivan softan, niin se olisi avoimen lähteen koodia, jota tehdään harrastuksen ja oman mielenkiinnon vuoksi, ja josta ei saa palkkaa.

    Ja tämä siis ei kiinnosta minua siitä yksinkertaisesta syystä että minkälaista kantaa täällä on otettu avoimeen lähdekoodiin että sen palkkaukseen.

    windows-tubuttajat nyt sitten puolestaan näyttäkööt kyntensä että kuinka se tehdään windowsilla...

    Äänestä

  • Anonyymi kirjoitti:

    Pitääkö nyt vääntää rautalangasta? Kyllä, ne tiedot voi teknisesti ottaen hakea ja tallentaa myös ilman rajapintaa. Mutta niiden suodattaminen onkin sitten hauskaa kun datan joukossa on valtava määrä erilaista "roskaa" koska tiedot on tarkoitettu ihmisen luettavaksi, ei ohjelmakoodilla käsiteltäväksi. Jos nettisivu muuttuu, pitää koodi kirjoittaa uudestaan.

    Vielä siihen rajapitoja pitäisi sotkea, yksinkertainen teksti tiedosto jossa on vain se haettu tieto, EI MITÄÄN ROSKAA, luoja varjele mitä sekottamista, ei mikään ihme että on verkosta yritettävä jotain sinne päin olevaa kopioida, mukamas "Ammattikoodari", et ole edes nähnyt sellaista.

    Äänestä

  • Anonyymi kirjoitti:

    Vielä siihen rajapitoja pitäisi sotkea, yksinkertainen teksti tiedosto jossa on vain se haettu tieto, EI MITÄÄN ROSKAA, luoja varjele mitä sekottamista, ei mikään ihme että on verkosta yritettävä jotain sinne päin olevaa kopioida, mukamas "Ammattikoodari", et ole edes nähnyt sellaista.

    Lisätäänpä vielä, koska avauksessa mainittiin vain "voidaanko ne lukea ohjelmallisesti" niin tämänkin pitäsi tehdä se, natiivisti selaimen omalla JavaScript moottorilla.

    var it = document.getElementsByClassName("ccwrap");
    console.log( it[0].innerText )
    console.log( it[1].innerText )
    console.log( it[2].innerText )

    Ei kun F12, Copy ja Paste, ja siinä ne on. Olisi nyt "Ammattikoodari" hätäpäissään vaikku tuon laittanut, eikä huuhaata mennyt verkosta kopioimaan, van kun ei rahkeissa ole varaa niin eipä tietysti.

    Äänestä

  • Anonyymi kirjoitti:

    Lisätäänpä vielä, koska avauksessa mainittiin vain "voidaanko ne lukea ohjelmallisesti" niin tämänkin pitäsi tehdä se, natiivisti selaimen omalla JavaScript moottorilla.

    var it = document.getElementsByClassName("ccwrap");
    console.log( it[0].innerText )
    console.log( it[1].innerText )
    console.log( it[2].innerText )

    Ei kun F12, Copy ja Paste, ja siinä ne on. Olisi nyt "Ammattikoodari" hätäpäissään vaikku tuon laittanut, eikä huuhaata mennyt verkosta kopioimaan, van kun ei rahkeissa ole varaa niin eipä tietysti.

    Lisätäänpä vielä, kun tuollaisesta "Ammattikoodarista" on kysymys, koodi toimii vain kun ollaan kyseisellä sivulla.

    https://www.foreca.fi/

    Äänestä

  • Anonyymi kirjoitti:

    Lisätäänpä vielä, kun tuollaisesta "Ammattikoodarista" on kysymys, koodi toimii vain kun ollaan kyseisellä sivulla.

    https://www.foreca.fi/

    Et voi ihan tosissasi olettaa että aloittaja haluaa tulostaa vain tuon tietyn sivun arvot konsoliin? Ei tuollaisesta ole mitään hyötyä, aloittajan pitää joka tapauksessa mennä selaimellaan sinne sivulle jotta voi edes upottaa tuon sinun koodin kyseiselle sivulle, ja olet vieläpä kovakoodannut elementtien indeksit :D

    Noh minäpä laitan huomenna (tai jos ehdin niin tänään) ammattimaisen ratkaisun niin ymmärrät nimimerkkini.

    Äänestä

  • Anonyymi kirjoitti:

    Lisätäänpä vielä, koska avauksessa mainittiin vain "voidaanko ne lukea ohjelmallisesti" niin tämänkin pitäsi tehdä se, natiivisti selaimen omalla JavaScript moottorilla.

    var it = document.getElementsByClassName("ccwrap");
    console.log( it[0].innerText )
    console.log( it[1].innerText )
    console.log( it[2].innerText )

    Ei kun F12, Copy ja Paste, ja siinä ne on. Olisi nyt "Ammattikoodari" hätäpäissään vaikku tuon laittanut, eikä huuhaata mennyt verkosta kopioimaan, van kun ei rahkeissa ole varaa niin eipä tietysti.

    Tässäpä tämä ratkaisu, tallenna HTML-tiedostona ja kokeile. Saat esimerkin laadukkaasta ratkaisusta jollainen myös Windows 10 muuten on.

    <!DOCTYPE html>
    <html>
    <body>
    <h1>Ammattikoodarin lämpötilahaku</h1><br>
    <p>Käytä pistettä desimaalierottimena</p><br>
    <input type="text" id="latitude" placeholder="Syötä leveysasteet"><br><br>
    <input type="text" id="longitude" placeholder="Syötä pituusasteet"><br><br>
    <button onclick="fetchDataFromAPI()">Hae säätiedot</button><br>
    <script>
    function fetchDataFromAPI() {
    var latitude = document.getElementById("latitude").value;
    var longitude = document.getElementById("longitude").value;
    if (latitude && longitude) {
    fetch('http://www.7timer.info/bin/api.pl?lon=' longitude '&lat=' latitude '&product=astro&output=json')
    .then(response => response.json())
    .then(data => displayData(data));
    } else {
    document.write("Syötä molemmat koodinaatit.")
    }
    }
    function displayData(data) {
    console.log(data);
    for (var i=0;i<data.dataseries.length;i ) {
    document.write("Lämpötila tänään klo " (i 1) ": " data.dataseries[i].temp2m " astetta <br>");
    }
    }
    </script>
    </body>
    </html>

    Äänestä

  • Anonyymi kirjoitti:

    Et voi ihan tosissasi olettaa että aloittaja haluaa tulostaa vain tuon tietyn sivun arvot konsoliin? Ei tuollaisesta ole mitään hyötyä, aloittajan pitää joka tapauksessa mennä selaimellaan sinne sivulle jotta voi edes upottaa tuon sinun koodin kyseiselle sivulle, ja olet vieläpä kovakoodannut elementtien indeksit :D

    Noh minäpä laitan huomenna (tai jos ehdin niin tänään) ammattimaisen ratkaisun niin ymmärrät nimimerkkini.

    Älä vaivaudu, minä ymmärrän erittäin hyvin tuon nimimerkin, ja se tarkoittaa sinun käyttämänä "mistään mitään ymmärtämätön paskanpuhuja".

    Äänestä

  • Anonyymi kirjoitti:

    Älä vaivaudu, minä ymmärrän erittäin hyvin tuon nimimerkin, ja se tarkoittaa sinun käyttämänä "mistään mitään ymmärtämätön paskanpuhuja".

    Menipäs sinulla tunteisiin, minä kun yritän vain auttaa aloittajaa. Ei sinänsä ole uusi ilmiö, että ymmärtämättömät ihmiset haukkuvat niitä jotka ymmärtävät. Mutta kokeile nyt tuota koodia kun kerran vaivauduin käyttämään 10 minuuttia.

    Äänestä

  • Anonyymi kirjoitti:

    Menipäs sinulla tunteisiin, minä kun yritän vain auttaa aloittajaa. Ei sinänsä ole uusi ilmiö, että ymmärtämättömät ihmiset haukkuvat niitä jotka ymmärtävät. Mutta kokeile nyt tuota koodia kun kerran vaivauduin käyttämään 10 minuuttia.

    Sen verran inhoan toisilta kopiointi ja omissa nimissä jakamista, etten varmasti koske pitkällä kepilläkään siihen, muualta kuin koodin alkuperäisestä lähteestä.

    Äänestä

  • Anonyymi kirjoitti:

    Jos ja jos. Yleensä API:t vaativat rekisteröitymisen ja maksuttomissa vaihtoehdoissa voi olla rajoituksia. Avointa www-rajapintaa voi käyttää vapaammin. Eihän se tietenkään mitään optimaalista ole, mutta tiedot saa, jos vaan viitsii kaivaa.

    "Yleensä API:t vaativat rekisteröitymisen ja maksuttomissa vaihtoehdoissa voi olla rajoituksia. Avointa www-rajapintaa voi käyttää vapaammin"

    Aivan... web -sivujen omistajilla on jokin ihmeellinen into kontrolloida, miten sivun tietoja saa heidän mielestään käyttää.

    Äänestä

Enpä sitten maltanut olla viemättä tuota minimaalista esimerkkiä pitemälle, ja nyt sitten jo menikin 21 riviä ( https://s6.gifyu.com/images/www.foreca.fi.py.png ).

Tulostaa tämän näköisen tilanteen ( https://s6.gifyu.com/images/www.foreca.fi.png ). Näitten "Ammattikoodarien" vuoksi olen usein, kuten tässäkin laittanut lähdekoodin kuvana, joutuvatpahan ainakin jotain kirjoittamaan, ettei ihan kopiona pääse omiin nimiinsä ottamaan.

Äänestä
  • Lisätäänpä vielä:

    "Ammattikoodari" saa kopioitua joltakin ja jaettua sen omissa nimissään omien sanojensa mukaan 10 minuutissa. Mutta minulta satunnaisharrastajalta meni tuohon eilen reilu tunti, ja vielä tänä aamuna tuon tulostuksen muotoiluun noin 45 minuuttia.

    Ei 2 tunti 30 minuuttia ole mielestäni vielä pitkä aika, koska melko sujuvasti kaikki tarvittava löytyi omista muistiinpanoista tai verkosta. Siinä vaan käy aina niin että kun olet pitemmän aikaa vaikka Bash Shell skriptien parissa muut pääsee unohtumaan.

    Äänestä

  • Anonyymi kirjoitti:

    Lisätäänpä vielä:

    "Ammattikoodari" saa kopioitua joltakin ja jaettua sen omissa nimissään omien sanojensa mukaan 10 minuutissa. Mutta minulta satunnaisharrastajalta meni tuohon eilen reilu tunti, ja vielä tänä aamuna tuon tulostuksen muotoiluun noin 45 minuuttia.

    Ei 2 tunti 30 minuuttia ole mielestäni vielä pitkä aika, koska melko sujuvasti kaikki tarvittava löytyi omista muistiinpanoista tai verkosta. Siinä vaan käy aina niin että kun olet pitemmän aikaa vaikka Bash Shell skriptien parissa muut pääsee unohtumaan.

    No eipä tuollaiseen mene ammattilaiselta pidempään kuin 10 - 20 minuuttia, koodi kuitenkin puhdasta JavaScriptiä ilman kirjastoja. Ei ole mistään kopioitu, voit aivan vapaasti googlailla. Surullista ettet usko, mutta eipä koodi ole sinulle tarkoitettu vaan aloittajalle.

    En ymmärrä miksi pahastuit nimimerkistäni noin.

    Äänestä

  • Anonyymi kirjoitti:

    No eipä tuollaiseen mene ammattilaiselta pidempään kuin 10 - 20 minuuttia, koodi kuitenkin puhdasta JavaScriptiä ilman kirjastoja. Ei ole mistään kopioitu, voit aivan vapaasti googlailla. Surullista ettet usko, mutta eipä koodi ole sinulle tarkoitettu vaan aloittajalle.

    En ymmärrä miksi pahastuit nimimerkistäni noin.

    Kunpa se olisi ainut mitä et ymmärrä.

    Äänestä

Ohessa javascriptillä tehty räpellykseni, joka on tehty leikkaa-liimaa hengessä pelkillä indexOf ja slice metodeilla.

https://pastebin.com/egkGwMbT

Esimerkkituloste konsoliin:

$ node foreca.js
Lämpimintä klo 13.00
==========================================
Inari, Väylä 27,2 °C
Oulunsalo Pellonpää 26,5 °C
Utsjoki Nuorgam Rajavartioas. 26,0 °C
Ylivieska 25,8 °C
Pori Rautatieasema 25,5 °C

Kylmintä klo 13.00
==========================================
Kilpisjärvi Saana 13,1 °C
Kemi I 16,0 °C
Märket 16,4 °C
Kilpisjärvi 16,5 °C
Kristiinankaupunki-Majakka 17,1 °C

Tuulisinta klo 13.00
==========================================
Pelkosenniemi Pyhätunturi 15,4 m/s S
Muonio Laukukero 13,9 m/s SW
Inari Saariselkä Kaunispää 10,7 m/s S
Muonio Sammaltunturi 10,2 m/s S
Kilpisjärvi Saana 9,8 m/s S

Äänestä
  • Ei liity varsinaisesti aiheeseen, mutta watch-komennolla voi päivittää jonkun komennon tulostuksen halutun väliajoin. Esimerkiksi

    watch -n 600 node foreca.js

    Suorittaa komennon "node foreca.js" 600 sekunnin välein. Tulostus tulee "tyhjään" ruutuun, eli ei vieri kuten normaalisti komennot peräkkäin suorittaessa.

    Äänestä

Viitsisikö joku tehdä bash-skriptin? Wgetillä html, ja sitten vähän filtteröintiä.

Äänestä
  • Tietysti viitsii joku, jopa minäkin. Ei siihen sitä filtteröintiä nyt sitten tullutkaan kuin 6 riviä, mutta sivun lähdekoodi oli tiivistetty, ja sen purkaminen vei 26 riviä. Kaiken kaikkiaan 58 riviä huippu osaamista.

    Kelpaako kuvana?

    Äänestä

  • Anonyymi kirjoitti:

    Tietysti viitsii joku, jopa minäkin. Ei siihen sitä filtteröintiä nyt sitten tullutkaan kuin 6 riviä, mutta sivun lähdekoodi oli tiivistetty, ja sen purkaminen vei 26 riviä. Kaiken kaikkiaan 58 riviä huippu osaamista.

    Kelpaako kuvana?

    No, nyt tulkitaan hiljaisuus myötymisen merkiksi, niinpä tässä tämä kuvana. Mieluummin näin näiden "Ammattikoodarien" vuoksi:

    https://s6.gifyu.com/images/foreca.sh.png

    Äänestä

  • Anonyymi kirjoitti:

    No, nyt tulkitaan hiljaisuus myötymisen merkiksi, niinpä tässä tämä kuvana. Mieluummin näin näiden "Ammattikoodarien" vuoksi:

    https://s6.gifyu.com/images/foreca.sh.png

    Tuota Bash Shell skriptiä yritin tiivistää että olisin saanut sopimaan yhteen kuvaan, pieneksi meni, mutta kyllä siitä selvän saa. Tässä sitten se mitä se tulostaa. Yhtä siisti kuin pythonillakin:

    https://s6.gifyu.com/images/foreca.png

    Äänestä

  • Anonyymi kirjoitti:

    Tuota Bash Shell skriptiä yritin tiivistää että olisin saanut sopimaan yhteen kuvaan, pieneksi meni, mutta kyllä siitä selvän saa. Tässä sitten se mitä se tulostaa. Yhtä siisti kuin pythonillakin:

    https://s6.gifyu.com/images/foreca.png

    Ehkä ei kannata tuota sivun lähdekoodin avaamista toteuttaa samalla tavalla kuin se on tuossa minulla, vaan tekee siitä funktion ja HTML -tageista taulukon. Saattaa lyhentyä muutaman rivin.

    Äänestä

  • Anonyymi kirjoitti:

    No, nyt tulkitaan hiljaisuus myötymisen merkiksi, niinpä tässä tämä kuvana. Mieluummin näin näiden "Ammattikoodarien" vuoksi:

    https://s6.gifyu.com/images/foreca.sh.png

    Mitä Linuxia käytät?

    Äänestä

  • Anonyymi kirjoitti:

    Mitä Linuxia käytät?

    Kyllä tuo Bash Shell skripti toimii kaikissa jakeluissa, joissa on komentotulkkina Bash.

    Äänestä

  • Anonyymi kirjoitti:

    Kyllä tuo Bash Shell skripti toimii kaikissa jakeluissa, joissa on komentotulkkina Bash.

    Ok, tarkennetaan kysymystä: Mikä ikkunointijärjestelmä käytössäsi on?

    Äänestä

Erittäin hienoja ratkaisuja.

Äänestä

Mites tuollaisen yksittäisen sääaseman tietojen nappaaminen Ilmatieteenlaitoksen sivulta? Esimerkiksi Juupajoki, Hyytiälä. https://www.ilmatieteenlaitos.fi/api/weather/observations?fmisid=101317&observations=true&radar=true&daily=true (278,13 KB)

Sieltä tulee jotain tämmöstä, 0–1008 mittausta, joista esimerkki on nro 34.

{"34":{"name":"Hyytiälä","localtz":"Europe/Helsinki","localtime":"20210609T123000","t2m":20.5,"DewPoint":10.1,"Precipitation1h":null,"TotalCloudCover":3,"WindSpeedMS":null,"WindDirection":null,"WindGust":null,"Pressure":1017,"Humidity":51,"Visibility":20000,"SnowDepth":-1}}

Tuo pitänee lukea kokonaan, ja sitten järjestää väärin päin, koska mittaus 1008 vaikuttaisi olevan tuorein. Tai ehkä tuohon kyselyyn (urliin) voi laittaa jonkun rajoituksen. Nyt siinä on "&daily=true", joka saattaisi ladata kuluvan päivän tai edellisen 24 tunnin arvot. Tosin timestamppien perusteella ensimmäinen arvo on viikon vanha, ja mittaukset tapahtuvat 10 minuutin välein.

Äänestä
  • Kyseessä on rajapinta eli API joka palauttaa tiedot JSON-muodossa. Ylempänä on esimerkki miten voit JavaScriptin Fetch:in avulla hakea tiedot ja käydä ne läpi. JSON tarkoittaa avain-arvo pareja eli jos sinulla on tiedot vaikkapa muuttujassa "info" niin voit tulostaa yksittäisiä tietoja tyyliin:

    console.log(info.WindSpeedMS);

    Palstatrollit suuttuivat viimeksi suunnattomasti kun laitoin esimerkkikoodin, mutta jos tarvitset apua niin kerro mitä haluat tehdä, vähät trolleista.

    Äänestä

  • Mitkä tiedot tuosta listasta tulisi poimia mittausta kohde;
    Paikkakunta, aika, näkyvyys, paine, kosteus, jne. Laitetaanko puuttuvan tiedon kohdalle "Nul" tai jotain muuta.

    Voisin hyvinkin luoda vastaavan Bash Shell skriptin, aikani kuluksi. https://s6.gifyu.com/images/supla.png

    Äänestä

  • Katsoin tuosta omasta paikkaliselta sää asemalta noita mittaustuloksia, jotka näyttävät päivittyvän 10min välein, mutta historiaa taaksepäin on vain 2021.06.09 saakka, eli noin 7 vuorokautta.


    2021.06.16 20:10:00 - 2021.06.09 20:40:00 = 552h = 6,98vrk

    Äänestä

  • Voihan vitalis, olen tutustunut useamman tunnin näiden säähavaintoasemia koskeviin kyselyiden syntaksiin, kohta osaan asiat paremin kuin Pekka Pouta, mutta valmista ei vaan ala syntymään. Pakko ruveta tuota 7vrk DATA tumppiasi suodattelemaan, näin se tässä vaiheessa tuntuu paremmin onnistuvan.

    Äänestä

  • Voisin kokeilla tehdä tuosta sellaisen version, joka hakisi lähimmän mittausaseman paikannimen perusteella, ja kertoisi nykyisen lämpötilan ja vaikka vuorokauden keskilämpötilan.

    Äänestä

  • Anonyymi kirjoitti:

    Voisin kokeilla tehdä tuosta sellaisen version, joka hakisi lähimmän mittausaseman paikannimen perusteella, ja kertoisi nykyisen lämpötilan ja vaikka vuorokauden keskilämpötilan.

    Siinä on ajatusta, taitaa mennä työlääksi.

    Äänestä

  • Anonyymi kirjoitti:

    Voisin kokeilla tehdä tuosta sellaisen version, joka hakisi lähimmän mittausaseman paikannimen perusteella, ja kertoisi nykyisen lämpötilan ja vaikka vuorokauden keskilämpötilan.

    Sen verran saanut tässä muiden hommien ohella tehtyä, että nyt jo paikannimen perusteella löytyy lähin sääasema, esim Juupajoen tapauksessa reilun 7 kilometrin päässä. Vielä pitää toteuttaa varsinaisten lämpötila-arvojen nouto ja keskiarvon laskenta ynnä tulostukset. Nyt lähden nauttimaan kesäsäästä.

    $ node sääsovellus.js juupajoki

    {
    fmisid: 101317,
    wmo: 2770,
    lpnn: 2303,
    y: 61.85,
    x: 24.29,
    z: 154,
    'visibility-maximum': 20000,
    started: 1956,
    ended: null,
    name: 'Juupajoki Hyytiälä',
    description: 'Asema sijaitsee noin 6 km luoteeseen Juupajoen kaupunkikeskustasta. Aseman paikkana on pieni niittyaukea lounaaseen viettävällä rinteellä. Lounaispuolella 100-200 m päässä on Kuivajärvi, koillisessa kalliomäki kohoaa 180 m:n korkeudelle merenpinnasta. Niittyaukean kaakkoissektorissa oleva tuuhea metsä varjostaa kesäisin auringon noususta n. klo 13:een asti. Ympäristö on metsäistä osittain soistunutta ylänköä sekä laajaa mäntykangasta.\n'
    'Minimilämpötilat ovat tyyninä ja selkeinä öinä keskimäärin n. 1-2 astetta liian korkeita johtuen kylmän ilman valumisesta aseman länsipuolella olevaan järvi-jokilaaksoon.',
    groups: 'sää, sade, ilmanlaatu (IL)',
    distance: 7.153752805011747
    }

    Äänestä

  • Anonyymi kirjoitti:

    Sen verran saanut tässä muiden hommien ohella tehtyä, että nyt jo paikannimen perusteella löytyy lähin sääasema, esim Juupajoen tapauksessa reilun 7 kilometrin päässä. Vielä pitää toteuttaa varsinaisten lämpötila-arvojen nouto ja keskiarvon laskenta ynnä tulostukset. Nyt lähden nauttimaan kesäsäästä.

    $ node sääsovellus.js juupajoki

    {
    fmisid: 101317,
    wmo: 2770,
    lpnn: 2303,
    y: 61.85,
    x: 24.29,
    z: 154,
    'visibility-maximum': 20000,
    started: 1956,
    ended: null,
    name: 'Juupajoki Hyytiälä',
    description: 'Asema sijaitsee noin 6 km luoteeseen Juupajoen kaupunkikeskustasta. Aseman paikkana on pieni niittyaukea lounaaseen viettävällä rinteellä. Lounaispuolella 100-200 m päässä on Kuivajärvi, koillisessa kalliomäki kohoaa 180 m:n korkeudelle merenpinnasta. Niittyaukean kaakkoissektorissa oleva tuuhea metsä varjostaa kesäisin auringon noususta n. klo 13:een asti. Ympäristö on metsäistä osittain soistunutta ylänköä sekä laajaa mäntykangasta.\n'
    'Minimilämpötilat ovat tyyninä ja selkeinä öinä keskimäärin n. 1-2 astetta liian korkeita johtuen kylmän ilman valumisesta aseman länsipuolella olevaan järvi-jokilaaksoon.',
    groups: 'sää, sade, ilmanlaatu (IL)',
    distance: 7.153752805011747
    }

    Joko alkaa olla valmista.

    Äänestä

  • Anonyymi kirjoitti:

    Joko alkaa olla valmista.

    Kyllä se vähitellen tuossa kehittyy. Tein siihen sellaisen ominaisuuden myös, että sääasemadata haetaan vain tarvittaessa, eli tallennetaan levylle, jos onnistuu. Laitan siihen päivitysväliksi ehkä sitten viikon. Vähentää hieman nettiliikennettä, kun ei tarvitse joka kerta ladata melkein puolen megan jsonia. Pitää vielä lopullista ulostusta miettiä. Kunhan valmistuu, niin avaan varmaan uuden ketjun, johon sitten lisätietoja.


    $ node sääsovellus.js juupajoki

    WeatherStationsData age in minutes: 55
    Arguments: [ 'juupajoki' ]
    Juupajoki Hyytiälä 7.2 km
    average5days: 16.5
    average3days: 18.1
    average1day: 21.1
    lastMeasurement: 18.2
    lastMeasurement time: [ '19.6.2021', '13.30' ]

    $ node sääsovellus.js kevo,utsjoki

    WeatherStationsData age in minutes: 55
    Arguments: [ 'kevo', 'utsjoki' ]
    Utsjoki Kevo 0.4 km
    average5days: 10.4
    average3days: 11.1
    average1day: 12.1
    lastMeasurement: 11.4
    lastMeasurement time: [ '19.6.2021', '13.30' ]

    Äänestä

  • Anonyymi kirjoitti:

    Kyllä se vähitellen tuossa kehittyy. Tein siihen sellaisen ominaisuuden myös, että sääasemadata haetaan vain tarvittaessa, eli tallennetaan levylle, jos onnistuu. Laitan siihen päivitysväliksi ehkä sitten viikon. Vähentää hieman nettiliikennettä, kun ei tarvitse joka kerta ladata melkein puolen megan jsonia. Pitää vielä lopullista ulostusta miettiä. Kunhan valmistuu, niin avaan varmaan uuden ketjun, johon sitten lisätietoja.


    $ node sääsovellus.js juupajoki

    WeatherStationsData age in minutes: 55
    Arguments: [ 'juupajoki' ]
    Juupajoki Hyytiälä 7.2 km
    average5days: 16.5
    average3days: 18.1
    average1day: 21.1
    lastMeasurement: 18.2
    lastMeasurement time: [ '19.6.2021', '13.30' ]

    $ node sääsovellus.js kevo,utsjoki

    WeatherStationsData age in minutes: 55
    Arguments: [ 'kevo', 'utsjoki' ]
    Utsjoki Kevo 0.4 km
    average5days: 10.4
    average3days: 11.1
    average1day: 12.1
    lastMeasurement: 11.4
    lastMeasurement time: [ '19.6.2021', '13.30' ]

    Antaa nyt tuollaista pihalle mitä viestin lopussa. Jos ei kirjoita mitään parametrejä, niin hakee koodissa olevaa oletussääasemaa, joka on tässä tapauksessa id 100971, eli Kaisaniemi, Helsinki.

    Jos laittaa parametriksi kokonaisluvun, niin yritetään hakea sellaista sääasemaa.

    Asem,akoodit löytyy tuolta https://www.ilmatieteenlaitos.fi/havaintoasemat ja mukana on asemat, joissa on ryhmässä mainittu 'sää'. Niitä on vähän yli 200.

    Jos taas laittaa tekstiä, niin yksi sana etsii pelkkää paikkaa, ja tulos on se minkä Paikkatietoikkuna palauttaa ensimmäisenä. Jos taas on kaksi sanaa pilkulla erotettuna, niin haetaan ensimmäistä, mutta suodatetaan jälkimmäisellä sanalla kunta. Esimerkiksi 'Härmälä' hakee Härmälän Kruunupyystä, kun taas 'Härmälä,Tampere' Tampereelta.

    Teen jossain vaiheessa toisen ketjun, mihin postaan lisää toimintaperiaatteesta.

    $ node sääsovellus.js
    Sääasema 'Helsinki Kaisaniemi'
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 22,1°C / 18,8°C / 17,8°C
    Viimeinen mittausarvo 19.6.2021 klo 16.10 on 26,0°C

    $ node sääsovellus.js 101124
    Sääasema 'Tampere Härmälä'
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 21,6°C / 19,2°C / 17,4°C
    Viimeinen mittausarvo 19.6.2021 klo 16.10 on 27,7°C

    $ node sääsovellus.js härmälä
    Haettu 'Härmälä', lähin sääasema 'Kruunupyy Kokkola-Pietarsaari lentoasema', johon matkaa 29,0 km
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 15,9°C / 15,4°C / 14,5°C
    Viimeinen mittausarvo 19.6.2021 klo 16.10 on 17,9°C

    $ node sääsovellus.js härmälä,tampere
    Haettu 'Härmälä, Tampere', lähin sääasema 'Tampere Härmälä', johon matkaa 0,7 km
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 21,6°C / 19,2°C / 17,4°C
    Viimeinen mittausarvo 19.6.2021 klo 16.10 on 27,7°C

    $ node sääsovellus.js tampere
    Haettu 'Tampere', lähin sääasema 'Tampere Tampella', johon matkaa 0,3 km
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 21,4°C / 19,5°C / 17,7°C
    Viimeinen mittausarvo 19.6.2021 klo 16.10 on 23,8°C

    Äänestä

  • Anonyymi kirjoitti:

    Antaa nyt tuollaista pihalle mitä viestin lopussa. Jos ei kirjoita mitään parametrejä, niin hakee koodissa olevaa oletussääasemaa, joka on tässä tapauksessa id 100971, eli Kaisaniemi, Helsinki.

    Jos laittaa parametriksi kokonaisluvun, niin yritetään hakea sellaista sääasemaa.

    Asem,akoodit löytyy tuolta https://www.ilmatieteenlaitos.fi/havaintoasemat ja mukana on asemat, joissa on ryhmässä mainittu 'sää'. Niitä on vähän yli 200.

    Jos taas laittaa tekstiä, niin yksi sana etsii pelkkää paikkaa, ja tulos on se minkä Paikkatietoikkuna palauttaa ensimmäisenä. Jos taas on kaksi sanaa pilkulla erotettuna, niin haetaan ensimmäistä, mutta suodatetaan jälkimmäisellä sanalla kunta. Esimerkiksi 'Härmälä' hakee Härmälän Kruunupyystä, kun taas 'Härmälä,Tampere' Tampereelta.

    Teen jossain vaiheessa toisen ketjun, mihin postaan lisää toimintaperiaatteesta.

    $ node sääsovellus.js
    Sääasema 'Helsinki Kaisaniemi'
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 22,1°C / 18,8°C / 17,8°C
    Viimeinen mittausarvo 19.6.2021 klo 16.10 on 26,0°C

    $ node sääsovellus.js 101124
    Sääasema 'Tampere Härmälä'
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 21,6°C / 19,2°C / 17,4°C
    Viimeinen mittausarvo 19.6.2021 klo 16.10 on 27,7°C

    $ node sääsovellus.js härmälä
    Haettu 'Härmälä', lähin sääasema 'Kruunupyy Kokkola-Pietarsaari lentoasema', johon matkaa 29,0 km
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 15,9°C / 15,4°C / 14,5°C
    Viimeinen mittausarvo 19.6.2021 klo 16.10 on 17,9°C

    $ node sääsovellus.js härmälä,tampere
    Haettu 'Härmälä, Tampere', lähin sääasema 'Tampere Härmälä', johon matkaa 0,7 km
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 21,6°C / 19,2°C / 17,4°C
    Viimeinen mittausarvo 19.6.2021 klo 16.10 on 27,7°C

    $ node sääsovellus.js tampere
    Haettu 'Tampere', lähin sääasema 'Tampere Tampella', johon matkaa 0,3 km
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 21,4°C / 19,5°C / 17,7°C
    Viimeinen mittausarvo 19.6.2021 klo 16.10 on 23,8°C

    Tuli mielenkiintoinen ongelma localen kanssa, kun kokeilin virtuaalikoneessa eri Node-versiolla. Tein ohjelman Noden versiolla 12 ja suomenkielisellä localella. Virtuaalikoneessa oli taas Node 10 ja olikohan englanti.

    Eihän ne päivämäärät ja kellonajat samalla tavalla toimineet. Myös ilmeisesti skandeissa oli ongelmia JSON-tiedoston kanssa, joka korjautui asentamalla Node 12. Silti piti muokata kellonaikarutiinia.

    Kokeilin nyt Docker-kontissa Noden versiolla 14, ja näyttäisi toimivan kuten pitää, esim:

    $ docker run -it --rm -v $PWD:/home/node node:14-alpine ash -c "cd /home/node && node sääsovellus.js juupajoki"
    Haettu 'Juupajoki', lähin sääasema 'Juupajoki Hyytiälä', johon matkaa 7,2 km
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 24,0°C / 22,4°C / 20,0°C
    Viimeinen mittausarvo 21.6.2021 klo 12.20 on 28,5°C

    Äänestä

  • Anonyymi kirjoitti:

    Tuli mielenkiintoinen ongelma localen kanssa, kun kokeilin virtuaalikoneessa eri Node-versiolla. Tein ohjelman Noden versiolla 12 ja suomenkielisellä localella. Virtuaalikoneessa oli taas Node 10 ja olikohan englanti.

    Eihän ne päivämäärät ja kellonajat samalla tavalla toimineet. Myös ilmeisesti skandeissa oli ongelmia JSON-tiedoston kanssa, joka korjautui asentamalla Node 12. Silti piti muokata kellonaikarutiinia.

    Kokeilin nyt Docker-kontissa Noden versiolla 14, ja näyttäisi toimivan kuten pitää, esim:

    $ docker run -it --rm -v $PWD:/home/node node:14-alpine ash -c "cd /home/node && node sääsovellus.js juupajoki"
    Haettu 'Juupajoki', lähin sääasema 'Juupajoki Hyytiälä', johon matkaa 7,2 km
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 24,0°C / 22,4°C / 20,0°C
    Viimeinen mittausarvo 21.6.2021 klo 12.20 on 28,5°C

    Nyt kehittelet sitä siihen suuntaan, että hyvin harvalla on alustaa testata tuloksia.

    Äänestä

  • Anonyymi kirjoitti:

    Nyt kehittelet sitä siihen suuntaan, että hyvin harvalla on alustaa testata tuloksia.

    Dockerin saa kyllä Windowsillekin, vaikka vaatiikin Hyper-V:n. Mielummin käytän tosin Windows-ympäristössä WSL2:sta ja siinä esimerkiksi Debian/Docker -yhdistelmää.

    Äänestä

  • Anonyymi kirjoitti:

    Tuli mielenkiintoinen ongelma localen kanssa, kun kokeilin virtuaalikoneessa eri Node-versiolla. Tein ohjelman Noden versiolla 12 ja suomenkielisellä localella. Virtuaalikoneessa oli taas Node 10 ja olikohan englanti.

    Eihän ne päivämäärät ja kellonajat samalla tavalla toimineet. Myös ilmeisesti skandeissa oli ongelmia JSON-tiedoston kanssa, joka korjautui asentamalla Node 12. Silti piti muokata kellonaikarutiinia.

    Kokeilin nyt Docker-kontissa Noden versiolla 14, ja näyttäisi toimivan kuten pitää, esim:

    $ docker run -it --rm -v $PWD:/home/node node:14-alpine ash -c "cd /home/node && node sääsovellus.js juupajoki"
    Haettu 'Juupajoki', lähin sääasema 'Juupajoki Hyytiälä', johon matkaa 7,2 km
    Lämpötilojen keskiarvo edellisten 1 / 3 / 5 vrk aikana: 24,0°C / 22,4°C / 20,0°C
    Viimeinen mittausarvo 21.6.2021 klo 12.20 on 28,5°C

    Tuo docker-komento tarkoittaa siis seuraavaa:

    docker run -> käynnistetään kontti, tarvittaessa ladataan image (=docker pull)
    -it -> interaktiivinen, eli yhdistetään kontin stdiniin.
    --rm -> remove, poistetaan kontti automaattisesti suorituksen jälkeen
    -v $PWD:/home/node -> yhdistetään isännän nykyinen hakemisto kontin /home/node:en
    node:14-alpine -> imagen nimi ja versio
    ash -c "cd /home/node && node sääsovellus.js juupajoki" ->komennot mitkä suoritetaan

    Eli sääsovellus.js on isännän $PWD-kansiossa, jossa on myös esiladattu sääasemien json-tiedosto, joten sitä ei tarvitse ladata joka kerta uudelleen.

    Äänestä

  • Anonyymi kirjoitti:

    Tuo docker-komento tarkoittaa siis seuraavaa:

    docker run -> käynnistetään kontti, tarvittaessa ladataan image (=docker pull)
    -it -> interaktiivinen, eli yhdistetään kontin stdiniin.
    --rm -> remove, poistetaan kontti automaattisesti suorituksen jälkeen
    -v $PWD:/home/node -> yhdistetään isännän nykyinen hakemisto kontin /home/node:en
    node:14-alpine -> imagen nimi ja versio
    ash -c "cd /home/node && node sääsovellus.js juupajoki" ->komennot mitkä suoritetaan

    Eli sääsovellus.js on isännän $PWD-kansiossa, jossa on myös esiladattu sääasemien json-tiedosto, joten sitä ei tarvitse ladata joka kerta uudelleen.

    Mitä pohjia tuohon tarvitaan, ei taida monellakaan olla valmiina.

    Äänestä

  • Anonyymi kirjoitti:

    Mitä pohjia tuohon tarvitaan, ei taida monellakaan olla valmiina.

    Dockerin asennus, ja imaget löytyy docker hubista.

    https://hub.docker.com/_/hello-world/

    Äänestä


  • Anonyymi kirjoitti:

    Dockerin asennus, ja imaget löytyy docker hubista.

    https://hub.docker.com/_/hello-world/

    Usko että olet ainut noiden taitaja. Ei ihan ensimmäiseksi tulisi tehdä "Hei maailma" juttuja tuolla tavalla.

    Äänestä

  • Anonyymi kirjoitti:

    Usko että olet ainut noiden taitaja. Ei ihan ensimmäiseksi tulisi tehdä "Hei maailma" juttuja tuolla tavalla.

    Kontitusteknologiat ovat nykypäivää, kun kaikki alkaa pyörimään enemmän tai vähemmän pilvessä. Konttien etuna on niiden käyttökelpoisuus erilaisissa "orkesterointisysteemeissä", joissa pyöritellään dynaamisia kontteihin perustuvia mikropalveluita.

    Niissä on helppo toteuttaa kuormantasaus. Tarvittaessa voidaan skaalata palvelu hyödyntämään useampaa konttia ja varaamaan sitä kautta lisää rautaresursseja. Toisaalta taas voidaan ruuhkan hellittäessä vapauttaa resursseja.

    Äänestä

Säätiedotukset on vain arvailuja arvausten joukossa. Huomenna on poutaa, taikka ei ole...

Äänestä
  • Näissä tiedostoissa joita nyt valkataan, ei säätä ennusteta, vaan katsotaan minkälainen se on nyt tai oli eilen.

    Äänestä

Tämä kaavio koostuu kolmesta eri tiedostosta;
https://s6.gifyu.com/images/TempChart.png

1.) Lämpötilojen pominta (*.sh)
2.) Kaavion piirto (*.sh)
3.) Kaavio sivu (HTML)

Kuten kuvastakin voi nähdä alareunan numero jokaista mittausta kohti on liikaa, joten jos tulostaisi vain päivien numeron, näyttäisi fiksummalta.

Äänestä
  • Lisätäänpä vielä:
    Kaavio käyttää Chart.min.js, joka lie ilmainen kaikille, ja lämpötilat poimitaan näin:

    wget -qO- "https://www.ilmatieteenlaitos.fi/api/weather/observations?fmisid=101317&observations=true&radar=true&daily=true" > st.txt

    sed -i 's/},{/}\n{/g' st.txt # },{ jossa pilkusta rivinvaihto
    while IFS= read -r line
    do
    if [[ "$line" == *"name"* ]]; then
    echo -e "$line" | awk -Fname '{print $2}' | cut -d ":" -f5- | cut -d "," -f-1 >> temp.txt
    fi
    done < "st.txt"

    Tuon suorittamisen jälkeen lämpötilat löytyvät temp.txt tiedostosta.

    Äänestä

  • Anonyymi kirjoitti:

    Lisätäänpä vielä:
    Kaavio käyttää Chart.min.js, joka lie ilmainen kaikille, ja lämpötilat poimitaan näin:

    wget -qO- "https://www.ilmatieteenlaitos.fi/api/weather/observations?fmisid=101317&observations=true&radar=true&daily=true" > st.txt

    sed -i 's/},{/}\n{/g' st.txt # },{ jossa pilkusta rivinvaihto
    while IFS= read -r line
    do
    if [[ "$line" == *"name"* ]]; then
    echo -e "$line" | awk -Fname '{print $2}' | cut -d ":" -f5- | cut -d "," -f-1 >> temp.txt
    fi
    done < "st.txt"

    Tuon suorittamisen jälkeen lämpötilat löytyvät temp.txt tiedostosta.

    Kyllä ammattimies on aina ammattimies, hienoa työtä jälleen kerran.

    Äänestä

  • Viikon pituisesta datasta voi tosiaan piirtää ihan hyvää käyrääkin.

    Itse olen nyt päässäni hahmotellut sovellusesimerkin, jolla voi hakea paikannimen perusteella lähintä sääasemaa, jonka arvoja sitten esitetään numeerisesti. Haversine-kaavaa on tarkoitus käyttää etäisyyden määrittelyyn.

    https://en.wikipedia.org/wiki/Haversine_formula

    Koodi tulee tietenkin pastebiniin vapaasti saataville.

    Äänestä

  • Anonyymi kirjoitti:

    Lisätäänpä vielä:
    Kaavio käyttää Chart.min.js, joka lie ilmainen kaikille, ja lämpötilat poimitaan näin:

    wget -qO- "https://www.ilmatieteenlaitos.fi/api/weather/observations?fmisid=101317&observations=true&radar=true&daily=true" > st.txt

    sed -i 's/},{/}\n{/g' st.txt # },{ jossa pilkusta rivinvaihto
    while IFS= read -r line
    do
    if [[ "$line" == *"name"* ]]; then
    echo -e "$line" | awk -Fname '{print $2}' | cut -d ":" -f5- | cut -d "," -f-1 >> temp.txt
    fi
    done < "st.txt"

    Tuon suorittamisen jälkeen lämpötilat löytyvät temp.txt tiedostosta.

    Tuohon meni niin vähän koodia, että taidan tehdä minäkin jotain "parannuksia". Katsotaan nyt sitten, onko niin hyviä että viitsii esitellä muillekin.

    Äänestä

Sämppärin kiusaksi.

Äänestä
  • Suodata "Sodat" katekoria pois, niin pahimmat idioottiketjut eivät näy.

    Äänestä

Windows -ympäristössä tekisin asian näin.

1. Injektoi omatekoinen DLL osaksi samaa prosessia kuin selain (vaatii konekielen osaamista, toki helpompi 32- kuin 64-bittisessä maailmassa, tosin jos teet tuon 32-bittisessä maailmassa, tarvitset myös selaimesta 32-bittisen version, kun käyttöjärjestelmä ei sa slli 32- ja 64 -bittisen koodin sotkemista samaan prosessiin, poikkeuksena Micrsoftin itsensä tekemä ns. systeemitason koodi).

2. Tuo omatekoinen DLL koukuttaa kaikki nämä API -kutsut:

TextOut
ExtTextOut
DrawText
DrawTextEx
PolyTextOut

Kun selain luulee kutsuvansa mitä tahansa näistä funktioista, tekemäsi koukutus ohjaa funktiokutsun omaan versioosi kutsutusta funktiosta.

Oma versiosi tekee 2 asiaa:

1. Kutsuu alkuperäistä Windows API -funktiota.

2. lähettää tiedon kutsutusta Windows API -funktiosta sekä sen parametreistä toiselle (omatekoiselle) sovellukselle.

Tuo toinen sovellus voi sitten kaapata ko. tiedon ja tehdä sillä ihan mitä ikinä haluat !

Edellä kuvattu toki tehoaa vain tekstimuotoiseen tietoon, eli esim. sääkarttaa et saa tuolla tavalla kopioitua.

Tämäkin DLL on helpointa tehdä Delphillä, samoin kuin toinen sovellus, joka kaappaa itselleen ko. DLL:n selaimelta kaappaaman tiedon.

Dll:n lataaminen:

Tee apuohjelma, joka:

1. käynnistää selaimen CreateProcess -funktiolla, mutta käytä flagia CREATE_SUSPENDED

2. Lataa tuon tekemäsi DLL:n selaimen prosessiin.

3. Lopuksi kutsutaan ResumeThread(hThread)

missä hThread identifioi selainprosessin pääsäikeen.

Huomaathan, että Windowsissa hThread ja ThreadID ovat 2 eri asiaa !

Äänestä

Minulla oli viime vuoden tai edellisin aikana, 2 - 3 kuukautta käytössä tuo sääkartan nouto ja liittäminen työpöydän taustakuvaan. Toimi ihan hyvin, mutta kiinnostus katosi tuota kohtaan. Pelkät Bash Shell komennot riittää siihen.

Äänestä
  • Tuolla samalla periaatteella päivystin myös torin rojuja, mutta se ei kauaa olut käytössä.

    Äänestä

Ketjusta on poistettu 3 sääntöjenvastaista viestiä.

Kommentoi aloitusta


Anonyymi kirjoitti:

Forecan sivuilla (foreca.fi) rullaa "SUOMEN SÄÄ JUURI NYT" boksissa lämpimimmät, kylmimmät ja tuulisimmat paikat. Voisiko nuo lukea jotenkin ohjelmallisesti?

"Suomen sää juuri nyt
Lämpimintä klo 12.50

24,0 °C

Ylivieska

24,0 °C

Oulunsalo Pellonpää

26,0 °C

Ylitornio Meltosjärvi

25,8 °C

Sodankylä

25,0 °C

Rovaniemi-Keskusta
Kylmintä klo 12.50

16,3 °C

Nahkiainen

17,0 °C

Muonio Laukukero

9,4 °C

Kilpisjärvi Saana

11,7 °C

Kilpisjärvi

13,9 °C

Kemi I
Tuulisinta klo 12.50

8,0 m/s SW

Rovaniemi Lentoasema Awos

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu