novel-downloader 1.4.0__py3-none-any.whl → 1.4.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@ novel_downloader
6
6
  Core package for the Novel Downloader project.
7
7
  """
8
8
 
9
- __version__ = "1.4.0"
9
+ __version__ = "1.4.1"
10
10
 
11
11
  __author__ = "Saudade Z"
12
12
  __email__ = "saudadez217@gmail.com"
@@ -20,6 +20,7 @@ class LinovelibBrowser(BaseBrowser):
20
20
 
21
21
  BASE_URL = "https://www.linovelib.com"
22
22
  BOOK_INFO_URL = "https://www.linovelib.com/novel/{book_id}.html"
23
+ BOOK_CATALOG_UTL = "https://www.linovelib.com/novel/{book_id}/catalog"
23
24
  BOOK_VOL_URL = "https://www.linovelib.com/novel/{book_id}/{vol_id}.html"
24
25
  CHAPTER_URL = "https://www.linovelib.com/novel/{book_id}/{chapter_id}.html"
25
26
 
@@ -49,6 +50,10 @@ class LinovelibBrowser(BaseBrowser):
49
50
 
50
51
  vol_ids = self._extract_vol_ids(info_html)
51
52
  vol_ids.reverse()
53
+ if not vol_ids:
54
+ url = self.catalog_url(book_id=book_id)
55
+ catalog_html = await self.fetch(url, **kwargs)
56
+ vol_ids = self._extract_vol_ids(catalog_html)
52
57
 
53
58
  vol_htmls = []
54
59
  for vol_id in vol_ids:
@@ -134,6 +139,16 @@ class LinovelibBrowser(BaseBrowser):
134
139
  """
135
140
  return cls.BOOK_INFO_URL.format(book_id=book_id)
136
141
 
142
+ @classmethod
143
+ def catalog_url(cls, book_id: str) -> str:
144
+ """
145
+ Construct the URL for fetching a catalog page.
146
+
147
+ :param book_id: The identifier of the book.
148
+ :return: Fully qualified catalog URL.
149
+ """
150
+ return cls.BOOK_CATALOG_UTL.format(book_id=book_id)
151
+
137
152
  @classmethod
138
153
  def volume_url(cls, book_id: str, vol_id: str) -> str:
139
154
  """
@@ -20,6 +20,7 @@ class LinovelibSession(BaseSession):
20
20
 
21
21
  BASE_URL = "https://www.linovelib.com"
22
22
  BOOK_INFO_URL = "https://www.linovelib.com/novel/{book_id}.html"
23
+ BOOK_CATALOG_UTL = "https://www.linovelib.com/novel/{book_id}/catalog"
23
24
  BOOK_VOL_URL = "https://www.linovelib.com/novel/{book_id}/{vol_id}.html"
24
25
  CHAPTER_URL = "https://www.linovelib.com/novel/{book_id}/{chapter_id}.html"
25
26
 
@@ -49,6 +50,10 @@ class LinovelibSession(BaseSession):
49
50
 
50
51
  vol_ids = self._extract_vol_ids(info_html)
51
52
  vol_ids.reverse()
53
+ if not vol_ids:
54
+ url = self.catalog_url(book_id=book_id)
55
+ catalog_html = await self.fetch(url, **kwargs)
56
+ vol_ids = self._extract_vol_ids(catalog_html)
52
57
 
53
58
  vol_htmls = []
54
59
  for vol_id in vol_ids:
@@ -134,6 +139,16 @@ class LinovelibSession(BaseSession):
134
139
  """
135
140
  return cls.BOOK_INFO_URL.format(book_id=book_id)
136
141
 
142
+ @classmethod
143
+ def catalog_url(cls, book_id: str) -> str:
144
+ """
145
+ Construct the URL for fetching a catalog page.
146
+
147
+ :param book_id: The identifier of the book.
148
+ :return: Fully qualified catalog URL.
149
+ """
150
+ return cls.BOOK_CATALOG_UTL.format(book_id=book_id)
151
+
137
152
  @classmethod
138
153
  def volume_url(cls, book_id: str, vol_id: str) -> str:
139
154
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: novel-downloader
3
- Version: 1.4.0
3
+ Version: 1.4.1
4
4
  Summary: A command-line tool for downloading Chinese web novels from Qidian and similar platforms.
5
5
  Author-email: Saudade Z <saudadez217@gmail.com>
6
6
  License: MIT License
@@ -1,4 +1,4 @@
1
- novel_downloader/__init__.py,sha256=TLa2eWlJhpY9lBjsolzhKpaZ7PWwhQj34Tj7RUSLlOY,218
1
+ novel_downloader/__init__.py,sha256=nUZvGoS76c8un9BEm7XCbBulkgbGiFZCB87m7L_8gC8,218
2
2
  novel_downloader/cli/__init__.py,sha256=-2HAut_U1e67MZGdvbpEJ1n5J-bRchzto6L4c-nWeXY,174
3
3
  novel_downloader/cli/clean.py,sha256=hOk8SJQwBCw2oOObTdEI79wpnmZ25uB1s9LQK1-4LNU,4487
4
4
  novel_downloader/cli/config.py,sha256=C6QLfegZLp4legmu8KenqyYKNdrk47bH0z86ujLP0pY,6509
@@ -62,8 +62,8 @@ novel_downloader/core/fetchers/esjzone/__init__.py,sha256=Cr30WpKEnCrG_vVqttfI9T
62
62
  novel_downloader/core/fetchers/esjzone/browser.py,sha256=SPvbKURw2DkUAlOBLbklmRCFvDoI4tAUDwmBRo2Kuc8,6224
63
63
  novel_downloader/core/fetchers/esjzone/session.py,sha256=hwvS9LMWm5PYHTTZqYkBgWqkVqkrCfQcaFh6NBICt1Q,7218
64
64
  novel_downloader/core/fetchers/linovelib/__init__.py,sha256=sMNXSBvn8gaZxNX5x4Ork8RzXxL7PhuigquWx6zQ6A4,254
65
- novel_downloader/core/fetchers/linovelib/browser.py,sha256=pXasjPCG18CXmWkXFh7Uw24HNlTiocSup5tKK42YGck,5515
66
- novel_downloader/core/fetchers/linovelib/session.py,sha256=y-R2FzKf0dpffUATI-xTKvq1S2wvQWA50H1avuqUrGM,5525
65
+ novel_downloader/core/fetchers/linovelib/browser.py,sha256=9rQzmJwtu_FHDDQvgDrVIZdwHA7CjnBkIgdyBuy7X50,6086
66
+ novel_downloader/core/fetchers/linovelib/session.py,sha256=2BpYe7kqIhHLbrH6Lk4TA4f8d_OHVO6lxHzZ-VVuG30,6096
67
67
  novel_downloader/core/fetchers/qianbi/__init__.py,sha256=h4Rve7fO1GcSJ-DlNC5zw7fjoldJy4chG9RZQf5DuCU,236
68
68
  novel_downloader/core/fetchers/qianbi/browser.py,sha256=1EmrSwpqSYhEO_ID3RJbUaAOhcqvVnMnch6iOafXbTA,3162
69
69
  novel_downloader/core/fetchers/qianbi/session.py,sha256=c3pJcgi9C1x9QYTBihvazHcgT7XTp2HBYfStTn6gSEg,3141
@@ -162,9 +162,9 @@ novel_downloader/utils/text_utils/text_cleaning.py,sha256=_Nahr8iv3341IyDXW-KpTn
162
162
  novel_downloader/utils/time_utils/__init__.py,sha256=725vY2PvqFhjbAz0hCOuIuhSCK8HrEqQ_k3YwvubmXo,624
163
163
  novel_downloader/utils/time_utils/datetime_utils.py,sha256=1eyX8lTEqkQ-rEej_GrhbUpaIR5tsFdVSKT-q8s9X-g,4927
164
164
  novel_downloader/utils/time_utils/sleep_utils.py,sha256=C4XYeAtxoVZC9Ju6vhhP9sbOrSpdZG2Nm-x1IYO_OFA,3233
165
- novel_downloader-1.4.0.dist-info/licenses/LICENSE,sha256=XgmnH0mBf-qEiizoVAfJQAKzPB9y3rBa-ni7M0Aqv4A,1066
166
- novel_downloader-1.4.0.dist-info/METADATA,sha256=iFXirg0_BDhczHRV37P5QgtbuUawakAx1kzY1aAfQeU,7027
167
- novel_downloader-1.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
168
- novel_downloader-1.4.0.dist-info/entry_points.txt,sha256=u1Ns5xI_QJyL4HAFCgJvJdib9ugu7M9I2tnQwZjJxrk,112
169
- novel_downloader-1.4.0.dist-info/top_level.txt,sha256=hP4jYWM2LTm1jxsW4hqEB8N0dsRvldO2QdhggJT917I,17
170
- novel_downloader-1.4.0.dist-info/RECORD,,
165
+ novel_downloader-1.4.1.dist-info/licenses/LICENSE,sha256=XgmnH0mBf-qEiizoVAfJQAKzPB9y3rBa-ni7M0Aqv4A,1066
166
+ novel_downloader-1.4.1.dist-info/METADATA,sha256=ZhGsQDAL7bnxkiKs8lUsToC24ueLKshwK0e2KImvduU,7027
167
+ novel_downloader-1.4.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
168
+ novel_downloader-1.4.1.dist-info/entry_points.txt,sha256=u1Ns5xI_QJyL4HAFCgJvJdib9ugu7M9I2tnQwZjJxrk,112
169
+ novel_downloader-1.4.1.dist-info/top_level.txt,sha256=hP4jYWM2LTm1jxsW4hqEB8N0dsRvldO2QdhggJT917I,17
170
+ novel_downloader-1.4.1.dist-info/RECORD,,