→Pythonに戻る
これなあに?†
ひとことでいえば、 ネット小説をコンソールで読んだり、ダウンロードして 縦書きepub 文書にするPythonスクリプト です。
サイト『小説家になろう』および『カクヨム』を愛用していますが、直接読む以上に読み上げツールで音読する場面が多いのです。 特に運転時!!
専用ソフトを使う方法もありますが、流しっぱなしに対応しているものは意外に少なく、ダウンロードで epub化した後、読み上げツールに読ませるか、Google Playにアップロードして Androidスマホで読むかの二択となります。
しかし自作小説ならepub作成も自在ですが、よその方の作品を読み上げるのはたいへん結構面倒なものです。特に先日、愛用していたAndroid版のepub化ダウンローダが開発終了になってしまったのには困ってしまいました。
──ないならば作るだけよ。それが○○○なのでしょう?
おっと、ン十年ぶりかに変な電波喰らいましたか。
まぁそんなわけで、以前スクレイピングの勉強で試作した、コンソールなろうビューワの魔改造をはじめた次第です、はい。
更新履歴†
novel_core.py†
- 2024/10/30 v0.3.8 キャッシュの期限を30日にしました。なろう本文の英数字を全角化する試験をはじめました。
- 2024/10/30 v0.3.8 Windows環境で、強制UTF-8にしてない環境での動作が完全に対応外に。git on bashでなくてもいいけど、UTF-8なbash環境が作られている必要があります。
- 2024/10/19 v0.3.6 文章を明示的に<p>タグで囲うようにして、段落字下げ処理をCSSでやるようにした。テキストビューワ用は別処理。
- 2024/10/19 v0.3.6 なろう向けとカクヨム向けを明示的に分割、なろうの前書きと後書きを引用で処理するようにした。
novel.py†
- 2024/10/31 v0.8.10 初回起動用の初期化処理を作りました。
- 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そのものはもちろん対応しているのですが、うちは対応しておりません。
レイアウトが崩れます。†
もともと縦書き→横書き変換のうえに画像も読まないってことでデザインもへちまもないですけども、以下のような事もします。
テキストが以下のように編集されます。†
「お待ちください。
我ら四十七名は命など惜しくはありませぬ。
只々、主の無念を晴らす事こそ我らが望み」
↓
「お待ちください。我ら四十七名は命など惜しくはありませぬ。只々、主の無念を晴らす事こそ我らが望み」
あと字下げも行いますが、カッコ類から始まる行は字下げしません(問題があれば知らせてください)
そのほか、今まで観測された不具合†
なんか前読んだページがエラーになります†
- キャッシュが古い?
- 30日の保管期限をつけましたが、--force で強制更新もお試しください。 特にその話が以前の最終話だった場合、次話ができている事があります
突然に表示がおかしくなった。†
- サイトのメンテ中の可能性があります。
- この場合、キャッシュに保存済みの作品だけ快適に読めます。
- 過去の例でいきますと、セキュリティ強化で直接アクセスできなくなったケースもありました。
- こういうケースの時はケースバイケースで、スクリプトの思い切った構造変更で、うちではすぐに対応できないケースもありえます。
アクセスできるのだが次ページが辿れない、変なごみが入るなど細かい不具合が出る。†
サイト構成が変わった可能性があります。当方も見つけ次第対応いたしますが、サイト構成はサイト『小説家になろう』『カクヨム』様のご意向で変わりますので、対応するまでおかしくなってしまうのはどうしようもありません。
必要な環境†
- 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/30 古文拡張とかどうなってんでしょ?†
- キャッシュの有効期限を30日にしてみました。
- あと、なろう限定で本文の英数字全角化のテストを開始しました。
なろう限定なのは、縦書きで見栄えがアレなのの対策テストだからです。半角だけ文字が横倒しになるのは縦書き文書作成歴のある方なら「ああ」と思うでしょう。古くはLaTeXの時代からあるものです。
そういえば昔、LaTeXの日本語古文用拡張ありましたね。あれって pandoc ベースの環境では使えるのですかね?
2024/10/29 キャッシュの有効期限について†
従来は無期限にしてたんですが、利便性を考えると期限を設けた方がなさげですね。
ためしに期限一か月くらいにしてみますか。(古くなると更新メッセージと共にサイトから読み直すようにします。しばしお待ちを)
お問い合わせは、こちらへ。†
→ https://mooa9.hatenablog.jp/entry/2024/10/17/072714