Kotlinで構築されたQuickNovel ウェブリーダーアプリの仕組み
アジアのライトノベルやRoyal Roadからの英語フィクションのファンは、同じ問題に繰り返し直面しています。ブラウザでウェブリーダーでウェブ小説をスマホで開くのは不便です。ページにはバナーが散乱し、autoplayingの動画がポップアップし、ネットワーク接続なしでは地下鉄でチャプターすら開けないこともあります。
QuickNovelプロジェクトは、この問題を根本的に解決しようとしています。複数のサイトのクリーンなテキストを抽出し、オフラインで読める整形された本に変換する無料のオープンソースAndroidアプリケーションです。
なぜ個別のアグリゲーターが必要なのか
Moon+ Readerのような標準的なリーダーとは異なり、QuickNovelはコンテンツ配信も担当しています。 著者は自分のサーバーに本を保管していません—この app works similarly to a search engine. You enter a title, QuickNovel sends requests to supported platforms, fetches HTML pages, cleans out the junk, and assembles chapters into a unified structure.
ソースリストは約40のリソースを擁しています。その中にはRoyal Road、Scribble Hub、Anna's Archiveのような大規模な英語カタログ,以及特定のリクエスト先が含まれています。
これが検索とダウンロード中のアプリインターフェースの様子です:

ソースコードの魅力
この app is completely written in Kotlin under the GPL-3.0 license. Android開発者であれば、リポジトリのコード里有用な実装例を見つけられるでしょう。
モジュール式パーサーシステム
このような appの最も複雑な部分は、多くの異なるサイトのサポートです。QuickNovelでは、各ソースはprovider抽象化によって記述されています。ベースクラスは検索、メタデータの取得、チャプターテキストのパースに関するルールを定義しています。新しいサイトの追加は、適切なCSSセレクターまたはJSONエンドポイントを持つ単一ファイルを作成するだけで完了します。
EPUBへのビルドとパッケージング
QuickNovelは、内蔵リーダーでテキストをレンダリングするだけでなく、ダウンロードしたチャプターを標準的なEPUB形式にパッケージできます。これは、サードパーティのリーダーや電子書籍リーダーで読書したい場合に便利です。
このアプローチの主な問題点
ウェブスクレイピングには避けられない欠点があります。サイト管理者がレイアウトを変更したり、新しいドメインに移行したり、Cloudflareの protectionを強化したりすると、パーサーが機能しなくなります。
現在、約250件の未解決issueがリポジトリにあります。そのほとんどはプロバイダーの問題に関するものです。開発はコミュニティのアクティビティに依存しています。誰かが問題を察觉し、コード内のCSSセレクターを修正してpull requestを提出します。
このプロジェクトが役立つ人
ウェブフィクション активно読み、网络连接を切ってでも 广告を避けたいなら、QuickNovelをインストールする価値は十分にあります。
また、Kotlin開発者にとって、实用的なモバイルアプリケーションで数百ページの非同期読み込み、ファイルシステム操作、HTML解析を整理する方法 хороший примерです。ソースコードはGitHubで入手可能です。
関連プロジェクト