pythonで、なろうダウンローダを作ってみる
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
【[[→Pythonに戻る>今さらPython]]】【 [[これはなに?>#sd85...
2024/11/18朝からのアクセス統計: &counter;
------
#ref(480xc.jpg,left,around);
#ref(480x.jpg,left);
#clear
----
#contents
* これなあに? [#sd85dc89]
ひとことでいえば、 ''ネット小説をコンソールで読んだり、ダ...
サイト『小説家になろう』および『カクヨム』を愛用していま...
専用ソフトを使う方法もありますが、流しっぱなしに対応して...
さらに先日、愛用していたAndroid版のepub化ダウンローダが開...
──ないならば作るだけよ。それが○○○なのでしょう?
……というわけで、以前スクレイピングの勉強で試作した、コン...
* 更新履歴 [#x89668ec]
** novel.py [#xd1d2dd3]
- 2024/11/26 v0.9.5 デフォルトでepub生成しないように。い...
- 2024/11/21 v0.9.3 cron上で実行すると発生する問題に対応。
- 2024/11/18 v0.9.3 epub生成用の文字列変換テーブルで H と...
- 2024/11/16 v0.9.2 ダウンロード時に最終ページがダブる事...
- 2024/11/14 v0.9 なろう限定ですが、作者名の自動設定機能...
- 2024/11/07 v0.8.11 連続ダウンロードで次ページがなくなっ...
- 2024/10/31 v0.8.10 初回起動用の初期化処理を作りました。
- 2024/10/19 v0.8.8 文書処理を生テキストから<p></p>に変更...
** novel_core.py [#i62f4f54]
- 2024/10/30 v0.3.8 キャッシュの期限を30日にしました。な...
- 2024/10/30 v0.3.8 Windows環境で、強制UTF-8にしてない環...
- 2024/10/19 v0.3.6 文章を明示的に<p>タグで囲うようにして...
- 2024/10/19 v0.3.6 なろう向けとカクヨム向けを明示的に分...
* どんな機能があるの? [#d05b04a2]
以下の3つの機能があります。
- novel URL だけで、コンソールで該当ページを閲覧できます...
-- 次のページがあったら、終了時にクリップボードに「 novel...
-- novel だけだと、最後に読んだページを勝手に再読込します。
-- なろうに限り、 novel 小説のURL すると、 novel 小説のUR...
-- novel --reverse とすると、上の説明とは逆に後ろのページ...
- novel --site URL で、そのURLを先頭に次のページを探して...
- novel --chain URL で、そのURLを先頭に次のページを探して...
- 上記ふたつの機能でキャッシュを共有し、がんがん通信でき...
- novel --site でダウンロード中も、 novel URL で別の小説...
(注意:キャッシュには有効期限があります。--forceで強制更...
* どんな環境で作っているの? [#sa7d8322]
** Linux(メイン) [#x2ca61e6]
- Linux(Debian 12(bookworm)
- vscode
- Python3.12.0
** Windows [#v90f342c]
- git on bash for Windows
- さくらエディタ
** 動作確認環境 [#cfb1d654]
- epub縦書きチェック→Google Play にアップロードして閲覧
- テストに使っている pandoc: 2.17.1.1(Linuxのみ)
- アイコン作成等に使っているImageMagik: 8:6.9.11.60+dfsg-...
* 動作制限について [#r4935b5e]
** 無保証です。 [#a0e65ae5]
この手のツールのお約束ですが改めて。
本ツールは全くの無保証であり、本ツール利用により発生す...
また『小説家になろう』『カクヨム』様のご意向により公開...
** 画像は無視します。 [#sea0d3ab]
テキスト要素のみを取り出すものなので。
epubそのものはもちろん対応しているのですが、うちは対応し...
** レイアウトが崩れます。 [#hfb056a0]
もともと縦書き→横書き変換のうえに画像も読まないってことで...
*** テキストが以下のように編集されます。 [#he59dad0]
「お待ちください。
我ら四十七名は命など惜しくはありませぬ。
只々、主の無念を晴らす事こそ我らが望み」
↓
「お待ちください。我ら四十七名は命など惜しくはありませぬ...
あと字下げも行いますが、カッコ類から始まる行は字下げしま...
** そのほか、今まで観測された不具合 [#i11c44e9]
*** なんか前読んだページがエラーになります [#s19dd45f]
:キャッシュが古い?|30日の保管期限をつけましたが、--force...
*** 突然に表示がおかしくなった。 [#r6e401a9]
:サイトのメンテ中の可能性があります。|この場合、キャッシ...
:過去の例でいきますと、セキュリティ強化で直接アクセスでき...
*** アクセスできるのだが次ページが辿れない、変なごみが入...
サイト構成が変わった可能性があります。当方も見つけ次第...
* 必要な環境 [#kd4b0d46]
- bash環境。別にLinuxでなくても、なんなら git on bashでも...
-- ただし git on bashを使う場合、PythonはUTF-8で動くよう....
-- $HOME/bin があり、PATHが貼られていること。
- GNUmake
- 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
* ダウンロード [#z62c071d]
- &ref(novel-0.9.5.tar.xz); ''(now!)'' --site指定のみでは...
- &ref(novel-0.9.4.tar.xz); cronでの実行に対応。
- &ref(novel-0.9.3.tar.xz); 文字列変換テーブルで H と I ...
- &ref(novel-0.9.2.tar.xz); 連続ダウンロードで作るepubの...
- &ref(novel_20241111.tar.xz);
- &ref(novel_20241107.tar.xz);
- &ref(novel_20241031.tar.xz);
- &ref(novel_20241030.tar.xz);
- &ref(novel_20241021-2.tar.xz);
- &ref(novel_20241021_1.tar.xz);
- &ref(novel_20241019.tar.xz);
- &ref(novel_20241017.tar.xz);
- &ref(novel_20241016-2.tar.xz);
* インストール [#tdfb0640]
** (新)インストール方法(0.9.2以降) [#v30d6f84]
- ダウンロードしたら、tar -Jxvf で展開して、できた novel ...
- alias novel=novel.py
** (旧)インストール方法 [#v30d6f84]
- ダウンロードしたら、tar -Jxvf で展開して2つのファイル...
- alias novel=novel.py
* 使い方 [#pe0d239c]
** 普通にテキスト表示 [#v753d1f9]
novel URL
*** ただし、なろうの短編だけは自動判定がうまくないので現...
novel --short URL
ビューワには、環境変数 PAGER で指定したビューワが使われま...
次のページがあると、自動的にクリップボードに novel 次のペ...
なお、こうすると逆に前話をたどれます。
novel --reverse URL
*** クリップボードの制限について [#h7fe45cf]
クリップボードは便利ですが、以下の場合にはエラーになって...
- Windowsからteratermでどこかのマシンに入って novel実行
-- これはteratermとpyperclipの通信がうまくいかないのだと...
-- なお git on bashのコンソールなら [CTRL]+Insertでコピー...
-- WSLだと使用コンソールによるでしょう。
- GNOME環境でmlterm等、クリップボードが複数ある環境での動...
-- [CTRL]+Insertでコピー、[SHIFT]+Insertならダメなのに、[...
-- なお、GNOME環境で一部の文字のレイアウトがおかしい問題...
** 連続ダウンロード(epub化) [#td9ae8fc]
pandocをインストールしたうえで、以下のようにします。
novel --site --author="著者" 第一話のURL
- ダウンロード用ディレクトリを用意して、そこに移動して実...
-- ダウンロード履歴は、各ディレクトリのindex.txt に記載さ...
-- 置き場をきちんと決めておくと、*/index.txt で全ダウンロ...
- カクヨムは著者を略すと作者が「名無しさん」になります→0....
- なろうは0.9.2版より作者名を自動取得します。
** キャッシュ作成 [#ad7b9cd6]
ダウンロードしないで、新規キャッシュをひたすら作成するモ...
豊かなネット環境でのんびりバックグラウンドでキャッシュ生...
novel --chain 更新したい最初のURL
どんどん次話をたどってキャッシュを更新していきます。最初...
現在、キャッシュの寿命を一ヶ月に設定していますが、自動取...
* モノは揃ってるのに動かない? [#iea6f651]
以下を試してください。それぞれ、固定URL用と連続ダウンロー...
touch ~/.novelrc
touch ~/.novel2rc
mkdir ~/.noveldir
キャッシュは以下に保存されます。古いのを削除したり適宜ど...
$HOME/.noveldir
* nlist.py 支援スクリプトについて [#r1ce915b]
** 用途 [#af067575]
$HOME/.novelrcに記録されている過去のアクセスURLとメインタ...
** 使い方 [#peb1eba9]
パスの通ったところに置いて実行してください。
** nlist.py download [#d3bb92c4]
- &ref(nlist.py); 2024/10/18更新
* 雑記 [#j1e763cf]
** 2024/11/26 novel --site で自動epub変換しなくなった理由...
そもそも自動epoub変換していたのは /usr/bin/pandoc が存在...
このため、pandocを走らせる処理だけでも分離させる事にしま...
なお、ダウンロードしたアーカイブからepubを生成するには、...
もし必要なら支援シェルを掲載しますが、おそらく皆さんこの...
** 2024/11/16 novel --chain URL の効用につきまして。 [#j4...
これ、ダウンロードしないでローカルキャッシュだけ連続読み...
- あらかじめキャッシュに全部ダウンロードしておきたい。
あとで --site --make して epub生成する時など、いちいち全...
** 2024/10/30 古文拡張とかどうなってんでしょ? [#d82f544f]
- キャッシュの有効期限を30日にしてみました。
- あと、なろう限定で本文の英数字全角化のテストを開始しま...
なろう限定なのは、縦書きで見栄えがアレなのの対策テストだ...
そういえば昔、LaTeXの日本語古文用拡張ありましたね。あれっ...
** 2024/10/29 キャッシュの有効期限について [#oeb0676c]
従来は無期限にしてたんですが、利便性を考えると期限を設け...
ためしに期限一か月くらいにしてみますか。(古くなると更新メ...
* お問い合わせは、こちらへ。 [#l6145bc2]
→ https://mooa9.hatenablog.jp/entry/2024/10/17/072714
終了行:
【[[→Pythonに戻る>今さらPython]]】【 [[これはなに?>#sd85...
2024/11/18朝からのアクセス統計: &counter;
------
#ref(480xc.jpg,left,around);
#ref(480x.jpg,left);
#clear
----
#contents
* これなあに? [#sd85dc89]
ひとことでいえば、 ''ネット小説をコンソールで読んだり、ダ...
サイト『小説家になろう』および『カクヨム』を愛用していま...
専用ソフトを使う方法もありますが、流しっぱなしに対応して...
さらに先日、愛用していたAndroid版のepub化ダウンローダが開...
──ないならば作るだけよ。それが○○○なのでしょう?
……というわけで、以前スクレイピングの勉強で試作した、コン...
* 更新履歴 [#x89668ec]
** novel.py [#xd1d2dd3]
- 2024/11/26 v0.9.5 デフォルトでepub生成しないように。い...
- 2024/11/21 v0.9.3 cron上で実行すると発生する問題に対応。
- 2024/11/18 v0.9.3 epub生成用の文字列変換テーブルで H と...
- 2024/11/16 v0.9.2 ダウンロード時に最終ページがダブる事...
- 2024/11/14 v0.9 なろう限定ですが、作者名の自動設定機能...
- 2024/11/07 v0.8.11 連続ダウンロードで次ページがなくなっ...
- 2024/10/31 v0.8.10 初回起動用の初期化処理を作りました。
- 2024/10/19 v0.8.8 文書処理を生テキストから<p></p>に変更...
** novel_core.py [#i62f4f54]
- 2024/10/30 v0.3.8 キャッシュの期限を30日にしました。な...
- 2024/10/30 v0.3.8 Windows環境で、強制UTF-8にしてない環...
- 2024/10/19 v0.3.6 文章を明示的に<p>タグで囲うようにして...
- 2024/10/19 v0.3.6 なろう向けとカクヨム向けを明示的に分...
* どんな機能があるの? [#d05b04a2]
以下の3つの機能があります。
- novel URL だけで、コンソールで該当ページを閲覧できます...
-- 次のページがあったら、終了時にクリップボードに「 novel...
-- novel だけだと、最後に読んだページを勝手に再読込します。
-- なろうに限り、 novel 小説のURL すると、 novel 小説のUR...
-- novel --reverse とすると、上の説明とは逆に後ろのページ...
- novel --site URL で、そのURLを先頭に次のページを探して...
- novel --chain URL で、そのURLを先頭に次のページを探して...
- 上記ふたつの機能でキャッシュを共有し、がんがん通信でき...
- novel --site でダウンロード中も、 novel URL で別の小説...
(注意:キャッシュには有効期限があります。--forceで強制更...
* どんな環境で作っているの? [#sa7d8322]
** Linux(メイン) [#x2ca61e6]
- Linux(Debian 12(bookworm)
- vscode
- Python3.12.0
** Windows [#v90f342c]
- git on bash for Windows
- さくらエディタ
** 動作確認環境 [#cfb1d654]
- epub縦書きチェック→Google Play にアップロードして閲覧
- テストに使っている pandoc: 2.17.1.1(Linuxのみ)
- アイコン作成等に使っているImageMagik: 8:6.9.11.60+dfsg-...
* 動作制限について [#r4935b5e]
** 無保証です。 [#a0e65ae5]
この手のツールのお約束ですが改めて。
本ツールは全くの無保証であり、本ツール利用により発生す...
また『小説家になろう』『カクヨム』様のご意向により公開...
** 画像は無視します。 [#sea0d3ab]
テキスト要素のみを取り出すものなので。
epubそのものはもちろん対応しているのですが、うちは対応し...
** レイアウトが崩れます。 [#hfb056a0]
もともと縦書き→横書き変換のうえに画像も読まないってことで...
*** テキストが以下のように編集されます。 [#he59dad0]
「お待ちください。
我ら四十七名は命など惜しくはありませぬ。
只々、主の無念を晴らす事こそ我らが望み」
↓
「お待ちください。我ら四十七名は命など惜しくはありませぬ...
あと字下げも行いますが、カッコ類から始まる行は字下げしま...
** そのほか、今まで観測された不具合 [#i11c44e9]
*** なんか前読んだページがエラーになります [#s19dd45f]
:キャッシュが古い?|30日の保管期限をつけましたが、--force...
*** 突然に表示がおかしくなった。 [#r6e401a9]
:サイトのメンテ中の可能性があります。|この場合、キャッシ...
:過去の例でいきますと、セキュリティ強化で直接アクセスでき...
*** アクセスできるのだが次ページが辿れない、変なごみが入...
サイト構成が変わった可能性があります。当方も見つけ次第...
* 必要な環境 [#kd4b0d46]
- bash環境。別にLinuxでなくても、なんなら git on bashでも...
-- ただし git on bashを使う場合、PythonはUTF-8で動くよう....
-- $HOME/bin があり、PATHが貼られていること。
- GNUmake
- 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
* ダウンロード [#z62c071d]
- &ref(novel-0.9.5.tar.xz); ''(now!)'' --site指定のみでは...
- &ref(novel-0.9.4.tar.xz); cronでの実行に対応。
- &ref(novel-0.9.3.tar.xz); 文字列変換テーブルで H と I ...
- &ref(novel-0.9.2.tar.xz); 連続ダウンロードで作るepubの...
- &ref(novel_20241111.tar.xz);
- &ref(novel_20241107.tar.xz);
- &ref(novel_20241031.tar.xz);
- &ref(novel_20241030.tar.xz);
- &ref(novel_20241021-2.tar.xz);
- &ref(novel_20241021_1.tar.xz);
- &ref(novel_20241019.tar.xz);
- &ref(novel_20241017.tar.xz);
- &ref(novel_20241016-2.tar.xz);
* インストール [#tdfb0640]
** (新)インストール方法(0.9.2以降) [#v30d6f84]
- ダウンロードしたら、tar -Jxvf で展開して、できた novel ...
- alias novel=novel.py
** (旧)インストール方法 [#v30d6f84]
- ダウンロードしたら、tar -Jxvf で展開して2つのファイル...
- alias novel=novel.py
* 使い方 [#pe0d239c]
** 普通にテキスト表示 [#v753d1f9]
novel URL
*** ただし、なろうの短編だけは自動判定がうまくないので現...
novel --short URL
ビューワには、環境変数 PAGER で指定したビューワが使われま...
次のページがあると、自動的にクリップボードに novel 次のペ...
なお、こうすると逆に前話をたどれます。
novel --reverse URL
*** クリップボードの制限について [#h7fe45cf]
クリップボードは便利ですが、以下の場合にはエラーになって...
- Windowsからteratermでどこかのマシンに入って novel実行
-- これはteratermとpyperclipの通信がうまくいかないのだと...
-- なお git on bashのコンソールなら [CTRL]+Insertでコピー...
-- WSLだと使用コンソールによるでしょう。
- GNOME環境でmlterm等、クリップボードが複数ある環境での動...
-- [CTRL]+Insertでコピー、[SHIFT]+Insertならダメなのに、[...
-- なお、GNOME環境で一部の文字のレイアウトがおかしい問題...
** 連続ダウンロード(epub化) [#td9ae8fc]
pandocをインストールしたうえで、以下のようにします。
novel --site --author="著者" 第一話のURL
- ダウンロード用ディレクトリを用意して、そこに移動して実...
-- ダウンロード履歴は、各ディレクトリのindex.txt に記載さ...
-- 置き場をきちんと決めておくと、*/index.txt で全ダウンロ...
- カクヨムは著者を略すと作者が「名無しさん」になります→0....
- なろうは0.9.2版より作者名を自動取得します。
** キャッシュ作成 [#ad7b9cd6]
ダウンロードしないで、新規キャッシュをひたすら作成するモ...
豊かなネット環境でのんびりバックグラウンドでキャッシュ生...
novel --chain 更新したい最初のURL
どんどん次話をたどってキャッシュを更新していきます。最初...
現在、キャッシュの寿命を一ヶ月に設定していますが、自動取...
* モノは揃ってるのに動かない? [#iea6f651]
以下を試してください。それぞれ、固定URL用と連続ダウンロー...
touch ~/.novelrc
touch ~/.novel2rc
mkdir ~/.noveldir
キャッシュは以下に保存されます。古いのを削除したり適宜ど...
$HOME/.noveldir
* nlist.py 支援スクリプトについて [#r1ce915b]
** 用途 [#af067575]
$HOME/.novelrcに記録されている過去のアクセスURLとメインタ...
** 使い方 [#peb1eba9]
パスの通ったところに置いて実行してください。
** nlist.py download [#d3bb92c4]
- &ref(nlist.py); 2024/10/18更新
* 雑記 [#j1e763cf]
** 2024/11/26 novel --site で自動epub変換しなくなった理由...
そもそも自動epoub変換していたのは /usr/bin/pandoc が存在...
このため、pandocを走らせる処理だけでも分離させる事にしま...
なお、ダウンロードしたアーカイブからepubを生成するには、...
もし必要なら支援シェルを掲載しますが、おそらく皆さんこの...
** 2024/11/16 novel --chain URL の効用につきまして。 [#j4...
これ、ダウンロードしないでローカルキャッシュだけ連続読み...
- あらかじめキャッシュに全部ダウンロードしておきたい。
あとで --site --make して epub生成する時など、いちいち全...
** 2024/10/30 古文拡張とかどうなってんでしょ? [#d82f544f]
- キャッシュの有効期限を30日にしてみました。
- あと、なろう限定で本文の英数字全角化のテストを開始しま...
なろう限定なのは、縦書きで見栄えがアレなのの対策テストだ...
そういえば昔、LaTeXの日本語古文用拡張ありましたね。あれっ...
** 2024/10/29 キャッシュの有効期限について [#oeb0676c]
従来は無期限にしてたんですが、利便性を考えると期限を設け...
ためしに期限一か月くらいにしてみますか。(古くなると更新メ...
* お問い合わせは、こちらへ。 [#l6145bc2]
→ https://mooa9.hatenablog.jp/entry/2024/10/17/072714
ページ名: