-def __api_suspended_search_parser(keyword, page):
- logger.debug('Searching doujinshis using keywords {0}'.format(keyword))
- result = []
- i = 0
- while i < 5:
- try:
- response = request('get', url=constant.SEARCH_URL, params={'query': keyword, 'page': page}).json()
- except Exception as e:
- i += 1
- if not i < 5:
- logger.critical(str(e))
- logger.warn('If you are in China, please configure the proxy to fu*k GFW.')
- exit(1)
- continue
- break
-
- if 'result' not in response:
- raise Exception('No result in response')
-
- for row in response['result']:
- title = row['title']['english']
- title = title[:85] + '..' if len(title) > 85 else title
- result.append({'id': row['id'], 'title': title})
-
- if not result:
- logger.warn('No results for keywords {}'.format(keyword))
-
- return result
-
-
-def print_doujinshi(doujinshi_list):
- if not doujinshi_list:
- return
- doujinshi_list = [(i['id'], i['title']) for i in doujinshi_list]
- headers = ['id', 'doujinshi']
- logger.info('Search Result\n' +
- tabulate(tabular_data=doujinshi_list, headers=headers, tablefmt='rst'))
-
-
-def __api_suspended_tag_parser(tag_id, max_page=1):
- logger.info('Searching for doujinshi with tag id {0}'.format(tag_id))
- result = []
- response = request('get', url=constant.TAG_API_URL, params={'sort': 'popular', 'tag_id': tag_id}).json()
- page = max_page if max_page <= response['num_pages'] else int(response['num_pages'])
-
- for i in range(1, page + 1):
- logger.info('Getting page {} ...'.format(i))
-
- if page != 1:
- response = request('get', url=constant.TAG_API_URL,
- params={'sort': 'popular', 'tag_id': tag_id}).json()
- for row in response['result']:
- title = row['title']['english']
- title = title[:85] + '..' if len(title) > 85 else title
- result.append({'id': row['id'], 'title': title})
-
- if not result:
- logger.warn('No results for tag id {}'.format(tag_id))
-
- return result
-
-
-def tag_parser(tag_name, max_page=1):
- result = []
- tag_name = tag_name.lower()
- tag_name = tag_name.replace(' ', '-')
-
- for p in range(1, max_page + 1):
- 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
-
- html = BeautifulSoup(response, 'html.parser')
- doujinshi_items = html.find_all('div', attrs={'class': 'gallery'})
- if not doujinshi_items:
- logger.error('Cannot find doujinshi id of tag \'{0}\''.format(tag_name))
- return
-
- for i in doujinshi_items:
- doujinshi_id = i.a.attrs['href'].strip('/g')
- doujinshi_title = i.a.text.strip()
- doujinshi_title = doujinshi_title if len(doujinshi_title) < 85 else doujinshi_title[:82] + '...'
- result.append({'title': doujinshi_title, 'id': doujinshi_id})
-
- if not result:
- logger.warn('No results for tag \'{}\''.format(tag_name))
-
- return result
-
-