→Pythonに戻る
これなあに?†
ひとことでいえば、 ネット小説をコンソールで読んだり、ダウンロードして 縦書きepub 文書にするPythonスクリプト です。
サイト『小説家になろう』および『カクヨム』を愛用していますが、音声で読み上げたいニーズがとても多いのです。
専用ソフトを使う方法もありますが、私は AndroidスマホでGoogle Playにアップロードし、Android版の読み上げ機能で外出時に読み上げています……が、そのためには epub形式にする必要があります 。
特に オートバイや自動車の運転中、ディスプレイオーディオやスマホで読み上げて音楽のように耳で聴く のは、私はPC用音声合成の歴史と大差ないくらいやってます。
しかし自作小説ならともかく、よその方の作品を読み上げるのは結構面倒でしたし、愛用していたAndroid版のepub化ダウンローダは開発中止になってしまったようで。
そこで、自作でぽちぽちと試作しています。
更新履歴†
novel_core.py†
- 2024/10/19 v0.3.6 文章を明示的に<p>タグで囲うようにして、段落字下げ処理をCSSでやるようにした。テキストビューワ用は別処理。
- 2024/10/19 v0.3.6 なろう向けとカクヨム向けを明示的に分割、なろうの前書きと後書きを引用で処理するようにした。
novel.py†
- 2024/10/19 v0.8.8 文書処理を生テキストから<p></p>に変更、字下げをCSSでやるにつき、前後処理を対応。
- 2024/10/19 v0.8.8 著者と文書タイトルをコマンドラインで指定できるようにした。(未設定の場合、名前は「名無し」タイトルは本文から取得する)
どんな機能があるの?†
以下の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 で別の小説を閲覧できます(キャッシュは共用します)
どんな環境で作っているの?†
Linux(メイン)†
- Linux(Debian 12(bookworm)
- vscode
- Python3.12.0
Windows†
- git on bash for Windows
- さくらエディタ
動作確認環境†
- epub縦書きチェック→Google Play にアップロードして閲覧
- テストに使っている pandoc: 2.17.1.1(Linuxのみ)
- アイコン作成等に使っているImageMagik: 8:6.9.11.60+dfsg-1.6+deb12u2(Linuxのみ)
動作制限について†
無保証です。†
この手のツールのお約束ですが改めて。
本ツールは全くの無保証であり、本ツール利用により発生する利害その他に一切の保証をいたしません。
また『小説家になろう』『カクヨム』様のご意向により公開停止の可能性もございます。そもそも個人の趣味のツールであり、その際にはご容赦ください。
画像は無視します。†
テキスト要素のみを取り出すものなので。
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
ただし、なろうの短編だけは自動判定がうまくないので現状、以下のようにしてください†
novel --short URL
ビューワには、環境変数 PAGER で指定したビューワが使われます。なければ less の利用を試みます。
次のページがあると、自動的にクリップボードに novel 次のページのURL がコピーされますので、ペーストして実行すれば次々読めます。
なお、こうすると逆に前話をたどれます。
novel --reverse URL
連続ダウンロード(epub化)†
pandocをインストールしたうえで、以下のようにします。
novel --site --author="著者" 第一話のURL
ちなにみに著者を略すと作者が「名無しさん」になります。
モノは揃ってるのに動かない?†
以下を試してください。それぞれ、固定URL用と連続ダウンロード時の履歴を保管しています。
touch ~/.novelrc
touch ~/.novel2rc
mkdir ~/.noveldir
キャッシュは以下に保存されます。古いのを削除したり適宜どうぞ。
$HOME/.noveldir
nlist.py 支援スクリプトについて†
$HOME/.novelrcに記録されている過去のアクセスURLとメインタイトルを羅列します。
使い方†
パスの通ったところに置いて実行してください。
nlist.py download†
2024/10/29 キャッシュの有効期限について†
従来は無期限にしてたんですが、利便性を考えると期限を設けた方がなさげですね。
ためしに期限一か月くらいにしてみますか。(古くなると更新メッセージと共にサイトから読み直すようにします。しばしお待ちを)
お問い合わせは、こちらへ。†
→ https://mooa9.hatenablog.jp/entry/2024/10/17/072714