Hoe de QuickNovel webnovellezer is gebouwd in Kotlin
Fans van Aziatische light novels en Engelstalige fictie van Royal Road worden regelmatig met hetzelfde probleem geconfronteerd. Webnovels op een telefoon via een browser lezen is onhandig: pagina's staan vol met banners, er verschijnen video's die automatisch afspelen, en je kunt zelfs geen hoofdstuk openen in de metro zonder netwerkverbinding.
Het QuickNovel-project probeert dit probleem radicaal op te lossen. Het is een gratis open-source Android-applicatie die schone tekst extraheert van tientallen sites en omzet in nette offline boeken.
Waarom een aparte aggregator nodig is
In tegenstelling tot standaard readers zoals Moon+ Reader, verwerkt QuickNovel ook contentlevering. Auteurs slaan boeken niet op hun eigen server op — de app werkt vergelijkbaar met een zoekmachine. Je voert een titel in, QuickNovel stuurt verzoeken naar ondersteunde platforms, haalt HTML-pagina's op, verwijdert de rommel en assembleert hoofdstukken tot een uniforme structuur.
De bronnenlijst vermeldt ongeveer veertig bronnen. Daaronder bevinden zich grote Engelstalige catalogi zoals Royal Road, Scribble Hub en Anna's Archive, evenals specifieke vertaalaggregatoren.
Zo ziet de app-interface eruit tijdens zoeken en downloaden:

Wat interessant is in de broncode
De app is volledig geschreven in Kotlin onder de GPL-3.0-licentie. Als je voor Android ontwikkelt, kun je verschillende praktische oplossingen vinden in de repository-code.
Modulair parser-systeem
Het meest complexe deel van dergelijke applicaties is het ondersteunen van veel verschillende sites. In QuickNovel wordt elke bron beschreven via een provider-abstractie. De basisklasse definieert regels voor zoeken, metadata ophalen en hoofdstuktekst parseren. Het toevoegen van een nieuwe site komt neer op het maken van één bestand met de correcte CSS-selectors of JSON-eindpunten.
Bouwen en verpakken naar EPUB
QuickNovel kan niet alleen tekst weergeven in de ingebouwde reader, maar ook gedownloade hoofdstukken verpakken in het standaard EPUB-formaat. Dit is handig als je liever leest via readers van derden of op een e-reader.
Het hoofdprobleem met deze aanpak
Web scraping heeft een onvermijdelijk nadeel. Zodra site-eigenaren de lay-out veranderen, verhuizen naar een nieuw domein, of agressieve Cloudflare-bescherming inschakelen, breekt de parser.
De project-repository heeft momenteel ongeveer 250 openstaande issues. De meeste daarvan betreffen kapotte providers. Ontwikkeling hier is afhankelijk van community-activiteit: iemand merkt een probleem op, repareert de CSS-selector in de code, en dient een pull request in.
Wie zal dit project nuttig vinden
QuickNovel is de moeite waard om te installeren als je actief webfictie leest en af wilt van advertenties en afhankelijkheid van internetverbinding.
En voor Kotlin-ontwikkelaars is het een goed voorbeeld van hoe je asynchroon laden van honderden pagina's, bestandssysteemoperaties en HTML-parsing kunt organiseren in een echte mobiele applicatie. De broncode is beschikbaar op GitHub.
Gerelateerde projecten