1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
| import requests import json import re class Biliapi(object): "B站API操作" __headers = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36", "Referer": "https://www.bilibili.com/", } def __init__(self, cookieData): self.__session = requests.session() requests.utils.add_dict_to_cookiejar(self.__session.cookies, cookieData) self.__session.headers.update(Biliapi.__headers) self.__bili_jct = cookieData["bili_jct"] self.__uid = cookieData["DedeUserID"] content = self.__session.get("https://account.bilibili.com/home/reward") if json.loads(content.text)["code"] != 0: raise Exception("参数验证失败") def getReward(self): "取B站经验信息" url = "https://account.bilibili.com/home/reward" content = self.__session.get(url) return json.loads(content.text)["data"] @staticmethod def getId(url): "取B站指定视频链接的aid和cid号" content = requests.get(url, headers=Biliapi.__headers) match = re.search( 'https:\/\/www.bilibili.com\/video\/av(.*?)\/\">', content.text, 0) aid = match.group(1) match = re.search( '\"cid\":(.*?),', content.text, 0) cid = match.group(1) return {"aid": aid, "cid": cid} def getCoin(self): "获取剩余硬币数" url = "https://api.bilibili.com/x/web-interface/nav?build=0&mobi_app=web" content = self.__session.get(url) return int(json.loads(content.text)["data"]["money"]) def coin(self, aid, num, select_like): "给指定av号视频投币" url = "https://api.bilibili.com/x/web-interface/coin/add" post_data = { "aid": aid, "multiply": num, "select_like": select_like, "cross_domain": "true", "csrf": self.__bili_jct } content = self.__session.post(url, post_data) return json.loads(content.text) def share(self, aid): "分享指定av号视频" url = "https://api.bilibili.com/x/web-interface/share/add" post_data = { "aid": aid, "csrf": self.__bili_jct } content = self.__session.post(url, post_data) return json.loads(content.text) def report(self, aid, cid, progres): "B站上报观看进度" url = "http://api.bilibili.com/x/v2/history/report" post_data = { "aid": aid, "cid": cid, "progres": progres, "csrf": self.__bili_jct } content = self.__session.post(url, post_data) return json.loads(content.text) def getHomePageUrls(self): "取B站首页推荐视频地址列表" url = "https://www.bilibili.com" content = self.__session.get(url) match = re.findall( '<div class=\"info-box\"><a href=\"(.*?)\" target=\"_blank\">', content.text, 0) match = ["https:" + x for x in match] return match @staticmethod def getRegions(rid=1, num=6): "获取B站分区视频信息" url = "https://api.bilibili.com/x/web-interface/dynamic/region?ps=" + str(num) + "&rid=" + str(rid) content = requests.get(url, headers=Biliapi.__headers) datas = json.loads(content.text)["data"]["archives"] ids = [] for x in datas: ids.append({"title": x["title"], "aid": x["aid"], "bvid": x["bvid"], "cid": x["cid"]}) return ids @staticmethod def getRankings(rid=1, day=3): "获取B站分区排行榜视频信息" url = "https://api.bilibili.com/x/web-interface/ranking?rid=" + str(rid) + "&day=" + str(day) content = requests.get(url, headers=Biliapi.__headers) datas = json.loads(content.text)["data"]["list"] ids = [] for x in datas: ids.append({"title": x["title"], "aid": x["aid"], "bvid": x["bvid"], "cid": x["cid"], "coins": x["coins"], "play": x["play"]}) return ids def repost(self, dynamic_id, content="", extension='{"emoji_type":1}'): "转发B站动态" url = "https://api.vc.bilibili.com/dynamic_repost/v1/dynamic_repost/repost" post_data = { "uid": self.__uid, "dynamic_id": dynamic_id, "content": content, "extension": extension, "csrf_token": self.__bili_jct } content = self.__session.post(url, post_data) return json.loads(content.text) def getDynamicNew(self, type_list='268435455'): "取B站用户动态数据" url = "https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=" + self.__uid + "&type_list=" + type_list content = self.__session.get(url) return json.loads(content.text) @staticmethod def mangaClockIn(access_key, platform="android"): "模拟B站漫画客户端签到" url = "https://manga.bilibili.com/twirp/activity.v1.Activity/ClockIn" headers = { "User-Agent": "Mozilla/5.0 BiliComic/3.0.0", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", } post_data = { "access_key": access_key, "platform": platform } content = requests.post(url, data=post_data, headers=headers) return json.loads(content.text) def xliveSign(self): "B站直播签到" url = "https://api.live.bilibili.com/xlive/web-ucenter/v1/sign/DoSign" content = self.__session.get(url) return json.loads(content.text)
|