narou 1.5.1 → 1.5.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of narou might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +1 -2
- data/ChangeLog.md +13 -1
- data/README.md +27 -20
- data/lib/command.rb +1 -0
- data/lib/command/mail.rb +131 -0
- data/lib/command/send.rb +5 -2
- data/lib/device.rb +6 -0
- data/lib/device/library/cygwin.rb +27 -0
- data/lib/downloader.rb +4 -4
- data/lib/helper.rb +18 -1
- data/lib/illustration.rb +8 -3
- data/lib/mailer.rb +67 -0
- data/lib/novelconverter.rb +6 -0
- data/lib/novelsetting.rb +1 -1
- data/lib/template.rb +3 -1
- data/lib/version.rb +1 -1
- data/narou.bat +14 -0
- data/narou.gemspec +13 -0
- data/preset/mail_setting.yaml +34 -0
- data/webnovel/syosetu.org.yaml +4 -1
- data/webnovel/www.mai-net.net.yaml +3 -3
- metadata +33 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 595a96495447d3eeedd9c2c2a0b4a304e558ac7b
|
4
|
+
data.tar.gz: abac428a8f6a722c32904ccd63cd861090cc3dc3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2bc074eed053d3d8ca3b8c8817b8ecc4695339d6b435dd8c0e6945e6b71e49ab85780c6cafb6a793ba03f56cc786d0c03629b8d2246191614df2aba372862e1b
|
7
|
+
data.tar.gz: 27f17c11f9449adef8f54d6aca761d90532447621fe24dfcd5e675ff75cbecefa3fe7db2d2100c9d9003710fb559d1f942d7ac64b38ccd61dea318c5dd83dae4
|
data/.gitignore
CHANGED
data/ChangeLog.md
CHANGED
@@ -2,6 +2,18 @@
|
|
2
2
|
更新履歴 - ChangeLog
|
3
3
|
--------------------
|
4
4
|
|
5
|
+
2014/03/09 : **1.5.2**
|
6
|
+
* 追加機能もしくは仕様変更
|
7
|
+
- **Cygwin** に対応しました(laplace22さんによる実装)
|
8
|
+
- `narou mail` コマンドを追加しました
|
9
|
+
+ 主にSend to Kindleを使うことを想定したコマンドです。送信用にメールアドレスが必要です
|
10
|
+
+ 初めて `narou mail` コマンドを使った際に、自動で設定用ファイルが作成されます。そのファイルを
|
11
|
+
編集することで初めてコマンドが使えるようになります
|
12
|
+
- setting.ini の `enable_transform_date` をデフォルトで false に変更(新規DLから反映)
|
13
|
+
* Bug Fix
|
14
|
+
- ハーメルンで前書き後書きが正常に取得出来ない問題を修正
|
15
|
+
- ハーメルンでダウンロード時にエラーが出る場合があった問題を修正 #43
|
16
|
+
|
5
17
|
2014/03/07 : **1.5.1**
|
6
18
|
* 追加機能もしくは仕様変更
|
7
19
|
- `narou d Nコード1,Nコード2,URL1 --multiple` のように、スペース区切り以外に `,` で区切れる機能を追加しました
|
@@ -11,7 +23,7 @@
|
|
11
23
|
- ルビ記号が入れ子になっている時に正常にルビ化できていなかった問題を修正
|
12
24
|
- NKFによって全角ダッシュ(u2015)が全角マイナス?(u2014)に変換されてしまう問題を修正
|
13
25
|
- サブタイトルにタブ文字が入っている場合にダウンロード中にエラーが出る問題を修正
|
14
|
-
-
|
26
|
+
- ノクターンノベルズ及びムーンライトノベルズをNコードを指定して2個以上同時にダウンロードした場合に、
|
15
27
|
2個目以降が正常にDL出来ない問題を修正
|
16
28
|
|
17
29
|
2014/03/06 : **1.5.0.2**
|
data/README.md
CHANGED
@@ -6,10 +6,13 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
|
|
6
6
|
このアプリは[小説家になろう](http://syosetu.com/)、[小説を読もう!](http://yomou.syosetu.com/)で公開されている小説の管理、
|
7
7
|
及び電子書籍データへの変換を支援します。縦書き用に特化されており、
|
8
8
|
横書き用に特化されたWEB小説を違和感なく縦書きで読むことが出来るようになります。
|
9
|
-
|
9
|
+
また、校正機能もありますので、小説としての一般的な整形ルールに矯正します。(例:感嘆符のあとにはスペースが必ずくる)
|
10
10
|
|
11
11
|
[ノクターンノベルズ](http://noc.syosetu.com/)及び[ムーンライトノベルズ](http://mnlt.syosetu.com/)にも対応しています。
|
12
12
|
|
13
|
+
**NEW!!**
|
14
|
+
[ハーメルン](http://syosetu.org/)、[Arcadia](http://www.mai-net.net/)(理想郷)にも対応しました!
|
15
|
+
|
13
16
|
全てコンソールで操作するCUIアプリケーションです。
|
14
17
|
|
15
18
|
主な機能は小説家になろうの小説のダウンロード、更新管理、テキスト整形、AozoraEpub3・kindlegen連携によるEPUB/MOBI出力です。
|
@@ -21,6 +24,18 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
|
|
21
24
|
更新履歴 - ChangeLog
|
22
25
|
--------------------
|
23
26
|
|
27
|
+
2014/03/09 : **1.5.2**
|
28
|
+
* 追加機能もしくは仕様変更
|
29
|
+
- **Cygwin** に対応しました(laplace22さんによる実装)
|
30
|
+
- `narou mail` コマンドを追加しました
|
31
|
+
+ 主にSend to Kindleを使うことを想定したコマンドです。送信用にメールアドレスが必要です
|
32
|
+
+ 初めて `narou mail` コマンドを使った際に、自動で設定用ファイルが作成されます。そのファイルを
|
33
|
+
編集することで初めてコマンドが使えるようになります
|
34
|
+
- setting.ini の `enable_transform_date` をデフォルトで false に変更(新規DLから反映)
|
35
|
+
* Bug Fix
|
36
|
+
- ハーメルンで前書き後書きが正常に取得出来ない問題を修正
|
37
|
+
- ハーメルンでダウンロード時にエラーが出る場合があった問題を修正 #43
|
38
|
+
|
24
39
|
2014/03/07 : **1.5.1**
|
25
40
|
* 追加機能もしくは仕様変更
|
26
41
|
- `narou d Nコード1,Nコード2,URL1 --multiple` のように、スペース区切り以外に `,` で区切れる機能を追加しました
|
@@ -30,9 +45,19 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
|
|
30
45
|
- ルビ記号が入れ子になっている時に正常にルビ化できていなかった問題を修正
|
31
46
|
- NKFによって全角ダッシュ(u2015)が全角マイナス?(u2014)に変換されてしまう問題を修正
|
32
47
|
- サブタイトルにタブ文字が入っている場合にダウンロード中にエラーが出る問題を修正
|
33
|
-
-
|
48
|
+
- ノクターンノベルズ及びムーンライトノベルズをNコードを指定して2個以上同時にダウンロードした場合に、
|
34
49
|
2個目以降が正常にDL出来ない問題を修正
|
35
50
|
|
51
|
+
2014/03/06 : **1.5.0.2**
|
52
|
+
* 追加機能もしくは仕様変更
|
53
|
+
- `narou list` で(短編)の表示色がグレーになります
|
54
|
+
* Bug Fix
|
55
|
+
- 1.5.0 でルビが全滅するバグが混入したのでルビ処理を以前の状態に戻しました
|
56
|
+
|
57
|
+
2014/03/06 : **1.5.0.1**
|
58
|
+
* Bug Fix
|
59
|
+
- 1.5.0 で小説家になろうの連載小説が正常にダウンロードできなくなっていたのを修正
|
60
|
+
|
36
61
|
2014/03/06 : **1.5.0**
|
37
62
|
* 追加機能もしくは仕様変更
|
38
63
|
- 小説投稿サイト **[ハーメルン](http://syosetu.org/)** に対応しました
|
@@ -47,24 +72,6 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
|
|
47
72
|
- 半角カナを全角カナに変換するように修正 #36
|
48
73
|
- 小説のタイトルにはルビをふれないように修正 #37
|
49
74
|
|
50
|
-
2014/02/28 : **1.4.6**
|
51
|
-
* 追加機能もしくは仕様変更
|
52
|
-
- `narou diff` コマンドに(凍結済を除く)全ての小説の差分データを削除する `--all-clean` オプションが追加されました
|
53
|
-
* Bug Fix
|
54
|
-
- 傍点化の処理が特殊な状況下で Index Error を吐いて止まっていた問題を修正
|
55
|
-
|
56
|
-
2014/02/27 : **1.4.5**
|
57
|
-
* 追加機能もしくは仕様変更
|
58
|
-
- `narou send` コマンドに凍結済み小説は送信しない `--without-freeze` オプションが追加されました
|
59
|
-
+ 送信小説を個別に指定した場合は無視されます
|
60
|
-
+ `narou s send.without-freeze=true` と設定することで、オプションを毎回打たなくても有効になります
|
61
|
-
* Bug Fix
|
62
|
-
- 検索除外されている小説が全て短編小説と認識されてしまう問題を修正
|
63
|
-
- WinMerge2.14で `narou diff` コマンドが使えなかった問題を修正
|
64
|
-
- Ruby1.9.3で動かなくなっていたのを修正
|
65
|
-
- issues #35 行頭に三点リーダーの代わりに連続中黒(・・・)が来た時自動字下げがされていなかったのを修正
|
66
|
-
- 連続で小説をダウンロードする時に 503 エラーがでてしまう場合がある問題を修正
|
67
|
-
|
68
75
|
----
|
69
76
|
|
70
77
|
「小説家になろう」は株式会社ヒナプロジェクトの登録商標です
|
data/lib/command.rb
CHANGED
data/lib/command/mail.rb
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# Copyright 2013 whiteleaf. All rights reserved.
|
4
|
+
#
|
5
|
+
|
6
|
+
require_relative "../narou"
|
7
|
+
require_relative "../mailer"
|
8
|
+
|
9
|
+
module Command
|
10
|
+
class Mail < CommandBase
|
11
|
+
def oneline_help
|
12
|
+
"変換したEPUB/MOBIをメールで送信します"
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
super("[<target1> <target2> ...]")
|
17
|
+
@opt.separator <<-EOS
|
18
|
+
|
19
|
+
・主にSend to Kindleを使うためのコマンドです。
|
20
|
+
・<target>で指定した小説の電子書籍データメールで送信します。
|
21
|
+
・<target>を省略した場合、新着があった小説を全て送信します。
|
22
|
+
・メールの送信設定は、#{Mailer::SETTING_FILE}ファイルを編集します。
|
23
|
+
(初めてコマンドを使うときに自動で作成されます)
|
24
|
+
|
25
|
+
Example:
|
26
|
+
narou mail 6 # 新着関係なくメール(送信済みフラグは立つ)
|
27
|
+
|
28
|
+
narou update
|
29
|
+
narou mail # updateで新着があった小説を全てメール
|
30
|
+
|
31
|
+
narou mail --force # 凍結済以外の全ての小説を強制的にメール(使い方に注意)
|
32
|
+
|
33
|
+
Options:
|
34
|
+
EOS
|
35
|
+
|
36
|
+
@opt.on("-f", "--force", "全ての小説を強制的に送信") {
|
37
|
+
@options["force"] = true
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
def execute(argv)
|
42
|
+
super
|
43
|
+
send_all = false
|
44
|
+
device = Narou.get_device
|
45
|
+
database = Database.instance
|
46
|
+
begin
|
47
|
+
mailer = Mailer.create
|
48
|
+
rescue Mailer::SettingNotFound => e
|
49
|
+
install_mailer_setting
|
50
|
+
return
|
51
|
+
rescue Mailer::SettingUncompleteError => e
|
52
|
+
error e.message
|
53
|
+
exit 1
|
54
|
+
end
|
55
|
+
if argv.empty?
|
56
|
+
send_all = true
|
57
|
+
database.each_key do |id|
|
58
|
+
next if Narou.novel_frozen?(id)
|
59
|
+
argv << id
|
60
|
+
end
|
61
|
+
end
|
62
|
+
argv.each do |target|
|
63
|
+
ebook_path = Narou.get_ebook_file_path(target, device ? device.ebook_file_ext : ".epub")
|
64
|
+
unless ebook_path
|
65
|
+
error "#{target} は存在しません" unless send_all
|
66
|
+
next
|
67
|
+
end
|
68
|
+
data = Downloader.get_data_by_target(target)
|
69
|
+
if send_all && !@options["force"]
|
70
|
+
new_arrivals_date = data["new_arrivals_date"] || Time.now
|
71
|
+
if new_arrivals_date < data["last_mail_date"]
|
72
|
+
next # すでに送信済みなので送信しない
|
73
|
+
end
|
74
|
+
end
|
75
|
+
unless File.exists?(ebook_path)
|
76
|
+
error "まだファイル(#{File.basename(ebook_path)})が無いようです" unless send_all
|
77
|
+
next
|
78
|
+
end
|
79
|
+
id = data["id"]
|
80
|
+
title = data["title"]
|
81
|
+
puts "<green>ID:#{id} #{TermColor.escape(title)}</green>".termcolor
|
82
|
+
print "メールを送信しています"
|
83
|
+
exit_mail = false
|
84
|
+
mail_result = nil
|
85
|
+
Thread.new do
|
86
|
+
mail_result = mailer.send(File.basename(ebook_path), ebook_path)
|
87
|
+
mail_result = true
|
88
|
+
exit_mail = true
|
89
|
+
end
|
90
|
+
until exit_mail
|
91
|
+
print "."
|
92
|
+
sleep(0.5)
|
93
|
+
end
|
94
|
+
puts
|
95
|
+
if mail_result
|
96
|
+
puts File.basename(ebook_path) + " をメールで送信しました"
|
97
|
+
database[id]["last_mail_date"] = Time.now
|
98
|
+
else
|
99
|
+
error "#{mailer.error_message}"
|
100
|
+
exit 1 # next しても次も失敗する可能性が高いのでここで終了
|
101
|
+
end
|
102
|
+
end
|
103
|
+
rescue Interrupt
|
104
|
+
puts "メール送信を中断しました"
|
105
|
+
exit 1
|
106
|
+
ensure
|
107
|
+
database.save_database if database
|
108
|
+
end
|
109
|
+
|
110
|
+
def install_mailer_setting
|
111
|
+
setting_file_path = File.join(Narou.get_preset_dir, Mailer::SETTING_FILE)
|
112
|
+
install_path = File.join(Narou.get_root_dir, Mailer::SETTING_FILE)
|
113
|
+
FileUtils.cp(setting_file_path, install_path)
|
114
|
+
alter_database_add_column_last_mail_date
|
115
|
+
puts "created #{install_path}"
|
116
|
+
puts "メールの設定用ファイルを作成しました。設定ファイルを書き換えることで mail コマンドが有効になります。"
|
117
|
+
puts "注意:次回以降のupdateで新着があった場合に送信可能フラグが立ちます"
|
118
|
+
if Helper.confirm("設定ファイルがあるフォルダを開きますか")
|
119
|
+
Helper.open_directory(Narou.get_root_dir)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def alter_database_add_column_last_mail_date
|
124
|
+
database = Database.instance
|
125
|
+
database.each do |id, data|
|
126
|
+
data["last_mail_date"] ||= Time.now
|
127
|
+
end
|
128
|
+
database.save_database
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
data/lib/command/send.rb
CHANGED
@@ -37,7 +37,7 @@ module Command
|
|
37
37
|
Options:
|
38
38
|
EOS
|
39
39
|
|
40
|
-
@opt.on("--without-freeze", "
|
40
|
+
@opt.on("--without-freeze", "一括送信時に凍結された小説は対象外にする") {
|
41
41
|
@options["without-freeze"] = true
|
42
42
|
}
|
43
43
|
end
|
@@ -105,14 +105,17 @@ module Command
|
|
105
105
|
print "."
|
106
106
|
sleep(0.5)
|
107
107
|
end
|
108
|
+
puts
|
108
109
|
if copy_to_path
|
109
|
-
puts
|
110
110
|
puts copy_to_path + " へコピーしました"
|
111
111
|
else
|
112
112
|
error "#{device.name}が見つからなかったためコピー出来ませんでした"
|
113
113
|
exit 1 # next しても次も失敗すると分かりきっているためここで終了する
|
114
114
|
end
|
115
115
|
end
|
116
|
+
rescue Interrupt => e
|
117
|
+
puts "送信を中断しました"
|
118
|
+
exit 1
|
116
119
|
end
|
117
120
|
end
|
118
121
|
end
|
data/lib/device.rb
CHANGED
@@ -11,6 +11,9 @@ class Device
|
|
11
11
|
when :windows
|
12
12
|
require_relative "device/library/windows"
|
13
13
|
extend Device::Library::Windows
|
14
|
+
when :cygwin
|
15
|
+
require_relative "device/library/cygwin"
|
16
|
+
extend Device::Library::Cygwin
|
14
17
|
when :mac
|
15
18
|
require_relative "device/library/mac"
|
16
19
|
extend Device::Library::Mac
|
@@ -104,6 +107,9 @@ class Device
|
|
104
107
|
# Windows-31J に変換できない文字をファイル名に含むものはRubyでコピーする
|
105
108
|
FileUtils.cp(src_file, dst_path)
|
106
109
|
end
|
110
|
+
when :cygwin
|
111
|
+
capture = `cp "#{src_file}" "#{dst_path}"`
|
112
|
+
raise capture.rstrip if $?.exitstatus > 0
|
107
113
|
else
|
108
114
|
FileUtils.cp(src_file, dst_path)
|
109
115
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# Copyright 2013 whiteleaf. All rights reserved.
|
4
|
+
#
|
5
|
+
|
6
|
+
module Device::Library
|
7
|
+
module Cygwin
|
8
|
+
def get_device_root_dir(volume_name)
|
9
|
+
# cygwinのドライブマウント先のpath prefixを取得する。
|
10
|
+
# 1.7.28では二行目の行頭
|
11
|
+
mount_root = `mount -p`.split("\n").last.split(/\s+/).first
|
12
|
+
|
13
|
+
Dir.glob("#{mount_root}/*") do |drive_path|
|
14
|
+
drive = drive_path.sub(/.*\//,"")
|
15
|
+
# windowsのvolコマンドを利用してがんばってvolume_nameを探す。
|
16
|
+
# 一行目にボリュームラベルが含まれる。
|
17
|
+
# volume_nameが "volume" とか "hoge(*)" などだとはまる。
|
18
|
+
cmd = "cmd /c vol #{drive}:".encode(Encoding::Windows_31J)
|
19
|
+
capture = `#{cmd}`.force_encoding(Encoding::Windows_31J).encode(Encoding::UTF_8)
|
20
|
+
if capture.split("\n").first.match(/#{volume_name}/i)
|
21
|
+
return drive_path
|
22
|
+
end
|
23
|
+
end
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/downloader.rb
CHANGED
@@ -425,7 +425,7 @@ class Downloader
|
|
425
425
|
# データベース更新
|
426
426
|
#
|
427
427
|
def update_database
|
428
|
-
@@database[@id]
|
428
|
+
@@database[@id].merge!({
|
429
429
|
"id" => @id,
|
430
430
|
"author" => @setting["author"],
|
431
431
|
"title" => get_title,
|
@@ -435,7 +435,7 @@ class Downloader
|
|
435
435
|
"novel_type" => get_novel_type,
|
436
436
|
"last_update" => Time.now,
|
437
437
|
"new_arrivals_date" => (@new_arrivals ? Time.now : @@database[@id]["new_arrivals_date"])
|
438
|
-
}
|
438
|
+
})
|
439
439
|
@@database.save_database
|
440
440
|
end
|
441
441
|
|
@@ -728,10 +728,10 @@ class Downloader
|
|
728
728
|
element["data_type"] = "text"
|
729
729
|
else
|
730
730
|
save_raw_data(raw, subtitle_info, ".html")
|
731
|
-
@setting.multi_match(raw, "
|
731
|
+
@setting.multi_match(raw, "body_pattern", "introduction_pattern", "postscript_pattern")
|
732
732
|
element = { "data_type" => "html" }
|
733
733
|
%w(introduction body postscript).each { |type|
|
734
|
-
element[type] = @setting[type]
|
734
|
+
element[type] = @setting[type] || ""
|
735
735
|
}
|
736
736
|
end
|
737
737
|
element
|
data/lib/helper.rb
CHANGED
@@ -14,7 +14,11 @@ module Helper
|
|
14
14
|
extend self
|
15
15
|
|
16
16
|
def os_windows?
|
17
|
-
@@os_is_windows ||= RUBY_PLATFORM =~ /mswin(?!ce)|mingw|
|
17
|
+
@@os_is_windows ||= RUBY_PLATFORM =~ /mswin(?!ce)|mingw|bccwin/i
|
18
|
+
end
|
19
|
+
|
20
|
+
def os_cygwin?
|
21
|
+
@@os_is_cygwin ||= RUBY_PLATFORM =~ /cygwin/i
|
18
22
|
end
|
19
23
|
|
20
24
|
def os_mac?
|
@@ -25,6 +29,8 @@ module Helper
|
|
25
29
|
case
|
26
30
|
when os_windows?
|
27
31
|
:windows
|
32
|
+
when os_cygwin?
|
33
|
+
:cygwin
|
28
34
|
when os_mac?
|
29
35
|
:mac
|
30
36
|
else
|
@@ -62,6 +68,8 @@ module Helper
|
|
62
68
|
case determine_os
|
63
69
|
when :windows
|
64
70
|
`explorer "file:///#{path.encode(Encoding::Windows_31J)}"`
|
71
|
+
when :cygwin
|
72
|
+
`cygstart "#{path}"`
|
65
73
|
when :mac
|
66
74
|
`open "#{path}"`
|
67
75
|
else
|
@@ -75,6 +83,8 @@ module Helper
|
|
75
83
|
escaped_url = url.gsub("%", "%^").gsub("&", "^&")
|
76
84
|
# MEMO: start の引数を "" で囲むと動かない
|
77
85
|
`start #{escaped_url}`
|
86
|
+
when :cygwin
|
87
|
+
`cygstart #{url}`
|
78
88
|
when :mac
|
79
89
|
`open "#{url}"`
|
80
90
|
else
|
@@ -115,6 +125,13 @@ module Helper
|
|
115
125
|
result
|
116
126
|
end
|
117
127
|
|
128
|
+
#
|
129
|
+
# CYGWINのパスからwindowsのパスへと変換(cygpathを呼び出すだけ)
|
130
|
+
#
|
131
|
+
def convert_to_windows_path(path)
|
132
|
+
`cygpath -aw \"#{path}\"`.strip
|
133
|
+
end
|
134
|
+
|
118
135
|
#
|
119
136
|
# 外部コマンド実行中の待機ループの処理を書けるクラス
|
120
137
|
#
|
data/lib/illustration.rb
CHANGED
@@ -23,10 +23,15 @@ class Illustration
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def scanner(source, &block)
|
26
|
-
source.gsub!(/[#挿絵((.+?))入る]/) do
|
26
|
+
source.gsub!(/[#挿絵((.+?))入る]/) do |match|
|
27
27
|
url = $1
|
28
|
-
|
29
|
-
|
28
|
+
if url =~ URI.regexp
|
29
|
+
path = download_image(url)
|
30
|
+
path ? block.call(make_illust_chuki(path)) : ""
|
31
|
+
else
|
32
|
+
# URLでなければ、ローカルのパスが指定されたと判断してそのままの注記を使う
|
33
|
+
block.call(match)
|
34
|
+
end
|
30
35
|
end
|
31
36
|
source.gsub!(NAROU_ILLUST_TAG_PATTERN) do
|
32
37
|
id1, id2 = $1, $2
|
data/lib/mailer.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# Copyright 2013 whiteleaf. All rights reserved.
|
4
|
+
#
|
5
|
+
|
6
|
+
require "pony"
|
7
|
+
require "yaml"
|
8
|
+
require_relative "narou"
|
9
|
+
|
10
|
+
class Mailer
|
11
|
+
include Singleton
|
12
|
+
|
13
|
+
SETTING_FILE = "mail_setting.yaml"
|
14
|
+
|
15
|
+
class SettingNotFound < StandardError; end
|
16
|
+
class SettingUncompleteError < StandardError; end
|
17
|
+
|
18
|
+
attr_reader :error_message
|
19
|
+
|
20
|
+
def self.create
|
21
|
+
this = instance
|
22
|
+
this.clear
|
23
|
+
setting_file_path = File.join(Narou.get_root_dir, SETTING_FILE)
|
24
|
+
if File.exists?(setting_file_path)
|
25
|
+
options = YAML.load_file(setting_file_path)
|
26
|
+
unless options.delete(:complete)
|
27
|
+
raise SettingUncompleteError, "設定ファイルの書き換えが終了していないようです。\n" +
|
28
|
+
"設定ファイルは #{setting_file_path} にあります"
|
29
|
+
end
|
30
|
+
this.options = options
|
31
|
+
else
|
32
|
+
raise SettingNotFound
|
33
|
+
end
|
34
|
+
this
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize
|
38
|
+
@options = {}
|
39
|
+
@error_message = ""
|
40
|
+
end
|
41
|
+
|
42
|
+
def clear
|
43
|
+
@options.clear
|
44
|
+
end
|
45
|
+
|
46
|
+
def options=(options)
|
47
|
+
@options.merge!(options)
|
48
|
+
end
|
49
|
+
|
50
|
+
def send(message, attached_file_path = nil)
|
51
|
+
@error_message = ""
|
52
|
+
params = @options.dup
|
53
|
+
params[:body] = message
|
54
|
+
params[:charset] = "UTF-8"
|
55
|
+
params[:text_part_charset] = "UTF-8"
|
56
|
+
if attached_file_path
|
57
|
+
params[:attachments] = { File.basename(attached_file_path) => File.binread(attached_file_path) }
|
58
|
+
end
|
59
|
+
begin
|
60
|
+
Pony.mail(params)
|
61
|
+
rescue StandardError => e
|
62
|
+
@error_message = e.message
|
63
|
+
return false
|
64
|
+
end
|
65
|
+
true
|
66
|
+
end
|
67
|
+
end
|
data/lib/novelconverter.rb
CHANGED
@@ -126,6 +126,9 @@ class NovelConverter
|
|
126
126
|
|
127
127
|
java_encoding = "-Dfile.encoding=UTF-8"
|
128
128
|
|
129
|
+
if Helper.os_cygwin?
|
130
|
+
abs_srcpath = Helper.convert_to_windows_path(abs_srcpath)
|
131
|
+
end
|
129
132
|
Dir.chdir(aozoraepub3_dir)
|
130
133
|
command = %!java #{java_encoding} -cp #{aozoraepub3_basename} AozoraEpub3 -enc UTF-8 -of #{device_option} ! +
|
131
134
|
%!#{cover_option} #{dst_option} #{ext_option} "#{abs_srcpath}"!
|
@@ -181,6 +184,9 @@ class NovelConverter
|
|
181
184
|
return :error
|
182
185
|
end
|
183
186
|
|
187
|
+
if Helper.os_cygwin?
|
188
|
+
epub_path = Helper.convert_to_windows_path(epub_path)
|
189
|
+
end
|
184
190
|
command = %!"#{kindlegen_path}" -locale ja "#{epub_path}"!
|
185
191
|
if Helper.os_windows?
|
186
192
|
command.encode!(Encoding::Windows_31J)
|
data/lib/novelsetting.rb
CHANGED
data/lib/template.rb
CHANGED
data/lib/version.rb
CHANGED
data/narou.bat
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
@echo off
|
2
|
+
REM -*- mode: ruby -*-
|
3
|
+
@if not "%~d0" == "~d0" goto WinNT
|
4
|
+
ruby -x narou.bat %1 %2 %3 %4 %5 %6 %7 %8 %9
|
5
|
+
@goto endofruby
|
6
|
+
:WinNT
|
7
|
+
ruby -x "%~f0" %*
|
8
|
+
@goto endofruby
|
9
|
+
#! ruby
|
10
|
+
|
11
|
+
require_relative "narou.rb"
|
12
|
+
|
13
|
+
__END__
|
14
|
+
:endofruby
|
data/narou.gemspec
CHANGED
@@ -58,6 +58,18 @@ narou コマンドのインストール or アップデートが完了しまし
|
|
58
58
|
- ノクターンノベルズ及びムーンライトノベルズを2個以上同時にダウンロードした場合に、
|
59
59
|
2個目以降が正常にDL出来ない問題を修正
|
60
60
|
|
61
|
+
2014/03/09 : **1.5.2**
|
62
|
+
* 追加機能もしくは仕様変更
|
63
|
+
- **Cygwin** に対応しました(laplace22さんによる実装)
|
64
|
+
- `narou mail` コマンドを追加しました
|
65
|
+
+ 主にSend to Kindleを使うことを想定したコマンドです。送信用にメールアドレスが必要です
|
66
|
+
+ 初めて `narou mail` コマンドを使った際に、自動で設定用ファイルが作成されます。そのファイルを
|
67
|
+
編集することで初めてコマンドが使えるようになります
|
68
|
+
- setting.ini の `enable_transform_date` をデフォルトで false に変更(新規DLから反映)
|
69
|
+
* Bug Fix
|
70
|
+
- ハーメルンで前書き後書きが正常に取得出来ない問題を修正
|
71
|
+
- ハーメルンでダウンロード時にエラーが出る場合があった問題を修正 #43
|
72
|
+
|
61
73
|
#{"*" * 79}
|
62
74
|
EOS
|
63
75
|
gem.post_install_message = install_message.gsub("\t", " ")
|
@@ -69,4 +81,5 @@ narou コマンドのインストール or アップデートが完了しまし
|
|
69
81
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
70
82
|
gem.add_runtime_dependency 'termcolor', '~> 1.2', '>= 1.2.2'
|
71
83
|
gem.add_runtime_dependency 'rubyzip', '~> 1.1', '>= 1.1.0'
|
84
|
+
gem.add_runtime_dependency 'pony', '~> 1.8'
|
72
85
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# ------------------------------------------------------------
|
2
|
+
# メールの送信設定
|
3
|
+
#
|
4
|
+
# Gmail で Send to Kindle を使うためのサンプルです。
|
5
|
+
# ご自分の環境に適宜書き換えて下さい。
|
6
|
+
# ------------------------------------------------------------
|
7
|
+
# Send to Kindle で使う場合の注意点
|
8
|
+
# ・同じファイル名だとしてもパーソナルドキュメントに別ファイルとしてどんどん溜まっていきます。
|
9
|
+
# 更新のたびに送信していると恐ろしいことになるので注意して下さい。
|
10
|
+
|
11
|
+
# toのアドレスは
|
12
|
+
# My Kindle > パーソナル・ドキュメント設定 > Send-to-Kindle Eメールアドレスの設定
|
13
|
+
# https://www.amazon.co.jp/gp/digital/fiona/manage/ref=gno_yam_myk?#pdocSettings
|
14
|
+
# に書いてあります。
|
15
|
+
# 自分のメールアドレスが承認済みEメールアドレス一覧にあることを確認して下さい。
|
16
|
+
:to : your_account@kindle.com
|
17
|
+
|
18
|
+
# 件名を「変換」にすると Kindleフォーマット(.azw) に変換される
|
19
|
+
:subject : ""
|
20
|
+
|
21
|
+
:via : smtp
|
22
|
+
:via_options :
|
23
|
+
:address : smtp.gmail.com
|
24
|
+
:port : 587
|
25
|
+
:enable_starttls_auto : true
|
26
|
+
:user_name : your_gmail_account
|
27
|
+
:password : password
|
28
|
+
# 2段階認証の場合はアプリケーション固有のパスワード
|
29
|
+
# 参照 https://support.google.com/accounts/answer/185833?hl=ja
|
30
|
+
:authentication : :plain
|
31
|
+
:domain : gmail.com
|
32
|
+
|
33
|
+
# 設定が終わったらこの項目を true にして下さい
|
34
|
+
:complete : false
|
data/webnovel/syosetu.org.yaml
CHANGED
@@ -30,12 +30,15 @@ href: \\k<index>.html
|
|
30
30
|
# ------------------------------------------------------------
|
31
31
|
# 本文取得設定
|
32
32
|
|
33
|
-
|
33
|
+
body_pattern: |-
|
34
34
|
(?:<div id=maegaki>(?<introduction>.+?)</div><BR><HR><BR>
|
35
35
|
)?<font size=\+1>.+?</font><BR><BR>
|
36
36
|
(?<body>.+?)
|
37
37
|
<BR>(?:<HR><BR><div id=atogaki>(?<postscript>.+?)</div>)?
|
38
38
|
|
39
|
+
introduction_pattern: null
|
40
|
+
postscript_pattern: null
|
41
|
+
|
39
42
|
illust_current_url: null
|
40
43
|
illust_grep_pattern: <a href="(?<src>.+?)" alt="挿絵" name='img'>【挿絵表示】</a>
|
41
44
|
|
@@ -30,9 +30,9 @@ subupdate: no
|
|
30
30
|
# ------------------------------------------------------------
|
31
31
|
# 本文取得設定
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
body_pattern: <blockquote><div style="line-height:1.5">(?<body>.+?)</div></blockquote>
|
34
|
+
introduction_pattern: null
|
35
|
+
postscript_pattern: null
|
36
36
|
|
37
37
|
# ------------------------------------------------------------
|
38
38
|
# 小説情報からパースするための設定
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: narou
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- whiteleaf7
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: termcolor
|
@@ -50,6 +50,20 @@ dependencies:
|
|
50
50
|
- - '>='
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 1.1.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: pony
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '1.8'
|
60
|
+
type: :runtime
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ~>
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '1.8'
|
53
67
|
description: 小説家になろうで公開されている小説の管理、及び電子書籍データへの変換を支援します。縦書用に特化されており、横書き用に特化されたWEB小説を違和感なく縦書で読むことが出来るようになります。
|
54
68
|
email:
|
55
69
|
- 2nd.leaf@gmail.com
|
@@ -80,6 +94,7 @@ files:
|
|
80
94
|
- lib/command/init.rb
|
81
95
|
- lib/command/inspect.rb
|
82
96
|
- lib/command/list.rb
|
97
|
+
- lib/command/mail.rb
|
83
98
|
- lib/command/remove.rb
|
84
99
|
- lib/command/send.rb
|
85
100
|
- lib/command/setting.rb
|
@@ -93,6 +108,7 @@ files:
|
|
93
108
|
- lib/device/ibunko.rb
|
94
109
|
- lib/device/kindle.rb
|
95
110
|
- lib/device/kobo.rb
|
111
|
+
- lib/device/library/cygwin.rb
|
96
112
|
- lib/device/library/linux.rb
|
97
113
|
- lib/device/library/mac.rb
|
98
114
|
- lib/device/library/windows.rb
|
@@ -109,6 +125,7 @@ files:
|
|
109
125
|
- lib/loadconverter.rb
|
110
126
|
- lib/localsetting.rb
|
111
127
|
- lib/logger.rb
|
128
|
+
- lib/mailer.rb
|
112
129
|
- lib/narou.rb
|
113
130
|
- lib/narou/api.rb
|
114
131
|
- lib/novelconverter.rb
|
@@ -119,12 +136,14 @@ files:
|
|
119
136
|
- lib/sitesetting.rb
|
120
137
|
- lib/template.rb
|
121
138
|
- lib/version.rb
|
139
|
+
- narou.bat
|
122
140
|
- narou.gemspec
|
123
141
|
- narou.rb
|
124
142
|
- preset/AozoraEpub3.ini
|
125
143
|
- preset/DMincho.ttf
|
126
144
|
- preset/bordersymbols.txt
|
127
145
|
- preset/custom_chuki_tag.txt
|
146
|
+
- preset/mail_setting.yaml
|
128
147
|
- preset/ncode.syosetu.com/n1839bd/converter.rb
|
129
148
|
- preset/ncode.syosetu.com/n1839bd/setting.ini
|
130
149
|
- preset/ncode.syosetu.com/n2267be/converter.rb
|
@@ -182,6 +201,18 @@ post_install_message: |
|
|
182
201
|
- ノクターンノベルズ及びムーンライトノベルズを2個以上同時にダウンロードした場合に、
|
183
202
|
2個目以降が正常にDL出来ない問題を修正
|
184
203
|
|
204
|
+
2014/03/09 : **1.5.2**
|
205
|
+
* 追加機能もしくは仕様変更
|
206
|
+
- **Cygwin** に対応しました(laplace22さんによる実装)
|
207
|
+
- `narou mail` コマンドを追加しました
|
208
|
+
+ 主にSend to Kindleを使うことを想定したコマンドです。送信用にメールアドレスが必要です
|
209
|
+
+ 初めて `narou mail` コマンドを使った際に、自動で設定用ファイルが作成されます。そのファイルを
|
210
|
+
編集することで初めてコマンドが使えるようになります
|
211
|
+
- setting.ini の `enable_transform_date` をデフォルトで false に変更(新規DLから反映)
|
212
|
+
* Bug Fix
|
213
|
+
- ハーメルンで前書き後書きが正常に取得出来ない問題を修正
|
214
|
+
- ハーメルンでダウンロード時にエラーが出る場合があった問題を修正 #43
|
215
|
+
|
185
216
|
*******************************************************************************
|
186
217
|
rdoc_options: []
|
187
218
|
require_paths:
|