Biblibili視頻投稿接口分析并以Python實現(xiàn)自動投稿功能
B站視頻發(fā)布接口分析
項目地址:https://gitee.com/nbody1996/bilibili_video_uploader
視頻地址:https://www.bilibili.com/video/BV1qt4y1v76u/
獲取登錄Cookies請求要帶著登錄成功后關(guān)鍵Cookies,才能被B站后臺認為是已登錄的狀態(tài)。
研究發(fā)現(xiàn),以下兩個是必要的:
SESSDATA(session會話cookies, 相當于登錄憑證) bili_jct(防CSRF攻擊)這兩個都能在瀏覽器開發(fā)者工具(F12)中查看到,比如在谷歌瀏覽器中:
然后將這兩個值復(fù)制下來,在接下來的請求中cookies帶上這兩個值即可保持登錄狀態(tài)
解決方案:
可用requests.Session.cookies = requests.utils.cookiejar_from_dict設(shè)置Cookies,將在以后請求會話中保持 可用requests.Session.headers = {’User-Agent’:’???’}設(shè)置UA,將在以后請求會話中保持preupload預(yù)上傳請求方法: GET
請求接口: https://member.bilibili.com/preupload
請求體:
響應(yīng)體:
請求體解決方案:
name參數(shù)可由os.path.basename或pathlib.Path.name屬性獲得 size參數(shù)可由os.path.getsize或pathlib.Path.stat().st_size獲得step1 準備上傳視頻請求方法: POST
請求接口: https://upos-sz-upcdnbda2.bilivideo.com/[upos_uri]
替換上面[upos_uri]為preupload預(yù)上傳接口響應(yīng)體中upos_uri的upos://的后面部份,比如https://upos-sz-upcdnbda2.bilivideo.com/ugcboss/m201010a23h35mci3cejzh2xe4a6gwq1.mp4
請求頭:
請求體:
響應(yīng)體:
重難點
請求方法: PUT
請求接口: 同step1接口
請求頭: 同step1接口
請求體(分兩個部份):
請求體解決方案:
params參數(shù)通過requests.put的params參數(shù)傳遞,payload通過requests.put的data參數(shù)傳遞
chunks總批次根據(jù)preupload響應(yīng)體中chunk_size參數(shù)計算得出,通過math.ceil(filesize/chunk_size)向上取整。得到chunks后,在循環(huán)中改變partNumber、chunk兩者 內(nèi)置函數(shù)open獲得視頻文件IO流。read(size=chunk_size)方法獲得指定大小的視頻字節(jié),并通過內(nèi)置函數(shù)len獲得當前批次字節(jié)數(shù)size參數(shù)。tell方法獲取當前字節(jié)位置,對應(yīng)start與end參數(shù) 在循環(huán)中改變partNumber、chunk、chunks、size、start和end參數(shù) 將read讀出的字節(jié)通過requests.put的data參數(shù)傳遞過去step3 通知上傳完畢請求方法: POST
請求接口: 同step1接口
請求頭: 同step1接口
請求體(分兩個部份):
PS: 上圖沒有用框框住的參數(shù),都是固定寫死
請求體解決方案:
json形式的請求體可以用requests.post的json參數(shù)傳遞
輪詢獲取視頻封面請求方法: GET
請求接口: https://member.bilibili.com/x/web/archive/recovers?fns=[bfilename]
注意把[bfilename]替換成在B站的視頻文件名
響應(yīng)體:
解決方案: 因為要等待B站后端處理好封面圖片,所以這一步需要隔一段時間就訪問一下該接口,直到響應(yīng)體的data字段不是空列表時結(jié)束輪詢
選擇推薦分區(qū)
請求方法: GET
請求接口: https://member.bilibili.com/x/web/archive/typeid
請求體:
PS:
groupid不清楚干嘛用的, 目前遇到可以固定是0或1 vfea不清楚干嘛用的, 空字符串即可響應(yīng)體:
選擇推薦標簽
請求方法: GET
請求接口: https://member.bilibili.com/x/web/archive/typeid
請求體:
響應(yīng)體:
PS: 可以用列表推導(dǎo)式將標簽字符串存于列表中,再用字符串join方法用英文逗號拼接
預(yù)發(fā)布
請求方法: GET
請求接口: https://member.bilibili.com/x/geetest/pre/add
PS: 沒啥好講的, 直接get這個鏈接,它的響應(yīng)體也沒什么有用的東西
發(fā)布視頻
經(jīng)過前面的'過五關(guān)斬六將',終于到了最后一步了
請求方法: POST
請求接口: https://member.bilibili.com/x/vu/web/add?csrf=[bili_jct]
注意替換鏈接中csrf參數(shù)為bili_jct(一開始需要的兩個Cookies的中其一)
請求體(JSON):
自制類型的視頻請求體與上圖有些許差別:
因為source是只針對于轉(zhuǎn)載類型視頻的,所以自制類型視頻不需要攜帶該參數(shù) 新增interactive參數(shù),取值0或1,貌似是跟允許觀眾投稿字幕有關(guān) 新增no_reprint參數(shù),取值0或1,貌似是跟自制聲明有關(guān) 最重要的是聲明版權(quán),改變copyright為1即可完整代碼
Talk is cheap, Show me the code
戳它: https://gitee.com/nbodyfun/bilibili_video_uploader/raw/master/bilibili_up.py
到此這篇關(guān)于Biblibili視頻投稿接口分析并以Python實現(xiàn)自動投稿功能的文章就介紹到這了,更多相關(guān)Python實現(xiàn)自動投稿內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. CSS3實例分享之多重背景的實現(xiàn)(Multiple backgrounds)2. 低版本IE正常運行HTML5+CSS3網(wǎng)站的3種解決方案3. CSS Hack大全-教你如何區(qū)分出IE6-IE10、FireFox、Chrome、Opera4. HTML DOM setInterval和clearInterval方法案例詳解5. 使用css實現(xiàn)全兼容tooltip提示框6. css代碼優(yōu)化的12個技巧7. 詳解瀏覽器的緩存機制8. 告別AJAX實現(xiàn)無刷新提交表單9. HTML <!DOCTYPE> 標簽10. css進階學(xué)習(xí) 選擇符
