def edit(self, avid=None, bvid=None, parts=None, insert_index=None, copyright=None, title=None, tid=None, tag=None, desc=None, source=None, cover=None, no_reprint=None, open_elec=None, max_retry: int = 5, thread_pool_workers: int = 1): if not avid and not bvid: print("please provide avid or bvid") return None, None if not avid: avid = cipher.bv2av(bvid) if not isinstance(parts, list): parts = [parts] if type(avid) is str: avid = int(avid) core.edit_videos(self.access_token, self.sid, self.mid, avid, bvid, parts, insert_index, copyright, title, tid, tag, desc, source, cover, no_reprint, open_elec, max_retry, thread_pool_workers)
def edit_videos(access_token, sid, mid, avid=None, bvid=None, parts=None, insert_index=None, copyright=None, title=None, tid=None, tag=None, desc=None, source=None, cover=None, no_reprint=None, open_elec=None, max_retry: int = 5, thread_pool_workers: int = 1): """ insert videos into existed post. Args: access_token: oauth2 access token. sid: session id. mid: member id. avid: av number, bvid: bv string, parts: VideoPart list. insert_index: new video index. copyright: 原创/转载. title: 投稿标题. tid: 分区id. tag: 标签. desc: 投稿简介. source: 转载地址. cover: cover url. no_reprint: 可否转载. open_elec: 充电. max_retry: max retry time for each chunk. thread_pool_workers: max upload threads. Returns: (aid, bvid) aid: av号 bvid: bv号 """ if not avid and not bvid: print("please provide avid or bvid") return None, None if not avid: avid = cipher.bv2av(bvid) if not isinstance(parts, list): parts = [parts] if type(avid) is str: avid = int(avid) post_video_data = get_post_data(access_token, sid, avid) status = True with ThreadPoolExecutor(max_workers=thread_pool_workers) as tpe: t_list = [] for video_part in parts: print("upload {} added in pool".format(video_part.title)) t_obj = tpe.submit(upload_video_part, access_token, sid, mid, video_part, max_retry) t_obj.video_part = video_part t_list.append(t_obj) for t_obj in as_completed(t_list): status = status and t_obj.result() print("video part {} finished, status: {}".format( t_obj.video_part.title, t_obj.result())) if not status: print("upload failed") return None, None headers = { 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'User-Agent': '', } submit_data = { 'aid': avid, 'build': 1054, 'copyright': post_video_data["archive"]["copyright"], 'cover': post_video_data["archive"]["cover"], 'desc': post_video_data["archive"]["desc"], 'no_reprint': post_video_data["archive"]["no_reprint"], 'open_elec': post_video_data["archive_elec"]["state"], # open_elec not tested 'source': post_video_data["archive"]["source"], 'tag': post_video_data["archive"]["tag"], 'tid': post_video_data["archive"]["tid"], 'title': post_video_data["archive"]["title"], 'videos': post_video_data["videos"] } # edit archive data if copyright: submit_data["copyright"] = copyright if title: submit_data["title"] = title if tid: submit_data["tid"] = tid if tag: submit_data["tag"] = tag if desc: submit_data["desc"] = desc if source: submit_data["source"] = source if cover: submit_data["cover"] = cover if no_reprint: submit_data["no_reprint"] = no_reprint if open_elec: submit_data["open_elec"] = open_elec if type(insert_index) is int: for i, video_part in enumerate(parts): submit_data['videos'].insert( insert_index + i, { "desc": video_part.desc, "filename": video_part.server_file_name, "title": video_part.title }) elif insert_index is None: for video_part in parts: submit_data['videos'].append({ "desc": video_part.desc, "filename": video_part.server_file_name, "title": video_part.title }) else: print("wrong insert index") return None, None params = { 'access_key': access_token, } params['sign'] = cipher.sign_dict(params, APPSECRET) r = requests.post( url="http://member.bilibili.com/x/vu/client/edit", params=params, headers=headers, verify=False, cookies={'sid': sid}, json=submit_data, ) print("edit submit") print(r.status_code) print(r.content.decode()) data = r.json()["data"] return data["aid"], data["bvid"]