Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: mykkman - 16.08.11 - klo:08.10
-
Olisi tarvetta scriptille joka hakisi nesteen sivuilta (vaatii käyttäjätunnuksen ja salasanan) päivän lämmitysöljyn hinnan ja
listaisi sen tiedostoon.
Tieto on sivulla muodossa: <span id="lblPaivanHinta">Päivän hinta: <b>1,0487 €/l</B><br></span>
Tuosta pitäisi siis saada päivittäin tuo hintatieto listattua samaan tiedostoon.
Olisiko kellään viihtimystä väsätä moista? Itellä kun ei ole hallussa minkäänlaista ohjelmointia, enkä löytänyt
haullakaan lähelle samanlaista mistä olis voinu muokkailla.
Kiitos
-
bashillä jotenkin näin, mikäli se salasana kysellään tietyllä tavalla:
#!/bin/sh
wget -q -O - --user=käyttäjä --password=salasana http://neste.example.com/sivu | sed -n 's/.*Päivän hinta: <b>\([0-9,]*\) €\/l.*/\1/p' > tiedosto.txt
Tuosta voipi sitten muutella tarpeen mukaan. En muista pitääkö joku (muukin) noista sedin lausekkeen merkeistä escapettaa (lisätä eteen \-merkki), mutta katson lisää kotona. Jos haluat tuon aina lisäävän tiedon tuohon tekstitiedostoon lisää toinen > eli blaa blaa >> tiedosto.txt ja jos kirjautuminen hoidetaan nettisivulla olevalla kirjautumislaatikoilla (luultavasti) tarvittaneen eväste selaimesta. Lisäännen sen tähän myöhemmin, ellei joku tee sitä ensin.
Muokkaus: Joku tuossa sed-lausekkeessa mättää, voi olla ihan periaatekin. Siihen wget:iin on lisättävä --load-cookies=keksin_tiedosto jos keksi tarvitaan.
-
#!/bin/sh
wget -q -O - --user=käyttäjä --password=salasana http://neste.example.com/sivu | sed 's/.*<span id="lblPaivanHinta">Päivän hinta: <b>1,0487 €\/l</B><br></span>.*//' > tiedosto.txt
Tämä on yksi syy miksi Linuxin konsoli on todella mahtava ;D
-
wget -q -O - --load-cookies=.config/chromium/Default/Cookies - --user=käyttäjä --password=salasana https://www.neste.fi/neste24/my_neste.aspx?path=2589;2655;2710;2711;2721;2724;2731 | sed -n 's/.*Päivän hinta: <b>\([0-9,]*\) €\/l.*/\1/p' > tiedosto.txt
Tuommoisella koodilla yritin, mutta heittää seuraavaa herjaa:
wget: muisti loppui
2655: komentoa ei löydy
2710: komentoa ei löydy
2711: komentoa ei löydy
2721: komentoa ei löydy
2724: komentoa ei löydy
2731: komentoa ei löydy
-
Kävin katsomassa noita Nesteen sivuja, tein ensin tunnuksen itselleni, en näe hintatietoja missään. Vaatii ilmeisesti käyttämään sivuilla jotain laskinta ensin ? Vai näkyykö nuo sivut eri tavalla kun ei ole asiakasnumeroa ?
-
Joo siellä pitää mennä ensin laske öljytarjous ja siellä laitetaan mitä öljyä ja kuin paljon. Ne tallentuu sitten omiks asetuksiks ja sen jälkeen kun kirjautuu, niin se näyttää sit ton päivän hinnan.
-
wget -q -O - --load-cookies=.config/chromium/Default/Cookies - --user=käyttäjä --password=salasana https://www.neste.fi/neste24/my_neste.aspx?path=2589;2655;2710;2711;2721;2724;2731 | sed -n 's/.*Päivän hinta: <b>\([0-9,]*\) €\/l.*/\1/p' > tiedosto.txt
Jätä nuo salasanat ja käyttäjänimet vipuineen pois ja laita tuo sivun nimi lainausmerkkeihin. Ehkä se auttaa (taaskaan en voi kokeilla, mutta kotona sitten).
-
Kirjautuminen näyttää tapahtuvan sivulla olevan lomakkeen kautta eikä http:n get vasteen perusteella, joten curl lienee tarpeen. Siis koska vaatii lomakkeen post:auksen. Lomakkeen kentät (nimet) ja niiden arvot luetellaan -d parametrin perään &-merkillä eroteltuna. Voi myös olla tarpeen antaa lähdeosoite -e parametriä käyttäen. Jotain tälläista siis:
curl -k -d 'user=mykkman&password=TopSecret' -e https://www.neste.fi/neste24/my_neste.aspx??SelectAccessData=true https://www.neste.fi/neste24/my_neste.aspx??SelectAccessData=true
Jos tulostuu oikean näköisiä tietoja, sitten sed putki perään.
-
Jätä nuo salasanat ja käyttäjänimet vipuineen pois ja laita tuo sivun nimi lainausmerkkeihin. Ehkä se auttaa (taaskaan en voi kokeilla, mutta kotona sitten).
Ei auttanut tuokaan. Ei tosin tuolla tavalla ilmoita mitään virhettä, mutta myöskään tiedostoon ei tallennu mitään.
-
Jos tulostuu oikean näköisiä tietoja, sitten sed putki perään.
Kyllä tulostui oikean näköistä tekstiä, mutta nyt on joku virhe tuossa sed rimpsussa. Herjas tuommoista: curl: (6) Couldn't resolve host 's'
curl -k -d 'user=Mykkman&password=salasana' -e https://www.neste.fi/neste24/my_neste.aspx??SelectAccessData=true https://www.neste.fi/neste24/my_neste.aspx??SelectAccessData=true sed -n 's/.*Päivän hinta: <b>\([0-9,]*\) €\/l.*/\1/p' > tiedosto.txt]
-
No, herjaahan se, kun se putki eli "|"-merkki puuttuu siitä curl ja sed komentojen välistä. Laita
curl -k -d 'user=Mykkman&password=salasana' -e https://www.neste.fi/neste24/my_neste.aspx??SelectAccessData=true https://www.neste.fi/neste24/my_neste.aspx??SelectAccessData=true | sed -n 's/.*Päivän hinta: <b>\([0-9,]*\) €\/l.*/\1/p' > tiedosto.txt]
-
Oho, katos niin puuttui merkki :-[
Nyt ei valita mitään, mutta tiedostoon ei tulostu mitään. Konsoliin tulostaa seuraavan:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
102 2840 0 2840 0 30 3394 35 --:--:-- --:--:-- --:--:-- 5620
-
^ nuo konsolitulosteet on vaan curlin antamia tilatietoja.
Tiedostoon ei tule mitään, jos sed komento ei löydä hintaa. Tarvii vissiin lisäviilausta.
Aja curl litania ilman sed komentoa ja katso missä muodossa hinta on html koodin seassa. Postaa se rivi tänne, niin joku säätää sinulle sed parametrit kohdalleen.
-
Tässä olisi yksinkertainen "suodatin" joka etsii ensin "€/L" rivit ja hukkaa kaiken muun paitsi numerot pois:
| grep "€/l" -i | tr -d -c '[:digit:]' | xargs
Ainut puute että desimaalipilkku tippuu myös samassa kyydissä, jos tuo haittaa niin tämä hieman pidempi versio jättää jäljelle numerot ja desimaalipilkun:
| grep "€/l" -i| tr -d -c '[0123456789,]'| xargs
Edit:
Viritin tuon Nesteen sivun itselleni näyttämään litrahinnan ja kokeilin mitä tuo "curl" yllä hakee, näyttäisi jäävän haku lyhyeksi eli ei näy kuin osa sivusta.
-
Aja curl litania ilman sed komentoa ja katso missä muodossa hinta on html koodin seassa. Postaa se rivi tänne, niin joku säätää sinulle sed parametrit kohdalleen.
Ei tulostunu mitään hintatietoja. Liitin tiedoston liitteenä.
[ylläpito on poistanut liitteen]
-
Joo, huomasin saman eli tuo "curl" ei tiputa sivusta kuin osan, itselläni tippui samanlainen osuus kuin tuossa liitetiedostossa on. Jos tuon sivun saisi tippumaan kokonaan niin tuo toimisi jo. En tiedä mitä maustetta tuonne "curl" :in perään vielä pitäisi antaa että se tiputtaisi kaiken.