これなあに?†
ひとことでいえば、 ネット小説をコンソールで読んだり、ダウンロードして 縦書きepub 文書にするPythonスクリプト です。
サイト『小説家になろう』および『カクヨム』を愛用していますが、音声で読み上げたいニーズがとても多いのです。
しかし自作小説ならともかく、よその方の作品を読み上げるのは結構面倒でしたし、愛用していたAndroid版のepub化ダウンローダは開発中止になってしまったようで。
そこで、自作でぽちぽちと試作しています。
どんな機能があるの?†
以下の3つの機能があります。
- novel URL だけで、コンソールで該当ページを閲覧できます。(ビューワは、環境変数 PAGER で指定してものが使われます)
- 次のページがあったら、終了時にクリップボードに「 novel 次のURL 」がコピーされています。
- novel だけだと、最後に読んだページを勝手に再読込します。
- なろうに限り、 novel 小説のURL すると、 novel 小説のURL/1/ として勝手に 1ページ目にいきます。
- novel --reverse とすると、上の説明とは逆に後ろのページをどんどんたどっていきます。
- novel --site URL で、そのURLを先頭に次のページを探して次々とダウンロードし、タイトルからepubを生成します(pandocが必要)
- 上記ふたつの機能でキャッシュを共有し、がんがん通信できない環境でみも快適な閲覧を可能にします(--forceで強制ダウンロードもできます)
- novel --site でダウンロード中も、 novel URL で別の小説を閲覧できます(キャッシュは共用します)
動作制限について†
テキスト要素のみを取り出す事、またepub化が前提の事もあり以下の問題があります。
画像は無視します。†
これは元々テキストのみがターゲットのためです。epubそのものはもちろん対応しているのですが。
レイアウトが崩れます。†
もともと縦書き→横書き変換のうえに画像も読まないってことでデザインもへちまもないですけども、以下のような事もします。
テキストが以下のように編集されます。†
「お待ちください。
我ら四十七名は命など惜しくはありませぬ。
只々、主の無念を晴らす事こそ我らが望み」
↓
「お待ちください。我ら四十七名は命など惜しくはありませぬ。只々、主の無念を晴らす事こそ我らが望み」
あと字下げも行いますが、カッコ類から始まる行は字下げしません(問題があれば知らせてください)
必要な環境†
- bash環境。別にLinuxでなくても、なんなら git on bashでもいいです。
- ただし git on bashを使う場合、PythonはUTF-8で動くよう.bashrcに設定する必要があります。
- Python(3.9〜3.10あたりを推奨)
- Pandoc(なくてもダウンロードはできます。Markdown形式ですが)
- Pythonのモジュールは以下を読み込んでいます。なければpipで追加が必要。
- from bs4 import BeautifulSoup (スクレイピング)
- import codecs (あまりつかってないが)
- import datetime
- import os
- import re
- import random (迷惑行為防止用。連続ダウンロード時にランダムな時間をわざと遅延させる)
- import textfile
- import time
- import urllib.request
- import mojimoji (epubアイコン作りの補助用)
- import pyperclip (単体閲覧の時、終了と同時に次のページをクリップボードにコピーする)
- import subprocess
- import sys
ダウンロード†
インストール方法†
- ダウンロードしたら、tar -Jxvf で展開して2つのファイルをパスの通ったところに置きます。
- alias novel=novel.py
使い方†
普通にテキスト表示†
novel URL
ビューワには、環境変数 PAGER で指定したビューワが使われます。なければ less の利用を試みます。
次のページがあると、自動的にクリップボードに novel 次のページのURL がコピーされますので、ペーストして実行すれば次々読めます。
なお、こうすると逆に前話をたどれます。
novel --reverse URL
連続ダウンロード(epub化)†
pandocをインストールしたうえで、以下のようにします。
novel --site --author="著者" 第一話のURL
ちなにみに著者を略すと作者が「名無しさん」になります。
モノは揃ってるのに動かない?†
以下を試してください。それぞれ、固定URL用と連続ダウンロード時の履歴を保管しています。
touch ~/.novelrc
touch ~/.novel2rc
キャッシュは以下に保存されます。古いのを削除したり適宜どうぞ。
$HOME/.noveldir
nlist.py 支援スクリプトについて†
$HOME/.novelrcに記録されている過去のアクセスURLとメインタイトルを羅列します。
使い方†
パスの通ったところに置いて実行してください。
nlist.py download†
お問い合わせは、こちらへ。†
→ https://mooa9.hatenablog.jp/entry/2024/10/17/072714