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中if __name__ == "__main__"详细解释
Oct 21 Python
以Flask为例讲解Python的框架的使用方法
Apr 29 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
详解python 拆包可迭代数据如tuple, list
Dec 29 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
django orm 通过related_name反向查询的方法
Dec 15 Python
python如何保证输入键入数字的方法
Aug 23 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
详解python如何引用包package
Jun 07 Python
Python eval函数原理及用法解析
Nov 14 Python
Python中22个万用公式的小结
Jul 21 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 nl2br函数 将换行字符转成 <br>
2009/08/21 PHP
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
Jquery多选框互相内容交换的实例代码
2013/07/04 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
python机器学习实战之树回归详解
2017/12/20 Python
python打包成so文件过程解析
2019/09/28 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
django实现日志按日期分割
2020/05/21 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
护理专科毕业推荐信
2013/11/10 职场文书
大学生村官个人总结
2015/02/15 职场文书
雷锋的故事观后感
2015/06/10 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
Anaconda配置各版本Pytorch的实现
2021/08/07 Python
关于python中模块和重载的问题
2021/11/02 Python