]> git.lizzy.rs Git - nhentai.git/commitdiff
add page_range option for favorites
authormyzWILLmake <i@yunze.me>
Thu, 6 Feb 2020 17:32:51 +0000 (01:32 +0800)
committermyzWILLmake <i@yunze.me>
Thu, 6 Feb 2020 17:32:51 +0000 (01:32 +0800)
nhentai/cmdline.py
nhentai/command.py
nhentai/parser.py

index 10f5ecd307fab12e581128cb4a95f27f035cb377..f8e767919651d5262dda3254e7890ef4983adeb8 100644 (file)
@@ -63,6 +63,8 @@ def cmd_parser():
                       help='page number of search results')
     parser.add_option('--max-page', type='int', dest='max_page', action='store', default=1,
                       help='The max page when recursive download tagged doujinshi')
+    parser.add_option('--page-range', type='string', dest='page_range', action='store',
+                      help='page range of favorites.  e.g. 1,2-5,14')
     parser.add_option('--sorting', dest='sorting', action='store', default='date',
                       help='sorting of doujinshi (date / popular)', choices=['date', 'popular'])
 
index 800935124adb78a1f6f9f2144e7fcc81ee30060c..deb90716e4d9a001fc7ea98ad79c950080176120 100644 (file)
@@ -35,7 +35,7 @@ def main():
         if not options.is_download:
             logger.warning('You do not specify --download option')
 
-        doujinshis = favorites_parser()
+        doujinshis = favorites_parser(options.page_range)
         print_doujinshi(doujinshis)
         if options.is_download and doujinshis:
             doujinshi_ids = [i['id'] for i in doujinshis]
index 57e94bf329f0af897a55367a1bc5b4b1fbde91ce..212461f4233f5b4a8149db7a32c1bf05bbecfec2 100644 (file)
@@ -65,7 +65,7 @@ def _get_title_and_id(response):
     return result
 
 
-def favorites_parser():
+def favorites_parser(page_range=''):
     result = []
     html = BeautifulSoup(request('get', constant.FAV_URL).content, 'html.parser')
     count = html.find('span', attrs={'class': 'count'})
@@ -89,7 +89,12 @@ def favorites_parser():
     if os.getenv('DEBUG'):
         pages = 1
 
-    for page in range(1, pages + 1):
+    page_range_list = range(1, pages + 1)
+    if page_range:
+        logger.info('page range is {0}'.format(page_range))
+        page_range_list = page_range_parser(page_range, pages)
+
+    for page in page_range_list:
         try:
             logger.info('Getting doujinshi ids of page %d' % page)
             resp = request('get', constant.FAV_URL + '?page=%d' % page).content
@@ -100,6 +105,30 @@ def favorites_parser():
 
     return result
 
+def page_range_parser(page_range, max_page_num):
+    pages = set()
+    ranges = str.split(page_range, ',')
+    for range_str in ranges:
+        idx = range_str.find('-')
+        if idx == -1:
+            try:
+                page = int(range_str)
+                if page <= max_page_num:
+                    pages.add(page)
+            except ValueError:
+                logger.error('page range({0}) is not valid'.format(page_range))
+        else:
+            try:
+                left = int(range_str[:idx])
+                right = int(range_str[idx+1:])
+                if right > max_page_num:
+                    right = max_page_num
+                for page in range(left, right+1):
+                    pages.add(page)
+            except ValueError:
+                logger.error('page range({0}) is not valid'.format(page_range))
+    
+    return list(pages)    
 
 def doujinshi_parser(id_):
     if not isinstance(id_, (int,)) and (isinstance(id_, (str,)) and not id_.isdigit()):