Moikka!
Mikä kieli sopii parhaiden tiedon hakemiseksi selaimelta. Selaimella oleva tieto muuttu reaaliajassa joka sekunti, mutta tietoa tarvitsee hakea tietyssä aikajaksossa esimerkiksi joka viides minuutti.
En osaa ohjelmointia, mutta haluaisin nyt vakavasti oppia.
Mikä ohjelmointi kieli sopii parhaiden yläpuolella olevan ongelman ratkaisemiseksi?
Nyt en oikein ymmärtänyt. Millaista tietoa haet selaimelta?
Määrittele hieman tarkemmin ongelma, jota yrität ratkaista. Kerro vaikka mistä täsmälleen haetaan. Millaista dataa pitäisi saada ja millainen olisi haluttu lopputulos. Tällä hetkellä kysymys ei ole helposti käsiteltävissä, koska ainakin itselleni tulee mieleen, että haluat hakea joltakin nettisivulta jotakin dataa.
Seuraan Degiro.fi sivulta osakkeiden hintoja ja haluan ohjelman, joka seuraa minun puolesta niitä sekä ilmoittaa minulle esimerkiksi jollain äänimerkillä, kun tietty osake alkaa liikkumaan johonkin suuntaan.
Sitä varten tarvitsen ohjelman, joka osaa lukee selaimelta reaaliaikaista dataa ja helpottaa työtäni.
Mikä ohjelmointi kieli tähän asiaan parhaiden sopii?
Sanoisin että Javascriptillä selainlaajennuksen tekeminen olisi ehkä nopeinta. Toinen vaihtoehto olisi "mikä tahansa kieli"* ja suoraan noiden APIin kytkeytyminen.
* En nyt äkkiseltään näe että mikään nykyaikainen kieli olisi suoraan merkittävästi huonompi tai parempi. Lähinnä on kyse siitä mille sinulla se on luonteva toteuttaa. Luultavasti rajapinta on jsoneita hyödyntävä (en lähtenyt tarkistamaan, voit itse katsoa miten se kommunikoi selaimen kehittäjäkonsolilla), joten tietenkään ei ehdoin tahdoin kannata valita jotain antiikkista kieltä jossa ei ole json-kirjastoa saatavilla.
Luin nopeasti täällä olevan JavaScript-perusoppaan enkä löytänyt mitään koodia, millä voisi lukea selaimelta numeroita. Eikö Ohjelmointiputkassa todellakin ole ratkaisua tähän ongelmaan?
Oppaiden tarkoitus on opettaa perusteet ja sitten varsinaisten ongelmien ratkaisu on sitä opitun asian soveltamista.
Tässä on esimerkki, jolla javascript lukee numeron input-elementistä, jonka id on "numero":
var arvo = parseFloat(document.getElementById('numero').value)
Ja piti oikein tarkistaa, niin tuosta putkan 10 vuotta vanhasta oppaastakin kyllä löytyi koodi, millä "voi lukea selaimelta numeroita". Tosin suosittelen ehkä käyttämään hieman tuoreempaa opasta.
Ja ei, ohjelmointiputkasta ei todellakaan löydy valmista ratkaisua kaikkiin mahdollisiin ohjelmointiteknisiin ongelmiin. Esim. Stack Overflowsta saattaa löytyä paremmin, kun siellä on tuhansia kertoja enemmän keskustelua.
Kiitos vastauksesta. Saisinko vielä esimerkin käyttäen parseFloat:a tai mitä vaan, tärkeintä on että numeron hakeminen olisi helppo?
Tehtävä olisi seuraavanlainen:
Pitää hakea talteen kellon aika tämän sivun riviltä, missä lukee:
"Grez [02.03.2018 22:06:17]" ja laittaa se muistiin, jotta sitä voisi käyttää myöhemmin. Kellon aikaa pitäisi myös jatkossa hakee tietyn aika välin jälkeen.
Jos aiot hakea Putkasta uusimpia viestejä, niin tuon merkkijonon parsimisesta on jotain hyötyä. Jos aiot hakea jotain muuta dataa joltain muulta sivustolta, niin älä anna meille väärää esimerkkiä, koska tuhlaat vain aikaamme. Kellonaikoja ei myöskään voi parsia parseFloat-funktiolla, koska ne eivät ole numeroita.
Sitä paitsi oikea vastaus ns. ongelmaan riippuu todellisesta ongelmasta. Jos tehtävänä on vain hakea Putkan viestistä kellonaika, niin se onnistuu esimerkiksi alla olevalla koodilla. Antamasi esimerkki on kaikin puolin heikko, koska selain ei käsittele merkkijonoja vaan html-elementtejä, ja käyttäjän nimi ja kellonaika ovat eri elementeissä.
let item = document.querySelector("#viesti-235041-otsikko span.aika"); let value = item.innerHTML.substring(1, item.innerHTML.length - 1); console.log(value);
Merkijonon sijaan voisi olla kätevämpää käpistellä Date-olioita, mutta Putkan käyttämän päivämäärämuodon muuttaminen sellaiseksi vaatii ylimääräistä käsityötä.
Sorry väärästä esimerkista. Luulin, että sitä voisi käyttää todellisen ongelman ratkaisemiseksi.
Todellinen ongelma, jonka haluaisin ratkaista on: miten saan degiro.fi sivulta (vaati sisäänkirjautumisen) hakea tiettyjen osakkeiden kurssia 3 minuutin välein (kurssit muuttuvat sivulla reaaliaikaisesti)? Haetuilla osakkeiden kursseilla haluan tehdä laskutoimituksia. Kun laskutoimitus on tehty, ehdottaa ohjelma osakkeen ostoa tai myyntiä, kun sen aika tulee. Tärkeä olisi saada myös äänimerkki ehdotuksen yhteydessä, jotta saisin heti huomion.
Minun aivot ovat liian hitaita huomaamaan monen osakkeen kurssimuutoksia saman aikaan, mutta ohjelma pystyisi tekemään päätöksen hetkessä. Kun seuraa tiettyä osaketta, niin jäävät toiset osakkeet ilman huomiota ja kaupat jäävät tekemättä.
Onko ratkaisu liian monimutkainen? Hyvä olisi kuitenkin löytää sellainen.
riksu kirjoitti:
Onko ratkaisu liian monimutkainen? Hyvä olisi kuitenkin löytää sellainen.
Tuollaisen asian tekeminen on aivan triviaalia, menee alle tunti keneltä tahansa joka osaa kunnolla koodata.
Nyt kuitenkin haluat itse tehdä sellaisen, niin olennaisinta olisi tietää mitä jo osaat. Eli mitä kieliä osaat ja mitä osaat tehdä niillä?
Ongelma onkin siinä, että en osaa oikeasti mitään kieltä, kun vaan vähän lukenut sieltä täältä. Olen valmis oppimaan sen vuoksi, että saisin ohjelman lopultaan valmis jonkun koodarin avulla tai vähintään ymmärtämään. Mutta oppiminen vie varmaankin vähintään pari vuotta.
Hyvä uutinen on, että kyseisen ohjelman tekeminen on triviaalia (ei vie paljon aikaa). Pidän mahdollisimman helpoista ratkaisuista.
Jos toimivan ohjelman saisi vaikka viikossa tai vähintään kuukaudessa niin olisin hyvin tyytyväinen. Minulle riittä, että ymmärrän, mitä ohjelma tekee.
Kaiken avun otan vastaan. Jos joku viisampi viitsisi jeesata minua olisin hyvin kiitollinen. Voisin myös korvata työhön kulunut ajan. Kuka haluais otta haasteen vastaan? Toivoisin, että joka kirjoitetun koodirivin jälkeen tulisi kommentti minua varten, mitä kyseinen rivi tekee.
Tein joskus Pythonilla säätiedonhakijan, joka tulosti lämpötiloja terminaaliin. Ehkäpä tästä on hyötyä. Näköjään sivuston koodaus on muuttunut, jolloin koodi tulostaa enää vain auringon nousu- ja laskuajat.
Linuxeissa(, ja myös Windowsiin saatavilla) on wget-ohjelma, jolla voit ladata haluamasi nettisivun. (Siis sivun teksti näyttää samalta kuin Firefox:n crtl+u).
Sen jälkeen yleensä riittää parsia haluamallasi ohjelmointikielellä.
Toki monissa ohjelmointikielissä (kuten PHP:ssä ja Pythonissa) on valmis ominaisuus ainakin laajennuksella, jolla pystyy saman asian tekemään suoraan.
Jos ongelma ei ole nopeuskriittinen, niin suosittelisin scriptikieliä (kuten PHP:tä tai Pythonia), jolla näkee suoraan ilman kääntämisen "tuskaa" oman tuotoksensa.
Noissa wgetissä tai muilla ohjelmilla tehdyissä noudoissa täytyy huomioida että palveluun tarvitsee kirjautua ennen kuin tiedot ovat saatavilla. Eli luultavasti ei riitä että lataa yhden sivun ja parsii sieltä, vaan täytyy tehdä myös kirjautuminen palveluun. Jos palvelussa on captchoja tms, niin voi olla paljon helpompaa vaan kirjautua normaalisti selaimella ja laittaa oma sovellus pyörimään selainlaajennokseen. Tällöin ei tarvitse murehtia sitäkään jos kirjautumislogiikka joskus muuttuu.
Toki vastaavasti jos Degirolta löytyy suoraan API, niin kannattaa käyttää sitä.
En ala nyt sinne rekisteröitymään tai muuten asiaa tutkimaan sen enempää.
Sinulla on jo edellisessä kysymyksessäsi valmista koodia, jossa haetaan nettisivu ja tunnistetaan siellä olevaa tekstiä. Eli tuohon ei tarvitse tehdä montakaan muutosta. Päivitin myös aiheeseen liittyvää koodivinkkiä cURLilla kirjautumisesta.
Kaikenlainen auttaminen olisi helpompaa, jos selittäisit kunnolla, mitä tarkalleen pitää saada aikaan: aiotko hakea jatkuvasti joka minuutti satoja eri lukuja eri sivuilta, vai haluatko vain seurata jonkin yhden sivun muutoksia harvakseltaan? Kukaan ei voi antaa sinulle ohjetta myöskään tietyn luvun hakemisesta tietyltä sivulta, jos et tarkasti kerro, mikä luku pitää saada ja miltä sivulta.
Jos tarkoitus on seurata pörssikursseja, satunnaisen välittäjän nettisivun tutkiminen ei ole järkevä ratkaisu. Kannattaa etsiä jokin sivusto tai palvelu, jossa on juuri kurssien seuraamiseen tarkoitettu rajapinta (API). Ehkä löydät myös ihan valmiita palveluita haluamaasi käyttöön, koska monet sijoittajat haluavat seurata tiettyjä osakekursseja.
Haluaisin tietää sellaista asiaa: näkeekö nettisivun omistaja, jos joku koodari on tehnyt ohjelman, mikä hakee tietoja sivulta olkoon sitten sisäänkirjautuneena tai ei? En halua aiheuttaa harmaita hiuksia, jos luullaan sen takia hakkeriksi.
Tarkistan vielä tuon Metabolixin koodivinkin, kun viime kerralla en saanut sitä toimimaan.
Yritän vastata tarkentaviin kysymyksiin niin hyvin, kuin pystyn.
Lukuja pitää hakea vain pörssin aukioloaikana: Ma-Pe 10:00 - 18:30 3 minuutin välein yhdeltä auki olevalta sivulta, mihin on valittuna kiinnostuskohteena olevat osakkeet(OMX Helsinki 25). Osakkeelle tulee koko ajan kaupankäynnin aikana se viimeinen hinta, mikä kiinnostaa. Oletetaan, että pörssi avataan, nyt menee 3 minuuttia ja nyt haetaan sivulta se viimeinen osakkeen hinta. Sen jälkeen prosessi toistuu pörssin sulkemiseen asti. Pörssi on auki 8,5 tuntia eli 510 minuuttia eli hakuja pitäisi tehdä päivässä 170 kertaa. Musitipaikkoja tarvitaan saman verran eli 170(mahdollisesti riittä pienempikin määrä). Mutta kun 170 muistipaikkaa on täynnä ja haetaan uusi numero, tehdään näin, että vanhin numero poistetaan ja sen tilalle tulee toiseksi vanhin, toiseksi vanhimman tilalle kolmanneksi vanhin ja näin poispäin, kunnes vapautu viimeinen paikka, mihin siirretään uusin viimeksi haettu osakkeen hinta.
Hinta haun aikana lasketaan kaavan avulla tiettyä tulosta (onko osake ylimyyty vai yliostettu). Kun tietyt ehdot ovat toteutuneet, silloin ohjelman pitää anta joku äänimerkki ja ilmoittaa vaikka pop-up ikkunassa, mitä osaketta kannattaa ostaa tai myydä.
Degiros on näkyvissä osakkeiden hinnat reaaliajassa, eikä sivua tarvi päivittää. Hinnat muuttuu silmien edessä koko ajan ja niitä pitäisi olla helppo sieltä hakee? Vaatimus on vain olla sisääkirjautuneena, jotta näkee hinnat jatkuvasti.
riksu kirjoitti:
Haluaisin tietää sellaista asiaa: näkeekö nettisivun omistaja, jos joku koodari on tehnyt ohjelman, mikä hakee tietoja sivulta olkoon sitten sisäänkirjautuneena tai ei? En halua aiheuttaa harmaita hiuksia, jos luullaan sen takia hakkeriksi.
Riippuu siitä miten sen ohjelman toteuttaa. Joka tapauksessa sivun ylläpitäjällä on mahdollista havaita että sivua ladataan suuria määriä esim. tietystä IP osoitteesta tai tietyllä tunnuksella yms.
Nämä on kuitenkin epäolennaisia asioita, kun esim. tällä sivulla on ihan normaalia että arvomuutoksia päivitetään koko ajan, eli selain hakee jatkuvasti sitä uutta tietoa. Jos teet esim. siihen auki pitämääsi selaimeen selainlaajennoksen, joka käsittelee tietoa, niin se ei sivuston suuntaan eroa yhtään mitenkään siitä kuin selaimesi olisi muuten vaan auki.
Tuon osan koko kuvasta, mistä pitäisi hakea lukuja:
Tuote Tunniste/ISIN Viimeisin
Amer Sports Corporation AMEAS / FI0009000285 24,56
Cargotec Oyj CGCBV / FI0009013429 44,80
Elisa Corporation ELI1V / FI0009007884 34,69
Eli muuttujat olisivat tunnisteet: AMEAS, CGCBV, ELI1V ja haettavat lukuarvot niille vastaavasti 24,56; 44,80; 34,69.
Miten saisin ne helposti talteen 3 minuutin välein?
Saisinko lukujen hausta esimerkin PHP-kielellä?
Tuolla on PHP:llä esimerkki jollekin sivulle kirjautumisesta:
http://thisinterestsme.com/php-login-to-website-with-curl/
Arvaan että tiedot tulevat sivustolta JSON muodossa, tuolla on esimerkkejä JSON käsittleystä:
https://www.php.net/manual/en/function.json-decode.php
Aihe on jo aika vanha, joten et voi enää vastata siihen.