search for download

This commit is contained in:
ricterz 2015-05-09 13:48:11 +08:00
parent e91457889e
commit 0583c7910c
5 changed files with 34 additions and 10 deletions

View File

@ -8,7 +8,7 @@ def banner():
print ''' _ _ _ _ print ''' _ _ _ _
_ __ | | | | ___ _ __ | |_ __ _(_) _ __ | | | | ___ _ __ | |_ __ _(_)
| '_ \| |_| |/ _ \ '_ \| __/ _` | | | '_ \| |_| |/ _ \ '_ \| __/ _` | |
| | | | _ | __/ | | | || (_| |w | | | | | _ | __/ | | | || (_| | |
|_| |_|_| |_|\___|_| |_|\__\__,_|_| |_| |_|_| |_|\___|_| |_|\__\__,_|_|
''' '''
@ -30,7 +30,7 @@ def cmd_parser():
_ = map(lambda id: id.strip(), args.ids.split(',')) _ = map(lambda id: id.strip(), args.ids.split(','))
args.ids = set(map(int, ifilter(lambda id: id.isdigit(), _))) args.ids = set(map(int, ifilter(lambda id: id.isdigit(), _)))
if args.is_download and not args.id and not args.ids: if args.is_download and not args.id and not args.ids and not args.keyword:
logger.critical('Dojinshi id/ids is required for downloading') logger.critical('Dojinshi id/ids is required for downloading')
parser.print_help() parser.print_help()
raise SystemExit raise SystemExit

View File

@ -2,3 +2,4 @@ SCHEMA = 'http://'
URL = '%snhentai.net' % SCHEMA URL = '%snhentai.net' % SCHEMA
DETAIL_URL = '%s/g' % URL DETAIL_URL = '%s/g' % URL
IMAGE_URL = '%si.nhentai.net/galleries' % SCHEMA IMAGE_URL = '%si.nhentai.net/galleries' % SCHEMA
SEARCH_URL = '%s/search/' % URL

View File

@ -87,4 +87,3 @@ class Downloader(object):
# clean threads list # clean threads list
self.threads = [] self.threads = []
logger.log(15, u'🍺 All done, saved to \'%s\'!' % folder)

View File

@ -2,15 +2,15 @@ import sys
import re import re
import requests import requests
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from constant import DETAIL_URL from constant import DETAIL_URL, SEARCH_URL
from hentai.logger import logger from hentai.logger import logger
def dojinshi_parser(id): def dojinshi_parser(id):
logger.debug('Fetching dojinshi information') if not isinstance(id, (int, )) and (isinstance(id, (str, )) and not id.isdigit()):
if not isinstance(id, (int, )) or (isinstance(id, (str, )) and not id.isdigit()):
raise Exception('Dojinshi id(%s) is not valid' % str(id)) raise Exception('Dojinshi id(%s) is not valid' % str(id))
id = int(id) id = int(id)
logger.debug('Fetching dojinshi information of id %d' % id)
dojinshi = dict() dojinshi = dict()
dojinshi['id'] = id dojinshi['id'] = id
url = '%s/%d/' % (DETAIL_URL, id) url = '%s/%d/' % (DETAIL_URL, id)
@ -50,12 +50,29 @@ def dojinshi_parser(id):
def search_parser(keyword): def search_parser(keyword):
logger.debug('Searching dojinshis of keyword %s' % keyword) logger.debug('Searching dojinshis of keyword %s' % keyword)
return [] result = []
response = requests.get(SEARCH_URL, params={'q': keyword}).content
html = BeautifulSoup(response)
dojinshi_search_result = html.find_all('div', attrs={'class': 'preview-container'})
for dojinshi in dojinshi_search_result:
dojinshi_container = dojinshi.find('div', attrs={'class': 'caption'})
title = dojinshi_container.text.strip()
id_ = re.search('/g/(\d+)/', dojinshi.a['href']).group(1)
result.append({'id': id_, 'title': title})
return result
def tag_parser(tag): def tag_parser(tag):
pass pass
def print_dojinshi(dojinshi_list):
logger.log(15, 'Print Dojinshi list')
print '-' * 60
for dojinshi in dojinshi_list:
print dojinshi['id'], '-', dojinshi['title']
print '-' * 60
if __name__ == '__main__': if __name__ == '__main__':
print dojinshi_parser(32271) print dojinshi_parser(32271)

View File

@ -1,6 +1,6 @@
#coding: utf-8 #coding: utf-8
from hentai.cmdline import cmd_parser, banner from hentai.cmdline import cmd_parser, banner
from hentai.parser import dojinshi_parser, search_parser from hentai.parser import dojinshi_parser, search_parser, print_dojinshi
from hentai.dojinshi import Dojinshi from hentai.dojinshi import Dojinshi
from hentai.downloader import Downloader from hentai.downloader import Downloader
from hentai.logger import logger from hentai.logger import logger
@ -15,10 +15,15 @@ def main():
logger.log(15, 'nHentai: あなたも変態。 いいね?') logger.log(15, 'nHentai: あなたも変態。 いいね?')
dojinshi_ids = []
dojinshi_list = [] dojinshi_list = []
if options.keyword: if options.keyword:
dojinshi_ids = search_parser(options.keyword) dojinshis = search_parser(options.keyword)
if options.is_download:
dojinshi_ids = map(lambda d: d['id'], dojinshis)
else:
print_dojinshi(dojinshis)
else: else:
dojinshi_ids = options.ids dojinshi_ids = options.ids
@ -38,6 +43,8 @@ def main():
else: else:
map(lambda dojinshi: dojinshi.show(), dojinshi_list) map(lambda dojinshi: dojinshi.show(), dojinshi_list)
logger.log(15, u'🍺 All done.')
if __name__ == '__main__': if __name__ == '__main__':
main() main()