def query_bangumi_detail(self, bgm_id): api_url = 'http://api.bgm.tv/subject/' + bgm_id + '?responseGroup=large' r = bangumi_request.get(api_url) if r.status_code > 399: r.raise_for_status() return r.text
def get_bgm_info(self, bgm_id): bangumi_tv_url_base = 'http://api.bgm.tv/subject/' bangumi_tv_url_param = '?responseGroup=large' bangumi_tv_url = bangumi_tv_url_base + str( bgm_id) + bangumi_tv_url_param r = bangumi_request.get(bangumi_tv_url) if r.status_code < 400: return r.status_code, r.json() else: return r.status_code, {}
def search_bangumi(self, type, term, offset, count): ''' search bangumi from bangumi.tv, properly handling cookies is required for the bypass anti-bot mechanism :param term: a urlencoded word of the search term. :return: a json object ''' result = {"data": [], "total": 0} api_url = 'http://api.bgm.tv/search/subject/{0}?responseGroup=large&max_result={1}&start={2}&type={3}'.format( term.encode('utf-8'), count, offset, type) r = bangumi_request.get(api_url) if r.status_code > 399: r.raise_for_status() try: bgm_content = r.json() except Exception as error: logger.warn(error) result['message'] = 'fail to query bangumi' return json_resp(result, 500) if 'code' in bgm_content and bgm_content['code'] == 404: return json_resp(result, 200) bgm_list = bgm_content['list'] total_count = bgm_content['results'] if len(bgm_list) == 0: return json_resp(result) bgm_id_list = [bgm['id'] for bgm in bgm_list] bangumi_list = self.get_bangumi_from_bgm_id_list(bgm_id_list) for bgm in bgm_list: bgm['bgm_id'] = bgm.get('id') bgm['id'] = None # if bgm_id has found in database, give the database id to bgm.id # that's we know that this bangumi exists in our database for bangumi in bangumi_list: if bgm['bgm_id'] == bangumi.bgm_id: bgm['id'] = bangumi.id break bgm_images = bgm.get('images') if bgm_images: bgm['image'] = bgm_images.get('large') # remove useless keys bgm.pop('images', None) bgm.pop('collection', None) bgm.pop('url', None) bgm.pop('type', None) result['data'] = bgm_list result['total'] = total_count return json_resp(result)
def search_bangumi(self, type, term, offset, count): """ search bangumi from bangumi.tv, properly handling cookies is required for the bypass anti-bot mechanism :param term: a urlencoded word of the search term. :return: a json object """ result = {"data": [], "total": 0} api_url = 'http://api.bgm.tv/search/subject/{0}?responseGroup=large&max_result={1}&start={2}&type={3}'.format(term.encode('utf-8'), count, offset, type) r = bangumi_request.get(api_url) if r.status_code > 399: r.raise_for_status() try: bgm_content = r.json() except Exception as error: logger.warn(error) result['message'] = 'fail to query bangumi' return json_resp(result, 500) if 'code' in bgm_content and bgm_content['code'] == 404: return json_resp(result, 200) bgm_list = bgm_content['list'] total_count = bgm_content['results'] if len(bgm_list) == 0: return json_resp(result) bgm_id_list = [bgm['id'] for bgm in bgm_list] bangumi_list = self.get_bangumi_from_bgm_id_list(bgm_id_list) for bgm in bgm_list: bgm['bgm_id'] = bgm.get('id') bgm['id'] = None # if bgm_id has found in database, give the database id to bgm.id # that's we know that this bangumi exists in our database for bangumi in bangumi_list: if bgm['bgm_id'] == bangumi.bgm_id: bgm['id'] = bangumi.id break bgm_images = bgm.get('images') if bgm_images: bgm['image'] = bgm_images.get('large') # remove useless keys bgm.pop('images', None) bgm.pop('collection', None) bgm.pop('url', None) bgm.pop('type', None) result['data'] = bgm_list result['total'] = total_count return json_resp(result)