def getRoomInfo(self): Log.info("正在生成直播间信息...") payload = {} data = Curl().get("https://account.bilibili.com/api/myinfo/v2",payload) data = json.loads(data) if "code" in data and data["code"] != 0: Log.warning("获取账号信息失败!"+data["message"]) Log.warning("清空礼物功能禁用!") self.lock = int(time.time()) + 100000000 return self.uid = data["mid"] payload = { "id":config["Live"]["ROOM_ID"] } data = Curl().get("https://api.live.bilibili.com/room/v1/Room/get_info",payload) data = json.loads(data) if data["code"] != 0: Log.warning("获取主播房间号失败!"+data["message"]) Log.warning("清空礼物功能禁用!") self.lock = int(time.time()) + 100000000 return Log.info("直播间信息生成完毕!") self.ruid = data["data"]["uid"] self.roomid = data["data"]["room_id"]
def getAllJobs(): #Get job ids and names from the server to repopulate the database. curl = Curl() curl.verbose=False headers = ['Content-Type: application/json','Accept: application/json'] url = '\''+baseURLMonitor+"user=%s\'" % userName output = curl.get(url,{},headers=headers) return output
def request(self,module,method,data=None): curl = Curl() if( method == 'post' ): res = curl.post(module,data) elif( method == 'put' ): res = curl.get(module,data) else: res = curl.get(module,data) return res
def request(self, module, method, data=None): curl = Curl() if (method == 'post'): res = curl.post(module, data) elif (method == 'put'): res = curl.get(module, data) else: res = curl.get(module, data) return res
def getAccessToken(self): c = Curl() param = { 'grant_type' : self.config('granttype'), 'client_id' : self.config('clientid'), 'client_secret' : self.config('secretkey'), 'scope' : self.config('scope') } res = json.loads(c.post('oauth/access_token',param)) return self.create(res)
def get(self, url="127.0.0.1", path="./download", override=False, header=True): self.url = url self.path = path self.override = override self.filename = url.split("/")[-1] self.source = Curl(url=self.url) self.data = self.source.get() self.header = header return self
def getJobStatus(ids): # serialize strIDs = pickle.dumps(ids) # instantiate curl curl = Curl() # execute url = baseURL + '/getJobStatus' data = {'ids':strIDs} status,output = curl.post(url,data) try: return status,pickle.loads(output) except Exception as e: logging.error(traceback.format_exc()) return 1,[]
def getToken(self, username, password): url = "https://passport.bilibili.com/api/v3/oauth2/login" payload = { "seccode": "", "validate": "", "subid": 1, "permission": "ALL", "username": username, "password": password, "captcha": "", "challenge": "", "cookies": account["Token"]["COOKIE"] } data = Curl().request_json("POST", url, headers=config["pcheaders"], data=payload) if data["code"] == 0: Log.info("账号登陆成功") else: Log.error("账号登陆失败" + "-" + data["message"]) if "Token" not in account: account["Token"] = {} account["Token"]["ACCESS_TOKEN"] = data["data"]["token_info"][ "access_token"] account["Token"]["REFRESH_TOKEN"] = data["data"]["token_info"][ "refresh_token"] csrf, uid, cookie = arrange_cookie(data) account["Token"]["CSRF"] = csrf account["Token"]["UID"] = uid set_cookie(cookie)
def send(self, value): url = "https://api.live.bilibili.com/gift/v2/live/bag_send" csrf = config["Token"]["CSRF"] payload = { "coin_type": "silver", "gift_id": value["gift_id"], "ruid": self.ruid, "uid": self.uid, "biz_id": self.roomid, "gift_num": value["gift_num"], "data_source_id": "", "data_behavior_id": "", "bag_id": value["bag_id"], "csrf_token": csrf, "csrf": csrf } data = Curl().request_json("POST", url, headers=config["pcheaders"], data=payload) if data["code"] != 0: Log.warning("送礼失败!" + data["message"]) else: Log.info( "成功向 %s 投喂了 %s 个 %s" % (payload["biz_id"], value["gift_num"], value["gift_name"]))
def work(self): if config["Function"]["GIFTSEND"] == "False": return if self.lock > int(time.time()): return if self.ruid == 0: self.getRoomInfo() if self.lock > int(time.time()): return url = "https://api.live.bilibili.com/gift/v2/gift/bag_list" payload = {} data = Curl().request_json("GET", url, headers=config["pcheaders"], params=payload) if data["code"] != 0: Log.warning("背包查看失败!" + data["message"]) if len(data["data"]["list"]) != 0: for each in data["data"]["list"]: if each["expire_at"] >= data["data"]["time"] and each[ "expire_at"] <= data["data"]["time"] + 3600: self.send(each) time.sleep(3) self.lock = int(time.time()) + 600
def getToken(self, username, password): payload = { "seccode": "", "validate": "", "subid": 1, "permission": "ALL", "username": username, "password": password, "captcha": "", "challenge": "", "cookies": config["Token"]["COOKIE"] } data = Curl().post("https://passport.bilibili.com/api/v3/oauth2/login", payload) data = json.loads(data) if data["code"] == 0: Log.info("账号登陆成功") else: Log.error("账号登陆失败" + "-" + data["message"]) config["Token"]["ACCESS_TOKEN"] = data["data"]["token_info"][ "access_token"] config["Token"]["REFRESH_TOKEN"] = data["data"]["token_info"][ "refresh_token"] csrf, uid, cookie = arrange_cookie(data) config["Token"]["CSRF"] = csrf config["Token"]["UID"] = uid set_cookie(cookie) config.write()
def sign_info(self, value): if len(value["data"]["sign_info"]) == 0: return if "sign_info" in self.done: return Log.info("检查任务「每日签到」") info = value["data"]["sign_info"] if info["status"] == 1: Log.info("「每日签到」奖励已经领取") self.done.append("sign_info") return payload = {} data = Curl().post("https://api.live.bilibili.com/appUser/getSignInfo", payload) data = json.loads(data) if data["code"] != 0: Log.error("「每日签到」失败") else: Log.info("「每日签到」成功") self.done.append("sign_info")
def double_watch_info(self,value): if len(value["data"]["double_watch_info"]) == 0: return if "double_watch_info" in self.done: return Log.info("检查任务「双端观看直播」") info = value["data"]["double_watch_info"] if info["status"] == 2: Log.info("「双端观看直播」奖励已经领取") self.done.append("double_watch_info") return if info["mobile_watch"] != 1 or info["web_watch"] != 1: Log.warning("「双端观看直播」未完成,请等待") return url = "https://api.live.bilibili.com/activity/v1/task/receive_award" payload = { "task_id":"double_watch_task", "csrf_token":config["Token"]["CSRF"], "csrf":config["Token"]["CSRF"] } data = Curl().request_json("POST",url,headers=config["pcheaders"],data=payload) if data["code"] != 0: Log.error("「双端观看直播」奖励领取失败") else: Log.info("「双端观看直播」奖励领取成功") self.done.append("double_watch_info")
def double_watch_info(self, value): if len(value["data"]["double_watch_info"]) == 0: return if "double_watch_info" in self.done: return Log.info("检查任务「双端观看直播」") info = value["data"]["double_watch_info"] if info["status"] == 2: Log.info("「双端观看直播」奖励已经领取") self.done.append("double_watch_info") return if info["mobile_watch"] != 1 or info["web_watch"] != 1: Log.warning("「双端观看直播」未完成,请等待") return payload = {"task_id": "double_watch_task"} data = Curl().post( "https://api.live.bilibili.com/activity/v1/task/receive_award", payload) data = json.loads(data) if data["code"] != 0: Log.error("「双端观看直播」奖励领取失败") else: Log.info("「双端观看直播」奖励领取成功") self.done.append("double_watch_info")
def submitJobs(jobs,verbose=False): # set hostname hostname = commands.getoutput('hostname') for job in jobs: job.creationHost = hostname # serialize strJobs = pickle.dumps(jobs) # instantiate curl curl = Curl() curl.sslCert = _x509() curl.sslKey = _x509() curl.verbose = verbose # execute url = baseURLSSL + '/submitJobs' data = {'jobs':strJobs} curl.verifyHost = False status,output = curl.post(url,data) if status!=0: print(output) return status,None try: return status,pickle.loads(output) except Exception as e: logging.error(traceback.format_exc()) return 1,[]
class Download: # 初始化 def __init__(self): self.url = '' self.path = '' self.filename = '' self.source = '' self.data = '' self.override = '' self.header = '' def get(self, url="127.0.0.1", path="./download", override=False, header=True): self.url = url self.path = path self.override = override self.filename = url.split("/")[-1] self.source = Curl(url=self.url) self.data = self.source.get() self.header = header return self def as_file(self): try: if not os.path.exists(self.path): os.makedirs(self.path) except IOError as e: print(e) files = os.listdir(self.path) if (self.filename in files) and (self.override == False): file__name = self.filename.split(".") filename = file__name[0] + "-" + str(random.randint( 100000, 999999)) + "." + file__name[-1] else: filename = self.filename with open(self.path + "/" + filename, "wb") as f: f.write(self.data) f.close() return self.path + "/" + filename def as_base64(self): ext_name = self.filename.split(".")[-1] header = { "gif": "data: image/gif;base64,", "png": "data:image/png;base64,", "jpg": "data:image/jpeg;base64,", "ico": "data:image/x-icon;base64," } base64_str = base64.b64encode(self.data).decode() if (self.header == True): base64_str = header[ext_name] + base64_str return base64_str
def check(self): url = "https://api.live.bilibili.com/i/api/taskInfo" payload = {} data = Curl().request_json("GET",url,headers=config["pcheaders"],params=payload) if data["code"] != 0: Log.error("每日任务检查失败") return data
def check(self): payload = {} data = Curl().get("https://api.live.bilibili.com/i/api/taskInfo", payload) data = json.loads(data) if data["code"] != 0: Log.error("每日任务检查失败") return data
def app_get_info_by_room(roomid=164725): url = "http://api.live.bilibili.com/xlive/app-room/v1/index/getInfoByUser" params = { "room_id": roomid, } headers = { "User-Agent": "Mozilla/5.0 BiliDroid/5.51.1 ([email protected])" } response = Curl().request_json("GET", url, headers=headers, params=params) return response
def getPublicKey(self): url = "https://passport.bilibili.com/api/oauth2/getKey" payload = {} data = Curl().request_json("POST",url,headers=config["pcheaders"],data=payload) if data["code"] == 0: Log.info("公钥获取成功") else: Log.error("公钥获取失败"+"-"+data["message"]) return data
def mobile(self, roomId): payload = {"room_id": roomId} data = Curl().post( "https://api.live.bilibili.com/mobile/userOnlineHeart", payload) data = json.loads(data) if data["code"] != 0: Log.warning("直播间 %s 心跳异常 (APP)" % roomId) else: Log.info("向直播间 %s 发送心跳包 (APP)" % roomId)
def checkCookie(self): payload = {"ts": int(time.time())} data = Curl().get("https://api.live.bilibili.com/User/getUserInfo", payload) data = json.loads(data) if data["code"] != "REPONSE_OK": Log.error("检测到 Cookie 过期") Log.info("正在重新登陆") self.loginPassword()
def getPublicKey(self): payload = {} data = Curl().post("https://passport.bilibili.com/api/oauth2/getKey", payload) data = json.loads(data) if data["code"] == 0: Log.info("公钥获取成功") else: Log.error("公钥获取失败" + "-" + data["message"]) return data
def checkCookie(self): url = "https://api.live.bilibili.com/User/getUserInfo" payload ={ "ts":int(time.time()) } data = Curl().request_json("GET",url,headers=config["pcheaders"],params=payload) if data["code"] != "REPONSE_OK": Log.error("检测到 Cookie 过期") Log.info("正在重新登陆") self.loginPassword()
def info(self): url = "https://api.live.bilibili.com/xlive/web-ucenter/v1/capsule/get_detail" payload = {} data = Curl().request_json("GET",url,headers=config["pcheaders"],params=payload) if data["code"] != 0: Log.warning("扭蛋币余额查询异常") return 0 Log.info("当前还有 %s 枚扭蛋币"%data["data"]["normal"]["coin"]) return data["data"]["normal"]["coin"]
def openTask(self): payload = {} data = Curl().get("https://api.live.bilibili.com/mobile/freeSilverAward",payload) data = json.loads(data) if data["code"] != 0: Log.warning("开启宝箱失败") self.lock = int(time.time()) + random.randint(60,120) return Log.info("开始宝箱成功,获得 %s 个银瓜子,当前有 %s 个银瓜子"%(data["data"]["awardSilver"],int(data["data"]["silver"]))) self.task = 0 self.lock = int(time.time()) + random.randint(5,20)
def exchange(self, num): payload = {"num": num, "csrf_token": config["Token"]["CSRF"]} data = Curl().nspost( "https://api.live.bilibili.com/pay/v1/Exchange/coin2silver", payload) data = json.loads(data) if data["code"] != 0: Log.warning(data["message"]) return Log.info(data["message"] + ", %s 枚硬币兑换了 %s 个银瓜子" % (num, data["data"]["silver"]))
def getList(self): url = "https://api.vc.bilibili.com/link_group/v1/member/my_groups" payload = {} data = Curl().request_json("GET",url,headers=config["pcheaders"],params=payload) if data["code"] != 0: Log.warning("查询应援团名单异常") return [] if len(data["data"]["list"]) == 0: Log.info("没有需要签到的应援团") return [] return data["data"]["list"]
def getList(self): payload = {} data = Curl().get("https://api.vc.bilibili.com/link_group/v1/member/my_groups",payload) data = json.loads(data) if data["code"] != 0: Log.warning("查询应援团名单异常") return [] if len(data["data"]["list"]) == 0: Log.info("没有需要签到的应援团") return [] return data["data"]["list"]
async def mobile(self, roomId): url = "https://api.live.bilibili.com/heartbeat/v1/OnLine/mobileOnline" payload = { "room_id": self.roomId, } data = Curl().request_json("POST", url, headers=config["pcheaders"], data=payload) if data["code"] != 0: Log.warning("直播间 %s 心跳异常 (APP)" % roomId) else: Log.info("向直播间 %s 发送心跳包 (APP)" % roomId)
def checkToken(self): url = "https://passport.bilibili.com/api/v2/oauth2/info" payload = { "access_token":config["Token"]["ACCESS_TOKEN"] } data = Curl().request_json("GET",url,headers=config["pcheaders"],params=payload) if data["code"] == 0: Log.info("令牌验证成功,有效期:"+time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(data["ts"]+data["data"]["expires_in"]))) else: Log.error("令牌验证失败") return False return data["data"]["expires_in"] > 14400