Biblibili视频投稿接口分析并以Python实现自动投稿功能


Posted in Python onFebruary 05, 2021

B站视频发布接口分析

项目地址:https://gitee.com/nbody1996/bilibili_video_uploader

视频地址:https://www.bilibili.com/video/BV1qt4y1v76u/

获取登录Cookies

请求要带着登录成功后关键Cookies,才能被B站后台认为是已登录的状态。

研究发现,以下两个是必要的:

  1. SESSDATA(session会话cookies, 相当于登录凭证)
  2. bili_jct(防CSRF攻击)

这两个都能在浏览器开发者工具(F12)中查看到,比如在谷歌浏览器中:

Biblibili视频投稿接口分析并以Python实现自动投稿功能

然后将这两个值复制下来,在接下来的请求中cookies带上这两个值即可保持登录状态

解决方案:

  1. 可用requests.Session.cookies = requests.utils.cookiejar_from_dict设置Cookies,将在以后请求会话中保持
  2. 可用requests.Session.headers = {'User-Agent':'???'}设置UA,将在以后请求会话中保持

preupload预上传

请求方法GET

请求接口https://member.bilibili.com/preupload

请求体:

Biblibili视频投稿接口分析并以Python实现自动投稿功能

响应体:

Biblibili视频投稿接口分析并以Python实现自动投稿功能

请求体解决方案:

  1. name参数可由os.path.basenamepathlib.Path.name属性获得
  2. size参数可由os.path.getsizepathlib.Path.stat().st_size获得

step1 准备上传视频

请求方法POST

请求接口https://upos-sz-upcdnbda2.bilivideo.com/[upos_uri]

替换上面[upos_uri]preupload预上传接口响应体中upos_uriupos://的后面部份,比如https://upos-sz-upcdnbda2.bilivideo.com/ugcboss/m201010a23h35mci3cejzh2xe4a6gwq1.mp4

请求头:

Biblibili视频投稿接口分析并以Python实现自动投稿功能

请求体:

Biblibili视频投稿接口分析并以Python实现自动投稿功能

响应体:

Biblibili视频投稿接口分析并以Python实现自动投稿功能

step2 分批上传视频

重难点

请求方法PUT

请求接口同step1接口

请求头同step1接口

请求体(分两个部份):

Biblibili视频投稿接口分析并以Python实现自动投稿功能

Biblibili视频投稿接口分析并以Python实现自动投稿功能

请求体解决方案:

params参数通过requests.put的params参数传递,payload通过requests.put的data参数传递

  • chunks总批次根据preupload响应体中chunk_size参数计算得出,通过math.ceil(filesize/chunk_size)向上取整。得到chunks后,在循环中改变partNumberchunk两者
  • 内置函数open获得视频文件IO流。read(size=chunk_size)方法获得指定大小的视频字节,并通过内置函数len获得当前批次字节数size参数。tell方法获取当前字节位置,对应startend参数
  • 在循环中改变partNumberchunkchunkssizestartend参数
  • read读出的字节通过requests.put的data参数传递过去

step3 通知上传完毕

请求方法POST

请求接口同step1接口

请求头同step1接口

请求体(分两个部份):

Biblibili视频投稿接口分析并以Python实现自动投稿功能

PS: 上图没有用框框住的参数,都是固定写死

Biblibili视频投稿接口分析并以Python实现自动投稿功能

请求体解决方案:

json形式的请求体可以用requests.post的json参数传递

轮询获取视频封面

请求方法GET

请求接口https://member.bilibili.com/x/web/archive/recovers?fns=[bfilename]

注意把[bfilename]替换成在B站的视频文件名

响应体:

Biblibili视频投稿接口分析并以Python实现自动投稿功能

解决方案: 因为要等待B站后端处理好封面图片,所以这一步需要隔一段时间就访问一下该接口,直到响应体的data字段不是空列表时结束轮询

选择推荐分区

请求方法GET

请求接口https://member.bilibili.com/x/web/archive/typeid

请求体:

Biblibili视频投稿接口分析并以Python实现自动投稿功能

PS:

  • groupid不清楚干嘛用的, 目前遇到可以固定是0或1
  • vfea不清楚干嘛用的, 空字符串即可

响应体:

Biblibili视频投稿接口分析并以Python实现自动投稿功能

选择推荐标签

请求方法GET

请求接口https://member.bilibili.com/x/web/archive/typeid

请求体:

Biblibili视频投稿接口分析并以Python实现自动投稿功能

响应体:

Biblibili视频投稿接口分析并以Python实现自动投稿功能

PS: 可以用列表推导式将标签字符串存于列表中,再用字符串join方法用英文逗号拼接

预发布

请求方法GET

请求接口https://member.bilibili.com/x/geetest/pre/add

PS: 没啥好讲的, 直接get这个链接,它的响应体也没什么有用的东西

发布视频

经过前面的"过五关斩六将",终于到了最后一步了

请求方法POST

请求接口https://member.bilibili.com/x/vu/web/add?csrf=[bili_jct]

注意替换链接中csrf参数为bili_jct(一开始需要的两个Cookies的中其一)

请求体(JSON):

Biblibili视频投稿接口分析并以Python实现自动投稿功能

自制类型的视频请求体与上图有些许差别:

  • 因为source是只针对于转载类型视频的,所以自制类型视频不需要携带该参数
  • 新增interactive参数,取值0或1,貌似是跟允许观众投稿字幕有关
  • 新增no_reprint参数,取值0或1,貌似是跟自制声明有关
  • 最重要的是声明版权,改变copyright为1即可

完整代码

Talk is cheap, Show me the code

Biblibili视频投稿接口分析并以Python实现自动投稿功能

戳它: https://gitee.com/nbodyfun/bilibili_video_uploader/raw/master/bilibili_up.py

到此这篇关于Biblibili视频投稿接口分析并以Python实现自动投稿功能的文章就介绍到这了,更多相关Python实现自动投稿内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python清理子进程机制剖析
Nov 23 Python
python 制作自定义包并安装到系统目录的方法
Oct 27 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
基于python-opencv3的图像显示和保存操作
Jun 27 Python
用Cython加速Python到“起飞”(推荐)
Aug 01 Python
Python 写入训练日志文件并控制台输出解析
Aug 13 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
Apr 16 Python
Python生成器generator原理及用法解析
Jul 20 Python
python小技巧——将变量保存在本地及读取
Nov 13 Python
python热力图实现简单方法
Jan 29 Python
Pycharm 跳转回之前所在页面的操作
Feb 05 #Python
python自动化办公操作PPT的实现
Feb 05 #Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 #Python
浅谈盘点5种基于Python生成的个性化语音方法
Feb 05 #Python
Python环境搭建过程从安装到Hello World
Feb 05 #Python
Python使用pyenv实现多环境管理
Feb 05 #Python
python中的unittest框架实例详解
Feb 05 #Python
You might like
一步一步学习PHP(3) php 函数
2010/02/15 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
php生成excel文件的简单方法
2014/02/08 PHP
浅析php-fpm静态和动态执行方式的比较
2016/11/09 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
JQuery autocomplete 使用手册
2010/04/01 Javascript
jquery 页面全选框实践代码
2010/04/02 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
2017/09/02 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
2014五年级班主任工作总结
2014/12/05 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
python库sklearn常用操作
2021/08/23 Python
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
字节飞书面试promise.all实现示例
2022/06/16 Javascript
Vue Element plus使用方法梳理
2022/12/24 Vue.js