mirror of
				https://github.com/RicterZ/nhentai.git
				synced 2025-11-04 02:50:55 +01:00 
			
		
		
		
	@@ -50,6 +50,10 @@ def cmd_parser():
 | 
				
			|||||||
    parser.add_option('--id', type='string', dest='id', action='store', help='doujinshi ids set, e.g. 1,2,3')
 | 
					    parser.add_option('--id', type='string', dest='id', action='store', help='doujinshi ids set, e.g. 1,2,3')
 | 
				
			||||||
    parser.add_option('--search', '-s', type='string', dest='keyword', action='store', help='search doujinshi by keyword')
 | 
					    parser.add_option('--search', '-s', type='string', dest='keyword', action='store', help='search doujinshi by keyword')
 | 
				
			||||||
    parser.add_option('--tag', type='string', dest='tag', action='store', help='download doujinshi by tag')
 | 
					    parser.add_option('--tag', type='string', dest='tag', action='store', help='download doujinshi by tag')
 | 
				
			||||||
 | 
					    parser.add_option('--artist', type='string', dest='artist', action='store', help='download doujinshi by artist')
 | 
				
			||||||
 | 
					    parser.add_option('--character', type='string', dest='character', action='store', help='download doujinshi by character')
 | 
				
			||||||
 | 
					    parser.add_option('--parody', type='string', dest='parody', action='store', help='download doujinshi by parody')
 | 
				
			||||||
 | 
					    parser.add_option('--group', type='string', dest='group', action='store', help='download doujinshi by group')
 | 
				
			||||||
    parser.add_option('--favorites', '-F', action='store_true', dest='favorites',
 | 
					    parser.add_option('--favorites', '-F', action='store_true', dest='favorites',
 | 
				
			||||||
                      help='list or download your favorites.')
 | 
					                      help='list or download your favorites.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -104,7 +108,8 @@ def cmd_parser():
 | 
				
			|||||||
        exit(0)
 | 
					        exit(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if args.main_viewer and not args.id and not args.keyword and \
 | 
					    if args.main_viewer and not args.id and not args.keyword and \
 | 
				
			||||||
            not args.tag and not args.favorites:
 | 
					            not args.tag and not args.artist and not args.character and \
 | 
				
			||||||
 | 
					            not args.parody and not args.group and not args.favorites:
 | 
				
			||||||
        generate_main_html()
 | 
					        generate_main_html()
 | 
				
			||||||
        exit(0)
 | 
					        exit(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -164,12 +169,14 @@ def cmd_parser():
 | 
				
			|||||||
            args.id = set(map(int, filter(lambda id_: id_.isdigit(), _)))
 | 
					            args.id = set(map(int, filter(lambda id_: id_.isdigit(), _)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (args.is_download or args.is_show) and not args.id and not args.keyword and \
 | 
					    if (args.is_download or args.is_show) and not args.id and not args.keyword and \
 | 
				
			||||||
            not args.tag and not args.favorites:
 | 
					            not args.tag and not args.artist and not args.character and \
 | 
				
			||||||
 | 
					            not args.parody and not args.group and not args.favorites:
 | 
				
			||||||
        logger.critical('Doujinshi id(s) are required for downloading')
 | 
					        logger.critical('Doujinshi id(s) are required for downloading')
 | 
				
			||||||
        parser.print_help()
 | 
					        parser.print_help()
 | 
				
			||||||
        exit(1)
 | 
					        exit(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if not args.keyword and not args.id and not args.tag and not args.favorites:
 | 
					    if not args.keyword and not args.id and not args.tag and not args.artist and \
 | 
				
			||||||
 | 
					            not args.character and not args.parody and not args.group and not args.favorites:
 | 
				
			||||||
        parser.print_help()
 | 
					        parser.print_help()
 | 
				
			||||||
        exit(1)
 | 
					        exit(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,6 +45,30 @@ def main():
 | 
				
			|||||||
        if options.is_download and doujinshis:
 | 
					        if options.is_download and doujinshis:
 | 
				
			||||||
            doujinshi_ids = map(lambda d: d['id'], doujinshis)
 | 
					            doujinshi_ids = map(lambda d: d['id'], doujinshis)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    elif options.artist:
 | 
				
			||||||
 | 
					        doujinshis = tag_parser(options.artist, max_page=options.max_page, index=1)
 | 
				
			||||||
 | 
					        print_doujinshi(doujinshis)
 | 
				
			||||||
 | 
					        if options.is_download and doujinshis:
 | 
				
			||||||
 | 
					            doujinshi_ids = map(lambda d: d['id'], doujinshis)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    elif options.character:
 | 
				
			||||||
 | 
					        doujinshis = tag_parser(options.character, max_page=options.max_page, index=2)
 | 
				
			||||||
 | 
					        print_doujinshi(doujinshis)
 | 
				
			||||||
 | 
					        if options.is_download and doujinshis:
 | 
				
			||||||
 | 
					            doujinshi_ids = map(lambda d: d['id'], doujinshis)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    elif options.parody:
 | 
				
			||||||
 | 
					        doujinshis = tag_parser(options.parody, max_page=options.max_page, index=3)
 | 
				
			||||||
 | 
					        print_doujinshi(doujinshis)
 | 
				
			||||||
 | 
					        if options.is_download and doujinshis:
 | 
				
			||||||
 | 
					            doujinshi_ids = map(lambda d: d['id'], doujinshis)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    elif options.group:
 | 
				
			||||||
 | 
					        doujinshis = tag_parser(options.group, max_page=options.max_page, index=4)
 | 
				
			||||||
 | 
					        print_doujinshi(doujinshis)
 | 
				
			||||||
 | 
					        if options.is_download and doujinshis:
 | 
				
			||||||
 | 
					            doujinshi_ids = map(lambda d: d['id'], doujinshis)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    elif options.keyword:
 | 
					    elif options.keyword:
 | 
				
			||||||
        doujinshis = search_parser(options.keyword, options.page)
 | 
					        doujinshis = search_parser(options.keyword, options.page)
 | 
				
			||||||
        print_doujinshi(doujinshis)
 | 
					        print_doujinshi(doujinshis)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,12 @@ __api_suspended_SEARCH_URL = '%s/api/galleries/search' % BASE_URL
 | 
				
			|||||||
DETAIL_URL = '%s/g' % BASE_URL
 | 
					DETAIL_URL = '%s/g' % BASE_URL
 | 
				
			||||||
SEARCH_URL = '%s/search/' % BASE_URL
 | 
					SEARCH_URL = '%s/search/' % BASE_URL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TAG_URL = '%s/tag' % BASE_URL
 | 
					TAG_URL = ['%s/tag' % BASE_URL,
 | 
				
			||||||
 | 
					           '%s/artist' % BASE_URL,
 | 
				
			||||||
 | 
					           '%s/character' % BASE_URL,
 | 
				
			||||||
 | 
					           '%s/parody' % BASE_URL,
 | 
				
			||||||
 | 
					           '%s/group' % BASE_URL]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TAG_API_URL = '%s/api/galleries/tagged' % BASE_URL
 | 
					TAG_API_URL = '%s/api/galleries/tagged' % BASE_URL
 | 
				
			||||||
LOGIN_URL = '%s/login/' % BASE_URL
 | 
					LOGIN_URL = '%s/login/' % BASE_URL
 | 
				
			||||||
CHALLENGE_URL = '%s/challenge' % BASE_URL
 | 
					CHALLENGE_URL = '%s/challenge' % BASE_URL
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -194,16 +194,22 @@ def print_doujinshi(doujinshi_list):
 | 
				
			|||||||
                tabulate(tabular_data=doujinshi_list, headers=headers, tablefmt='rst'))
 | 
					                tabulate(tabular_data=doujinshi_list, headers=headers, tablefmt='rst'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def tag_parser(tag_name, max_page=1):
 | 
					def tag_parser(tag_name, max_page=1, index=0):
 | 
				
			||||||
    result = []
 | 
					    result = []
 | 
				
			||||||
    tag_name = tag_name.lower()
 | 
					    tag_name = tag_name.lower()
 | 
				
			||||||
    tag_name = tag_name.replace(' ', '-')
 | 
					    tag_name = tag_name.replace(' ', '-')
 | 
				
			||||||
 | 
					    if ',' in tag_name:
 | 
				
			||||||
 | 
					        tag_name = tag_name.split(',')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for p in range(1, max_page + 1):
 | 
					    for p in range(1, max_page + 1):
 | 
				
			||||||
        logger.debug('Fetching page {0} for doujinshi with tag \'{1}\''.format(p, tag_name))
 | 
					        logger.debug('Fetching page {0} for doujinshi with tag \'{1}\''.format(p, tag_name))
 | 
				
			||||||
        response = request('get', url='%s/%s/?page=%d' % (constant.TAG_URL, tag_name, p)).content
 | 
					        if isinstance(tag_name, str):
 | 
				
			||||||
 | 
					            response = request('get', url='%s/%s/?page=%d' % (constant.TAG_URL[index], tag_name, p)).content
 | 
				
			||||||
        result += _get_title_and_id(response)
 | 
					            result += _get_title_and_id(response)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            for i in tag_name:
 | 
				
			||||||
 | 
					                response = request('get', url='%s/%s/?page=%d' % (constant.TAG_URL[index], i, p)).content
 | 
				
			||||||
 | 
					                result += _get_title_and_id(response)
 | 
				
			||||||
        if not result:
 | 
					        if not result:
 | 
				
			||||||
            logger.error('Cannot find doujinshi id of tag \'{0}\''.format(tag_name))
 | 
					            logger.error('Cannot find doujinshi id of tag \'{0}\''.format(tag_name))
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user