您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

西瓜视频解析原理及源码,获得视频源地址

时间:2021-08-11 10:09:26  来源:  作者:小靳哥聊程序

本文的视频解析,目的是根据用户在某平台对某一个视频的分享信息,(如一个视频链接),拿到该视频的源地址。不好的地方望多多提议,谢谢!

1、解析链接来源

西瓜视频解析的链接来源,可以来自今日头条App,也可以来自于西瓜视频网页或者西瓜视频App。

来源

举例

链接域名

X日头条App

https://m.toutiaoimg.com/a6773817552297525771/?app=news_article&is_hit_share_recommend=0

m.toutiaoimg.com

西瓜视频App

https://m.ixigua.com/group/6713036790858531331/?app=video_article×tamp=1577176945&utm_source=copy_link&utm_medium=Android&utm_campaign=client_share

m.ixigua.com

西瓜视频网页

https://www.ixigua.com/i6697675511759372808/

www.ixigua.com

当拿到一个待解析链接时,可以根据上面的表格明确链接的来源。但是,无论是哪个来源,他们均有一个共同参数,那就是西瓜视频的 itemId。同时,不同来源的链接均可以换算为西瓜视频网页链接。如下:

2、今日头条APP分享链接

https://m.toutiaoimg.com/a6773817552297525771/?app=news_article&is_hit_share_recommend=0

其中

itemId = '6773817552297525771'itemId = '6773817552297525771'

3、西瓜视频APP分享链接

https://m.ixigua.com/group/6713036790858531331/?app=video_article×tamp=1577176945&utm_source=copy_link&utm_medium=android&utm_campaign=client_share

其中

itemId = '6713036790858531331'

最终,可以将分享自不同平台的视频统一为一个西瓜视频网页链接,如下:

webUrl = 'https://www.ixigua.com/i' + itemId

4、解析接口及签名算法

接口地址:

GET http://i.snssdk.com/video/urls/v/1/toutiao/mp4/{vid}

接口参数列表

参数

举例

说明

vid

v02004020000bmg1iqcthbib5vi1gcjg

和itemId以一对应

r

100000000

100000000到999999999的随机数

nobase64

true

固定位true

s

3103163236

签名:随机数r与vid作为签名算法的输入

请求 Header 必要参数

参数

示例

说明

user-agent

Mozilla/5.0 (X11; linux x86_64) AppleWebKit/**********

无固定要求,一般使用PC端UA访问即可

cookie

xiguavideopcwebid=**********

真实cookie

签名算法(伪代码):

# 输入1:vid(视频vid)

# 输入2:r(随机数)

# 输出:请求签名s

def sign(vid, r):

parseUrl = "/video/urls/v/1/toutiao/mp4/" + vid + "?r=" + r

s = crc32(parseUrl )

return s

看明白了吗?签名算法已知,获取到视频vid并给一个随机数,就可以获得该次请求的签名了。西瓜视频的服务端根据请求参数和签名验证请求是否合法。

请求响应示例

{

"data": {

"status": 10,

"user_id": "toutiao",

"video_id": "v02004020000bmg1iqcthbib5vi1gcjg",

"validate": "",

"enable_ssl": true,

"poster_url": "http://sf1-ttcdn-tos.pstatp.com/obj/tos-cn-p-0000/1881ffd026234850ad4bf69aa5c38835",

"video_duration": 414.13,

"media_type": "video",

"auto_definition": "360p",

"video_list": {

"video_1": {

"definition": "480p",

"vtype": "mp4",

"vwidth": 854,

"vheight": 480,

"bitrate": 434409,

"size": 22487645,

"quality": "normal",

"codec_type": "h264",

"logo_type": "xigua_share",

"encrypt": false,

"file_hash": "bd5f78b91285cfe60b98b3be51c487f1",

"file_id": "9f09a116dce34966800788c09370edb7",

"main_url": "http://v3-default.ixigua.com/e104c4ca4fb27fa3040c317de43b1380/5e01eced/video/m/22063ff749ecede4ac9bd0b67442bce2b441163cbb4d00001cdf11df7004/?a=2012u0026br=848u0026bt=424u0026cr=0u0026cs=0u0026dr=0u0026ds=2u0026er=u0026l=201912241741190100140481451111CA14u0026lr=u0026qs=0u0026rc=amY0eWVld3Q0cDMzNTczM0ApZWg6PGY7Mzs5N2hnNGQzPGdnZGYyZmVgZmRfLS0tLS9zczRhLTAtNTQtMzYwYDMuNmM6Yw%3D%3D",

"backup_url_1": "http://v6-default.ixigua.com/39f7e9ff0fa218105b70d40a02a581ea/5e01eced/video/m/22063ff749ecede4ac9bd0b67442bce2b441163cbb4d00001cdf11df7004/",

"check_info": "",

"p2p_verify_url": "http://v3-default.ixigua.com/ee57deca950514556401a392c7d9e83c/5e01eced/video/m/220f0aa452d8a944c088ba8b41076b6d6f91163cd8fe00000cffbed16662/",

"user_video_proxy": 1,

"socket_buffer": 9774180,

"preload_size": 327680,

"preload_interval": 60,

"preload_min_step": 5,

"preload_max_step": 10,

"spade_a": ""

}

},

"dynamic_video": null

},

"message": "success",

"code": 0,

"total": 1

}

关键参数:

参数

说明

data.poster_url

封面

data.video_list.video_1.main_url

视频地址

5、视频vid获取

在第一小节,解析链接来源中提到,各个不同来源的链接都可以换算为西瓜视频网页的链接,也就意味着,我们可以直接将所有不同来源的链接同等对待。

所以,我们着手分析西瓜视频网页端的 vid 获取。如下图:

西瓜视频解析原理及源码,获得视频源地址

 

在网页源码中,我们发现,在一段js代码中,定义了vid的值。综上,请求接口所需参数均已备齐了。

6、源码

import requests

import json

import random

import zlib

 

def praseXigua(url):

pc_headers = {'user-agent': "Mozilla/****", 'cookie': 'xiguavideopcwebid=****'}

# 今日头条App分享来源处理

if "toutiaoimg.cn" in url:

itemId= url.split('/')[4]

url = 'https://www.ixigua.com/i' + itemId+ '/'

# 西瓜视频App分享来源处理

if "m.ixigua.com" in url:

itemId= url.split('/')[4]

url = 'https://www.ixigua.com/i' + itemId+ '/'

responsehtml = requests.get(url, headers=pc_headers, allow_redirects=True).content.decode('UTF-8')

# 获取vid

vid = responseHtml.split('"vid":"')[1].split('","')[0]

# 生成签名

parseUrl = "/video/urls/v/1/toutiao/mp4/" + vid + "?r=" + rand_num

crc_code = str(zlib.crc32(parseUrl.encode('utf8')))

# 请求接口

mResponse = requests.get("http://i.snssdk.com" + parseUrl + "&nobase64=true&s=" + crc_code, headers=pc_headers).content.decode('UTF-8')

mJson = json.loads(mResponse)

return mJson['data']['video_list']['video_1']['main_url']

总结:

综上,西瓜视频的解析分为3步

将不同来源链接转化为西瓜视频网页链接

模拟PC端请求该视频网页,获取视频vid

生成签名并发起请求,获得视频源地址



Tags:西瓜视频   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
本文的视频解析,目的是根据用户在某平台对某一个视频的分享信息,(如一个视频链接),拿到该视频的源地址。不好的地方望多多提议,谢谢!1、解析链接来源西瓜视频解析的链接来源,可以...【详细内容】
2021-08-11  Tags: 西瓜视频  点击:(184)  评论:(0)  加入收藏
6月17日,西瓜视频宣布全面支持HDR视频功能。用户可以直接用西瓜视频完成HDR视频的拍摄、编辑、预览、上传和观看。这是业界首个支持HDR编辑的视频平台。西瓜视频HDR视频上传...【详细内容】
2021-06-22  Tags: 西瓜视频  点击:(44)  评论:(0)  加入收藏
越来越多的普通人通过西瓜视频改变了生活,为普通人提供了更大的人生舞台,例如“李永乐老师”科普视频10个月播放量超6400万,“巧妇9妹”边看边买年收入超500万。西瓜视频它将...【详细内容】
2020-01-10  Tags: 西瓜视频  点击:(187)  评论:(0)  加入收藏
▌简易百科推荐
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(1)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(9)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(19)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(23)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(24)  评论:(0)  加入收藏
一个项目的大部分API,测试用例在参数和参数值等信息会有很多相似的地方。我们可以复制API,复制用例来快速生成,然后做细微调整既可以满足我们的测试需求1.复制API:在菜单发布单...【详细内容】
2021-12-14  AutoMeter    Tags:AutoMeter   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条