溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

發(fā)布時(shí)間:2021-02-19 10:13:57 來(lái)源:億速云 閱讀:250 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

B站視頻發(fā)布接口分析

獲取登錄Cookies

請(qǐng)求要帶著登錄成功后關(guān)鍵Cookies,才能被B站后臺(tái)認(rèn)為是已登錄的狀態(tài)。

研究發(fā)現(xiàn),以下兩個(gè)是必要的:

  1. SESSDATA(session會(huì)話cookies, 相當(dāng)于登錄憑證)

  2. bili_jct(防CSRF攻擊)

這兩個(gè)都能在瀏覽器開(kāi)發(fā)者工具(F12)中查看到,比如在谷歌瀏覽器中:

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

然后將這兩個(gè)值復(fù)制下來(lái),在接下來(lái)的請(qǐng)求中cookies帶上這兩個(gè)值即可保持登錄狀態(tài)

解決方案:

  1. 可用requests.Session.cookies = requests.utils.cookiejar_from_dict設(shè)置Cookies,將在以后請(qǐng)求會(huì)話中保持

  2. 可用requests.Session.headers = {'User-Agent':'???'}設(shè)置UA,將在以后請(qǐng)求會(huì)話中保持

preupload預(yù)上傳

請(qǐng)求方法GET

請(qǐng)求接口https://member.bilibili.com/preupload

請(qǐng)求體:

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

響應(yīng)體:

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

請(qǐng)求體解決方案:

  1. name參數(shù)可由os.path.basenamepathlib.Path.name屬性獲得

  2. size參數(shù)可由os.path.getsizepathlib.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_uriupos://的后面部份,比如https://upos-sz-upcdnbda2.bilivideo.com/ugcboss/m201010a23h45mci3cejzh3xe4a6gwq1.mp4

請(qǐng)求頭:

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

請(qǐng)求體:

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

響應(yīng)體:

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

step2 分批上傳視頻

重難點(diǎn)

請(qǐng)求方法PUT

請(qǐng)求接口同step1接口

請(qǐng)求頭同step1接口

請(qǐng)求體(分兩個(gè)部份):

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

請(qǐng)求體解決方案:

params參數(shù)通過(guò)requests.put的params參數(shù)傳遞,payload通過(guò)requests.put的data參數(shù)傳遞

  • chunks總批次根據(jù)preupload響應(yīng)體中chunk_size參數(shù)計(jì)算得出,通過(guò)math.ceil(filesize/chunk_size)向上取整。得到chunks后,在循環(huán)中改變partNumber、chunk兩者

  • 內(nèi)置函數(shù)open獲得視頻文件IO流。read(size=chunk_size)方法獲得指定大小的視頻字節(jié),并通過(guò)內(nèi)置函數(shù)len獲得當(dāng)前批次字節(jié)數(shù)size參數(shù)。tell方法獲取當(dāng)前字節(jié)位置,對(duì)應(yīng)startend參數(shù)

  • 在循環(huán)中改變partNumberchunk、chunks、size、startend參數(shù)

  • read讀出的字節(jié)通過(guò)requests.put的data參數(shù)傳遞過(guò)去

step3 通知上傳完畢

請(qǐng)求方法POST

請(qǐng)求接口同step1接口

請(qǐng)求頭同step1接口

請(qǐng)求體(分兩個(gè)部份):

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

PS: 上圖沒(méi)有用框框住的參數(shù),都是固定寫(xiě)死

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

請(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)體:

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

解決方案: 因?yàn)橐却鼴站后端處理好封面圖片,所以這一步需要隔一段時(shí)間就訪問(wèn)一下該接口,直到響應(yīng)體的data字段不是空列表時(shí)結(jié)束輪詢

選擇推薦分區(qū)

請(qǐng)求方法GET

請(qǐng)求接口https://member.bilibili.com/x/web/archive/typeid

請(qǐng)求體:

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

PS:

  • groupid不清楚干嘛用的, 目前遇到可以固定是0或1

  • vfea不清楚干嘛用的, 空字符串即可

響應(yīng)體:

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

選擇推薦標(biāo)簽

請(qǐng)求方法GET

請(qǐng)求接口https://member.bilibili.com/x/web/archive/typeid

請(qǐng)求體:

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

響應(yīng)體:

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dò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: 沒(méi)啥好講的, 直接get這個(gè)鏈接,它的響應(yīng)體也沒(méi)什么有用的東西

發(fā)布視頻

經(jīng)過(guò)前面的"過(guò)五關(guān)斬六將",終于到了最后一步了

請(qǐng)求方法POST

請(qǐng)求接口https://member.bilibili.com/x/vu/web/add?csrf=[bili_jct]

注意替換鏈接中csrf參數(shù)為bili_jct(一開(kāi)始需要的兩個(gè)Cookies的中其一)

請(qǐng)求體(JSON):

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

自制類型的視頻請(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

Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例

以上是“Biblibili視頻投稿接口分析并以Python實(shí)現(xiàn)自動(dòng)投稿功能的示例”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI