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 相关文章推荐
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
利用Python绘制数据的瀑布图的教程
Apr 07 Python
在Python中使用第三方模块的教程
Apr 27 Python
简单解决Python文件中文编码问题
Nov 22 Python
Python3使用Matplotlib 绘制精美的数学函数图形
Apr 11 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
python之pymysql模块简单应用示例代码
Dec 16 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
python3爬虫中异步协程的用法
Jul 10 Python
python中用ctypes模拟点击的实例讲解
Nov 26 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 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 之 没有mysql支持时的替代方案
2006/10/09 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
php上传图片类及用法示例
2016/05/11 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
2017/10/23 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
python实现简单爬虫功能的示例
2016/10/24 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
高中运动会广播稿
2014/01/21 职场文书
聚美优品广告词改编
2014/03/14 职场文书
小学优秀教师材料
2014/12/15 职场文书
齐云山导游词
2015/02/06 职场文书
推普标语口号大全
2015/12/26 职场文书
小学思品教学反思
2016/02/20 职场文书
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
改造DE1103三步曲
2022/04/07 无线电