示例#1
0
 def get_episodes(season_id: int) -> dict:
     Data = requests.get(
         f'https://api.bilibili.com/pgc/web/season/section?season_id={season_id}',
     )
     JsonDATA = json.loads(Data.text)
     EpisodeDict = {
         'aid': 'aid',
         'title': 'long_title',
         'episode_id': 'id',
         'short_title': 'title'
     }
     MainEpisodes = []
     for MainEpisode in JsonDATA['result']['main_section']['episodes']:
         MainEpisodes.append(extractor(data=MainEpisode, dicts=EpisodeDict))
     OtherEpisodes = []  # 其它剧集的分支列表
     for OtherEpisode in JsonDATA['result']['section']:
         Episodes = []  # 剧集分支的具体剧集列表
         for range_var3 in OtherEpisode['episodes']:
             Episodes.append(extractor(data=range_var3, dicts=EpisodeDict))
         OtherEpisodes.append(Episodes)
     return {
         'response_code': Data.status_code,
         'return_code': JsonDATA['code'],
         'main_episodes': MainEpisodes,
         'other_episodes': OtherEpisodes
     }
示例#2
0
 def get_relate_video(tag_id: int,
                      page: int = 1,
                      page_size: int = 10) -> dict:
     Data = requests.get(
         f'https://api.bilibili.com/x/web-interface/tag/top?pn={page}&ps={page_size}&tid={tag_id}'
     )
     if Data.text == '':
         return {
             'response_code': Data.status_code,
             'return_code': '-1',
             'videos': []
         }
     JsonData = json.loads(Data.text)
     VideoInfoDict = {
         'aid': 'aid',
         'bvid': 'bvid',
         'title': 'title',
         'tname': 'tname',
         'copyright': 'copyright',
         'upload_time': 'pubdate',
         'introduction': 'desc'
     }
     VideoDataDict = {
         'view': 'view',
         'danmaku': 'danmaku',
         'like': 'like',
         'dislike': 'dislike',
         'reply': 'reply',
         'coin': 'coin',
         'collect': 'favorite',
         'share': 'share'
     }
     VideoList = []
     for Video in JsonData['data']:
         VideoList.append({
             **extractor(data=Video, dicts=VideoInfoDict),
             **extractor(data=Video['stat'], dicts=VideoDataDict)
         })
     return {
         'response_code': Data.status_code,
         'return_code': JsonData['code'],
         'videos': VideoList
     }
示例#3
0
    def get_recommends(season_id: int) -> dict:
        Data = requests.get(
            f'https://api.bilibili.com/pgc/web/recommend/related/recommend?season_id={season_id}'
        )
        JsonData = json.loads(Data.text)
        ReturnData = {'original': [], 'recommend': []}
        # 获取原作漫画
        OriginalDict = {
            'message1': 'desc1',
            'message2': 'desc2',
            'item_id': 'item_id',
            'status': 'label',
            'title': 'title',
            'tname': 'tname',
            'url': 'url'
        }
        for originals in JsonData['result']['relates']:
            original = extractor(data=originals, dicts=OriginalDict)
            original['messages'] = [original['message1'], original['message2']]
            del original['message1'], original['message2']
            ReturnData['original'].append(original)
        # 获取推荐番剧
        RecommendDict = {
            'title': 'title',
            'season_id': 'season_id',
            'new_ep': ['new_ep', 'id'],
            'num': ['new_ep', 'index'],
            'score': ['rating', 'score'],
            'score_count': ['rating', 'count'],
            'danmaku': ['stat', 'danmaku'],
            'follow': ['stat', 'follow'],
            'view': ['stat', 'view']
        }
        for recommend in JsonData['result']['season']:
            ReturnData['recommend'].append(
                extractor(data=recommend, dicts=RecommendDict))

        return {
            'response_code': Data.status_code,
            'return_code': JsonData['code'],
            **ReturnData
        }
示例#4
0
    def get_replies(self, sort, pn) -> dict:
        num = bv2av('BV' + self.num) if self.code == 'bvid' else self.num
        Data = requests.get(
            f'http://api.bilibili.com/x/v2/reply?pn={pn}&type=1&sort={sort}&oid={num}'
        )
        JsonData = json.loads(Data.text)
        all_page = int(JsonData['data']['page']['count'])
        all_page = all_page / 20 if all_page / 20 == int(
            all_page / 20) else int(all_page / 20) + 1

        ReplyList = []
        ReplyDict = {
            'name': ['member', 'uname'],
            'level': ['member', 'level_info', 'current_level'],
            'sex': ['member', 'sex'],
            'official': ['member', 'official_verify', 'desc'],
            'like': 'like',
            'reply': 'rcount',
            'upload_time': 'ctime',
            'content': ['content', 'message'],
            'up_like': ['up_action', 'like'],
            'up_reply': ['up_action', 'reply']
        }
        for Replies in JsonData['data']['replies']:
            ReplyList.append({
                **extractor(data=Replies, dicts=ReplyDict), 'replies': []
            })
            if Replies['replies']:
                for ChildReplies in Replies['replies']:
                    ReplyList[len(ReplyList) -
                              1]['replies'].append({
                                  **extractor(data=ChildReplies,
                                              dicts=ReplyDict), 'replies': []
                              })
        return {
            'response_code': Data.status_code,
            'return_code': JsonData['code'],
            'replies': ReplyList,
            'all_page': all_page
        }
示例#5
0
 def user_top_video(self):
     """返回用户的置顶视频"""
     Data = requests.get(f'https://api.bilibili.com/x/space/top/arc?vmid={self.user_uid}', headers = self.headers)
     JsonData = json.loads(Data.text)
     if Data.status_code != 200 or JsonData['code'] != 0:  # 判断是否有置顶视频
         return {'response_code': Data.status_code, 'return_code': JsonData['code']}
     TopVideoDict = {'aid': 'aid', 'bvid': 'bvid', 'tname': 'tname', 'copyright': 'copyright', 'title': 'title',
                     'upload_time': 'ctime', 'introduction': 'desc', 'view': 'view', 'danmaku': 'danmaku',
                     'reply': 'reply', 'like': 'like', 'dislike': 'dislike', 'coin': 'coin', 'collect': 'favorite',
                     'share': 'share'}
     ReturnData = extractor(data = {**JsonData['data'], **JsonData['data']['stat']}, dicts = TopVideoDict)
     ReturnData['upload_time'] = int(ReturnData['upload_time'])
     return {'response_code': Data.status_code, 'return_code': JsonData['code'], **ReturnData}
示例#6
0
def get_default_search_word() -> dict:
    Data = requests.get(
        'https://api.bilibili.com/x/web-interface/search/default')
    JsonData = json.loads(Data.text)
    return {
        'response_code':
        Data.status_code,
        'return_code':
        JsonData['code'],
        **extractor(data=JsonData['data'],
                    dicts={
                        'name': 'show_name',
                        'url': 'url'
                    })
    }
示例#7
0
 def user_info(self):
     """Return user`s basic info"""
     # 请求用户基础信息
     Data = requests.get(f'https://api.bilibili.com/x/space/acc/info?mid={self.user_uid}',
                         headers = self.headers)
     # 获取请求资源码
     response_code = Data.status_code
     Data = json.loads(Data.text)
     # 获取网站返回码
     return_code = Data['code']
     if response_code != 200 or return_code != 0:  # 如果返回码错误,则返回空数据
         return {'response_code': response_code, 'return_code': return_code}
     InfoDict = {'name': 'name', 'sex': 'sex', 'sign': 'sign', 'level': 'level', 'birthday': 'birthday',
                 'fans_badge': 'fans_badge', 'official': ['official', 'title'], 'vip': ['vip', 'status']}
     return {'response_code': response_code, 'return_code': return_code,
             **extractor(Data['data'], dicts = InfoDict)}
示例#8
0
 def get_bangumi_data(season_id: int) -> dict:
     Data = requests.get(
         f'https://api.bilibili.com/pgc/web/season/stat?season_id={season_id}'
     )
     JsonData = json.loads(Data.text)
     DataDict = {
         'view': 'views',
         'coin': 'coins',
         'danmaku': 'danmakus',
         'follower': 'series_follow'
     }
     return {
         'response_code': Data.status_code,
         'return_code': JsonData['code'],
         **extractor(data=JsonData['result'], dicts=DataDict)
     }
示例#9
0
 def user_video(self, pn):
     """Return user`s video list"""
     Data = requests.get(f'http://space.bilibili.com/ajax/member/getSubmitVideos?mid={self.user_uid}&page={pn}',
                         headers = self.headers)
     JsonData = json.loads(Data.text)
     VideoList = []
     Page = JsonData['data']['pages']
     VideoDict = {'title': 'title', 'reply': 'comment', 'view': 'play', 'upload_time': 'created',
                  'danmaku': 'video_review', 'introduction': 'description', 'length': 'length',
                  'collect': 'favorites', 'aid': 'aid'}
     for Video in JsonData['data']['vlist']:
         video = extractor(data = Video, dicts = VideoDict)
         video['bvid'] = av2bv(video['aid'])
         VideoList.append(video)
     return {'response_code': Data.status_code, 'return_code': 0 if JsonData['status'] else -1,
             'pages': Page, 'data': VideoList}
示例#10
0
 def video_info(self) -> dict:
     """Return video info"""
     if self.return_code != 0 or self.response_code != 200:
         return {
             'response_code': self.response_code,
             'return_code': self.return_code
         }
     VideoInfoDict = {'upload_time': 'pubdate', 'owner': ['owner', 'name']}
     VideoInfoList = ['aid', 'bvid', 'title', 'tname', 'copyright']
     Data = extractor(data=self.MainData['data'],
                      dicts=VideoInfoDict,
                      copy_list=VideoInfoList)
     return {
         'response_code': self.response_code,
         'return_code': self.return_code,
         **Data
     }
示例#11
0
    def get_replies(media_id: int,
                    reply_type: str = 'short',
                    sort: 'int, str' = 0,
                    cursor: int = None,
                    page_size: int = 20):
        """
        获取番剧的长/短评\n
        :param media_id: 番剧的media_id
        :param reply_type: 获取的评论类型(short为短评,long为长评)(short)
        :param sort: 评论的排序(1为最新,0为默认)(0)
        :param cursor: 用于连续请求评论的标识符,可由此方法的返回值得到(None)
        :param page_size: 一次请求返回的评论数量(20)
        """
        Url = f'https://api.bilibili.com/pgc/review/{reply_type}/list?media_id={media_id}&ps={page_size}&sort={sort}' \
              + (f'&cursor={cursor}' if cursor is not None else '')
        Data = requests.get(Url)
        JsonData = json.loads(Data.text)
        ReplyList = []

        ShortReplyDict = {
            'name': ['author', 'uname'],
            'uid': 'mid',
            'vip_status': ['vip', 'vipStatus'],
            'content': 'content',
            'upload_time': 'mtime',
            'progress': 'progress',
            'score': 'score',
            'like': ['stat', 'likes']
        }
        LongReplyDict = {
            **ShortReplyDict, 'reply': ['stat', 'reply'],
            'url': 'url'
        }

        for replies in JsonData['data']['list']:
            ReplyList.append(
                extractor(data=replies,
                          dicts=ShortReplyDict
                          if reply_type == 'short' else LongReplyDict))
        return {
            'response_code': Data.status_code,
            'return_code': JsonData['code'],
            'total': JsonData['data']['total'],
            'cursor': JsonData['data']['next'],
            'replies': ReplyList
        }
示例#12
0
 def video_part(self) -> dict:
     if self.return_code != 0 or self.response_code != 200:
         return {
             'response_code': self.response_code,
             'return_code': self.return_code
         }
     PartDict = {'name': 'part', 'cid': 'cid', 'length': 'duration'}
     PartList = []
     for Index in self.MainData['data']['pages']:
         Part = extractor(Index, PartDict)
         Part['length'] = TickToMinute(Part['length'])
         PartList.append(Part)
     return {
         'response_code': self.response_code,
         'return_code': self.return_code,
         'part': PartList
     }
示例#13
0
 def get_bangumi_info(media_id: int) -> dict:
     Data = requests.get(
         f'https://api.bilibili.com/pgc/review/user?media_id={media_id}')
     JsonData = json.loads(Data.text)
     InfoDict = {
         'title': 'title',
         'season_id': 'season_id',
         'new_ep': ['new_ep', 'id'],
         'num': ['new_ep', 'index'],
         'score': ['rating', 'score'],
         'score_count': ['rating', 'count'],
         'area': ['areas', 0, 'name']
     }
     return {
         'response_code': Data.status_code,
         'return_code': JsonData['code'],
         **extractor(data=JsonData['result']['media'], dicts=InfoDict)
     }
示例#14
0
 def get_status(season_id: int) -> dict:
     Data = requests.get(
         f'https://api.bilibili.com/pgc/view/web/season/user/status?season_id={season_id}'
     )
     JsonData = json.loads(Data.text)
     StatusDict = {
         'area_limit': 'area_limit',
         'is_baned': 'ban_area_show',
         'title': ['dialog', 'title'],
         'aid': ['paster', 'aid'],
         'cid': ['paster', 'cid'],
         'length': ['paster', 'duration'],
         'url': ['paster', 'url']
     }
     return {
         'response_code': Data.status_code,
         'return_code': JsonData['code'],
         **extractor(data=JsonData['result'], dicts=StatusDict)
     }
示例#15
0
 def get_tags(self) -> dict:
     Data = requests.get(
         f'https://api.bilibili.com/x/web-interface/view/detail/tag?{self.code}={self.num}'
     )
     JsonData = json.loads(Data.text)
     TagList = []
     TagDict = {
         'upload_time': 'ctime',
         'dislike': 'hates',
         'like': 'likes',
         'content': 'short_content',
         'follower': 'subscribed_count',
         'tag_id': 'tag_id',
         'name': 'tag_name',
         'type': 'tag_type'
     }
     for tags in JsonData['data']:
         TagList.append(extractor(data=tags, dicts=TagDict))
     return {
         'response_code': Data.status_code,
         'return_code': JsonData['code'],
         'tag_list': TagList
     }
示例#16
0
 def video_data(self) -> dict:
     """Return video data"""
     if self.return_code != 0 or self.response_code != 200:
         return {
             'response_code': self.response_code,
             'return_code': self.return_code
         }
     VideoDataDict = {
         'view': 'view',
         'danmaku': 'danmaku',
         'like': 'like',
         'dislike': 'dislike',
         'reply': 'reply',
         'coin': 'coin',
         'collect': 'favorite',
         'share': 'share'
     }
     return {
         'response_code': self.response_code,
         'return_code': self.return_code,
         **extractor(data=self.MainData['data']['stat'],
                     dicts=VideoDataDict)
     }
示例#17
0
    def get_questions(self, edge_id: int = None) -> dict:
        num = 'BV' + self.num if self.code == 'bvid' else self.num
        Url = f'https://api.bilibili.com/x/stein/edgeinfo_v2?{self.code}={num}&graph_version=303884' +\
              (f'&edge_id={edge_id}' if edge_id else '')
        Data = requests.get(Url)
        JsonData = json.loads(Data.text)
        QuestionList = []

        QuestionDict = {
            'cid': 'cid',
            'edge_id': 'id',
            'is_default': 'is_default',
            'content': 'option'
        }
        for Questions in JsonData['data']['edges']['questions']:
            ChoiceList = []
            for Choices in Questions['choices']:
                ChoiceList.append(extractor(data=Choices, dicts=QuestionDict))
            QuestionList.append(ChoiceList)
        return {
            'response_code': Data.status_code,
            'return_code': JsonData['code'],
            'question_list': QuestionList
        }
示例#18
0
 def user_follows(self):
     Data = requests.get(f'https://api.bilibili.com/x/relation/stat?vmid={self.user_uid}')
     JsonData = json.loads(Data.text)
     FollowCopyList = ['black', 'follower', 'following']
     return {'response_code': Data.status_code, 'return_code': JsonData['code'],
             **extractor(data = JsonData['data'], copy_list = FollowCopyList)}