RSS-lukija - Viikkotehtävä 7
- Toteuta sovelluksesi käyttäen Pythonia, Javascriptiä ja Flask-frameworkia Googlen App Engine -palvelussa
- Sovelluksen tallentamat tiedot on tallennettava Googlen datastore-tietokantaan (ndb) tai Google Cloud SQL -tietokantaan.
- Sovelluksen tuottamien WWW-sivujen on oltava validia HTML5:sta itse tuotetun HTML-koodin osalta
- Suunnittele sovelluksen tarpeisiin sopiva tietokannan rakenne
- Sovelluksessa saa vapaasti käyttää jQuery-kirjastoa ja sen laajennuksia ja React-kirjastoa laajennoksineen.
- Javascriptin alert-funktiota ei saa käyttää
Taso 1
Toteuta RSS-lukijaohjelma, joka osaa seuraavat asiat:
- Tallentaa RSS-syötteiden osoitteita ja niille annettuja nimiä. Esim. Yle Urheilun syöte. Tallennettuja syötteitä voi myös muokata ja poistaa. Epätoimivaa osoitetta tai osoitetta, joka ei ole rss-syöte, ei saa tallentaa, vaan täytyy antaa selkeä virheilmoitus. Käytä esim. urllib2-kirjastoa. Kts. Issuing HTTP(S) Requests.
- Sovellus listaa tallennetut syötteet niiden nimien mukaisessa aakkosjärjestyksessä. Näistä voidaan valita syöte, jonka sisältöä halutaan lukea.
- Sovellus näyttää yksittäisen valitun syötteen sisältämien tuoreiden juttujen otsikot (title) ja kuvaukset (description). Otsikkoteksti on myös linkki varsinaiselle jutun sivulle.
- Sovellus ymmärtää vähintään RSS 2.0 -muotoisia syötteitä. Syötteen description-kenttä voi sisältää html-koodia. description-kentän sisältö on näytettävä sovelluksen sivulla sellaisenaan eikä html-koodina! Syötteiden sisältämän html-koodin oikeellisuutta ei voida edellyttää, mutta oma html-koodi on oltava ehjää ja HTML5-suosituksen mukaista. Kts. HTML Escaping.
- Sovellus tallentaa ja muistaa syötteet käyttäjäkohtaisesti. Sovellukseen kirjaudutaan Googlen käyttäjätunnuksella. Salasanoja ei saa esiintyä selkokielisinä ohjelmakoodissa tai tietokannassa.
Varmista, että sovellus toimii vähintään kaikilla seuraavilla RSS-syötteillä:
- https://www.hs.fi/rss/tuoreimmat.xml
- https://feeds.yle.fi/uutiset/v1/recent.rss?publisherIds=YLE_UUTISET
- https://feeds.yle.fi/uutiset/v1/mostRead/YLE_UUTISET.rss
- https://www.kela.fi/ajankohtaista/-/asset_publisher/mHBZ5fHNro4S/rss
- https://www.is.fi/rss/digitoday.xml
- http://lifehacker.com/rss
- http://www.neatorama.com/feed
- http://endorfiininmetsastaja.fi/feed/
Sovellus ei saa missään vaiheessa kaatua.
Taso 3
Toteuta taso 1 -mukainen sovellus seuraavilla lisäominaisuuksilla:
- Käyttäjä voi uusien syötteiden osoitteiden syöttämisen lisäksi valita seuraamiaan syötteitä kaikista tietokannan jo sisältämistä syötteistä. Valittavaksi annetaan siis kaikkien käyttäjien tallentamat syötteet. Älä listaa samaa syötettä useampaan kertaan äläkä tallenna tietokantaan samaa syötteen osoitetta, kuin yhden kerran. Käyttäjä voi muokata vain itse tallentamiensa syötteiden tietoja.
- Oletuksena syötteen juttulistaus sisältää vain juttujen otsikot (title) mutta esim. +-merkkiä klikattaessa avataan näkyviin laajempi tähän otsikkoon liittyvä sisältö (description). Voit käyttää details-elementtiä. Jutun otsikko on linkki, joka vie suoraan jutun sivulle.
- Haluamansa yksittäiset jutut voi merkitä suosikeiksi ja sovellus tallentaa ja muistaa ne. Suosikeista saa erikseen oman listauksen ja suosikkeja voi halutessaan poistaa. Tämän voi halutessaan toteuttaa esim. ajaxilla.
- Tallennettuja syötteita ja suosikkiartikkeleita voi laittaa haluamaansa järjestykseen ja sovellus muistaa järjestyksen. Jos järjestystä ei ole annettu niin syötteet ja suosikkiartikkelit listataan aakkosjärjestyksessä. Järjestäminen on tehtävä raahaamalla tai muulla kätevällä tavalla. Pelkkä järjestysnumeron syöttäminen syötteen yhteyteen ei kelpaa.
- Sovellus toimii järkevästi myös mobiililaitteissa ja erikokoisilla näytöillä. Toteuta sovellus Responsive web design-periaatteiden mukaan.
Taso 5
Toteuta taso 3 -mukainen sovellus seuraavilla lisäyksillä ja muutoksilla:
- Jos Javascript on käytettävissä niin sovellus toimii kokonaan yhdellä sivulla ajax-sovelluksena
- Sovelluksen on toimittava myös kokonaan ilman Javascriptiä. Ilman Javascriptiä toimiessaan sovellus saa jakaantua useammalle sivulle, mutta jos selaimessa on Javascript käytössä niin silloin toimitaan yhdellä sivulla. Toinen vaihtoehto on toteuttaa koko sovelluksen käyttöliittymä React-kirjaston avulla.
- Sovellus muistaa mitkä jutut mistäkin syötteestä on jo luettu eli minkä juttujen linkkiä on klikattu tai syötteen sisältämä sisältö avattu näkyviin. Sovelluksessa voi erikseen valita näytetäänkö syötteen listauksessa kaikki jutut vaiko vain lukemattomat jutut.
- Lisää sovellukseen oma sivu/listaus, joka sisältää aina 20 uusinta artikkelia käyttäjän kaikista seuraamista syötteistä etsittynä. Toteuta tämä siten, että syötteitä ei turhaan ladata uudelleen ja uudelleen vaan vain silloin, kun niiden edellisestä lataamisesta on kulunut tarpeeksi kauan (ttl)
Käyttäjien kommentit