Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能
B站視頻發(fā)布接口分析
項(xiàng)目地址:https://gitee.com/nbody1996/bilibili_video_uploader
視頻地址:https://www.bilibili.com/video/BV1qt4y1v76u/
獲取登錄Cookies
請(qǐng)求要帶著登錄成功后關(guān)鍵Cookies,才能被B站后臺(tái)認(rèn)為是已登錄的狀態(tài)。
研究發(fā)現(xiàn),以下兩個(gè)是必要的:
- SESSDATA(session會(huì)話cookies, 相當(dāng)于登錄憑證)
- bili_jct(防CSRF攻擊)
這兩個(gè)都能在瀏覽器開發(fā)者工具(F12)中查看到,比如在谷歌瀏覽器中:
然后將這兩個(gè)值復(fù)制下來,在接下來的請(qǐng)求中cookies帶上這兩個(gè)值即可保持登錄狀態(tài)
解決方案:
- 可用
requests.Session.cookies = requests.utils.cookiejar_from_dict
設(shè)置Cookies,將在以后請(qǐng)求會(huì)話中保持 - 可用
requests.Session.headers = {'User-Agent':'???'}
設(shè)置UA,將在以后請(qǐng)求會(huì)話中保持
preupload預(yù)上傳
請(qǐng)求方法: GET
請(qǐng)求接口: https://member.bilibili.com/preupload
請(qǐng)求體:
響應(yīng)體:
請(qǐng)求體解決方案:
- name參數(shù)可由
os.path.basename
或pathlib.Path.name屬性
獲得 - size參數(shù)可由
os.path.getsize
或pathlib.Path.stat().st_size
獲得
step1 準(zhǔn)備上傳視頻
請(qǐng)求方法: POST
請(qǐng)求接口: 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
請(qǐng)求頭:
請(qǐng)求體:
響應(yīng)體:
step2 分批上傳視頻
重難點(diǎn)
請(qǐng)求方法: PUT
請(qǐng)求接口: 同step1接口
請(qǐng)求頭: 同step1接口
請(qǐng)求體(分兩個(gè)部份):
請(qǐng)求體解決方案:
params參數(shù)通過requests.put的params
參數(shù)傳遞,payload
通過requests.put的data
參數(shù)傳遞
chunks
總批次根據(jù)preupload響應(yīng)體中chunk_size
參數(shù)計(jì)算得出,通過math.ceil(filesize/chunk_size)
向上取整。得到chunks
后,在循環(huán)中改變partNumber
、chunk
兩者- 內(nèi)置函數(shù)
open
獲得視頻文件IO流。read(size=chunk_size)
方法獲得指定大小的視頻字節(jié),并通過內(nèi)置函數(shù)len
獲得當(dāng)前批次字節(jié)數(shù)size
參數(shù)。tell
方法獲取當(dāng)前字節(jié)位置,對(duì)應(yīng)start
與end
參數(shù) - 在循環(huán)中改變
partNumber
、chunk
、chunks
、size
、start
和end
參數(shù) - 將
read
讀出的字節(jié)通過requests.put的data
參數(shù)傳遞過去
step3 通知上傳完畢
請(qǐng)求方法: POST
請(qǐng)求接口: 同step1接口
請(qǐng)求頭: 同step1接口
請(qǐng)求體(分兩個(gè)部份):
PS: 上圖沒有用框框住的參數(shù),都是固定寫死
請(qǐng)求體解決方案:
json形式的請(qǐng)求體可以用requests.post的json
參數(shù)傳遞
輪詢獲取視頻封面
請(qǐng)求方法: GET
請(qǐng)求接口: https://member.bilibili.com/x/web/archive/recovers?fns=[bfilename]
注意把[bfilename]
替換成在B站的視頻文件名
響應(yīng)體:
解決方案: 因?yàn)橐却鼴站后端處理好封面圖片,所以這一步需要隔一段時(shí)間就訪問一下該接口,直到響應(yīng)體的data
字段不是空列表時(shí)結(jié)束輪詢
選擇推薦分區(qū)
請(qǐng)求方法: GET
請(qǐng)求接口: https://member.bilibili.com/x/web/archive/typeid
請(qǐng)求體:
PS:
groupid
不清楚干嘛用的, 目前遇到可以固定是0或1vfea
不清楚干嘛用的, 空字符串即可
響應(yīng)體:
選擇推薦標(biāo)簽
請(qǐng)求方法: GET
請(qǐng)求接口: https://member.bilibili.com/x/web/archive/typeid
請(qǐng)求體:
響應(yīng)體:
PS: 可以用列表推導(dǎo)式將標(biāo)簽字符串存于列表中,再用字符串join
方法用英文逗號(hào)
拼接
預(yù)發(fā)布
請(qǐng)求方法: GET
請(qǐng)求接口: https://member.bilibili.com/x/geetest/pre/add
PS: 沒啥好講的, 直接get
這個(gè)鏈接,它的響應(yīng)體也沒什么有用的東西
發(fā)布視頻
經(jīng)過前面的"過五關(guān)斬六將",終于到了最后一步了
請(qǐng)求方法: POST
請(qǐng)求接口: https://member.bilibili.com/x/vu/web/add?csrf=[bili_jct]
注意替換鏈接中csrf
參數(shù)為bili_jct
(一開始需要的兩個(gè)Cookies的中其一)
請(qǐng)求體(JSON):
自制類型的視頻請(qǐng)求體與上圖有些許差別:
- 因?yàn)閟ource是只針對(duì)于轉(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實(shí)現(xiàn)自動(dòng)投稿功能的文章就介紹到這了,更多相關(guān)Python實(shí)現(xiàn)自動(dòng)投稿內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python使用dabl幾行代碼實(shí)現(xiàn)數(shù)據(jù)處理分析及ML自動(dòng)化
- Python利用Charles 實(shí)現(xiàn)全部自動(dòng)答題思路流程分析
- Python實(shí)現(xiàn)自動(dòng)裝機(jī)功能案例分析
- Python + Requests + Unittest接口自動(dòng)化測(cè)試實(shí)例分析
- python自動(dòng)化測(cè)試之異常及日志操作實(shí)例分析
- Python自動(dòng)化運(yùn)維_文件內(nèi)容差異對(duì)比分析
- python自動(dòng)化工具日志查詢分析腳本代碼實(shí)現(xiàn)
- ?分享4款Python 自動(dòng)數(shù)據(jù)分析神器
相關(guān)文章
Python利用物理引擎Pymunk編寫一個(gè)解壓小游戲
這篇文章主要為大家詳細(xì)介紹了Python如何利用物理引擎Pymunk編寫一個(gè)解壓小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2023-01-01Python MongoDB 插入數(shù)據(jù)時(shí)已存在則不執(zhí)行,不存在則插入的解決方法
這篇文章主要介紹了Python MongoDB 插入數(shù)據(jù)時(shí)已存在則不執(zhí)行,不存在則插入的解決方法,結(jié)合實(shí)例形式分析了Python基于日志判斷數(shù)據(jù)是否已經(jīng)插入的相關(guān)操作技巧,需要的朋友可以參考下2019-09-09echarts折線圖的每個(gè)折點(diǎn)都顯示數(shù)值的實(shí)現(xiàn)方式
這篇文章主要介紹了echarts折線圖的每個(gè)折點(diǎn)都顯示數(shù)值的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10Python實(shí)現(xiàn)創(chuàng)建快速剪映草稿軌道自動(dòng)生成視頻
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)創(chuàng)建快速剪映草稿軌道并自動(dòng)生成視頻,文中的示例代碼講解詳細(xì),需要的可以參考一下2023-08-08如何利用AJAX獲取Django后端數(shù)據(jù)詳解
ajax一個(gè)前后臺(tái)配合的技術(shù),它可以讓javascript發(fā)送http請(qǐng)求,與后臺(tái)通信,獲取數(shù)據(jù)和信息。下面這篇文章主要介紹了如何利用AJAX獲取Django后端數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2021-06-06Python OpenCV實(shí)現(xiàn)圖片上輸出中文
這篇文章主要為大家詳細(xì)介紹了Python OpenCV實(shí)現(xiàn)圖片上輸出中文,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01