+
+def search_parser(keyword, sorting, page, is_page_all=False):
+ # keyword = '+'.join([i.strip().replace(' ', '-').lower() for i in keyword.split(',')])
+ result = []
+ if not page:
+ page = [1]
+
+ if is_page_all:
+ url = request('get', url=constant.SEARCH_URL, params={'query': keyword}).url
+ init_response = request('get', url.replace('%2B', '+')).json()
+ page = range(1, init_response['num_pages']+1)
+
+ total = '/{0}'.format(page[-1]) if is_page_all else ''
+ for p in page:
+ i = 0
+
+ logger.info('Searching doujinshis using keywords "{0}" on page {1}{2}'.format(keyword, p, total))
+ while i < 3:
+ try:
+ url = request('get', url=constant.SEARCH_URL, params={'query': keyword,
+ 'page': p, 'sort': sorting}).url
+ response = request('get', url.replace('%2B', '+')).json()
+ except Exception as e:
+ logger.critical(str(e))
+
+ break
+
+ if 'result' not in response:
+ logger.warn('No result in response in page {}'.format(p))
+ break
+
+ 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 __api_suspended_doujinshi_parser(id_):
+ if not isinstance(id_, (int,)) and (isinstance(id_, (str,)) and not id_.isdigit()):
+ raise Exception('Doujinshi id({0}) is not valid'.format(id_))
+
+ id_ = int(id_)
+ logger.log(15, 'Fetching information of doujinshi id {0}'.format(id_))
+ doujinshi = dict()
+ doujinshi['id'] = id_
+ url = '{0}/{1}'.format(constant.DETAIL_URL, id_)
+ i = 0
+ while 5 > i:
+ try:
+ response = request('get', url).json()
+ except Exception as e:
+ i += 1
+ if not i < 5:
+ logger.critical(str(e))
+ exit(1)
+ continue
+ break
+
+ doujinshi['name'] = response['title']['english']
+ doujinshi['subtitle'] = response['title']['japanese']
+ doujinshi['img_id'] = response['media_id']
+ doujinshi['ext'] = ''.join([i['t'] for i in response['images']['pages']])
+ doujinshi['pages'] = len(response['images']['pages'])
+
+ # gain information of the doujinshi
+ needed_fields = ['character', 'artist', 'language', 'tag', 'parody', 'group', 'category']
+ for tag in response['tags']:
+ tag_type = tag['type']
+ if tag_type in needed_fields:
+ if tag_type == 'tag':
+ if tag_type not in doujinshi:
+ doujinshi[tag_type] = {}
+
+ tag['name'] = tag['name'].replace(' ', '-')
+ tag['name'] = tag['name'].lower()
+ doujinshi[tag_type][tag['name']] = tag['id']
+ elif tag_type not in doujinshi:
+ doujinshi[tag_type] = tag['name']
+ else:
+ doujinshi[tag_type] += ', ' + tag['name']
+
+ return doujinshi
+
+