mirror of
https://github.com/wbt5/real-url.git
synced 2025-07-26 10:30:32 +08:00
✨ Add 央视频 (#95)
- 需要替换 headers 中登陆的 cookie - 目前网页版链接有效时间很短,且每个IP每天的请求数量有限制 - APP版本的链接放时间更长,但需要反编译获取ckey生成方式,以后再更新。
This commit is contained in:
parent
5140702dba
commit
368050ab46
117
yangshipin.py
Normal file
117
yangshipin.py
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time: 2021/5/3 12:28
|
||||||
|
# @Project: real-url
|
||||||
|
# @Author: wbt5
|
||||||
|
# @Blog: https://wbt5.com
|
||||||
|
|
||||||
|
# CCTV-1: https://m.yangshipin.cn/video?type=1&vid=2000210103&pid=600001859
|
||||||
|
# 需要替换 headers 中登陆的 cookie
|
||||||
|
# 目前网页版链接有效时间很短,且每个IP每天的请求数量有限制
|
||||||
|
# APP版本的链接放时间更长,但需要反编译获取ckey生成方式,以后再更新。
|
||||||
|
|
||||||
|
import binascii
|
||||||
|
import ctypes
|
||||||
|
import time
|
||||||
|
import uuid
|
||||||
|
from urllib.parse import parse_qs
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from Crypto.Cipher import AES
|
||||||
|
|
||||||
|
|
||||||
|
def aes_encrypt(text):
|
||||||
|
"""
|
||||||
|
AES加密
|
||||||
|
"""
|
||||||
|
key = binascii.a2b_hex('4E2918885FD98109869D14E0231A0BF4')
|
||||||
|
iv = binascii.a2b_hex('16B17E519DDD0CE5B79D7A63A4DD801C')
|
||||||
|
pad = 16 - len(text) % 16
|
||||||
|
text = text + pad * chr(pad)
|
||||||
|
text = text.encode()
|
||||||
|
cipher = AES.new(key, AES.MODE_CBC, iv)
|
||||||
|
encrypt_bytes = cipher.encrypt(text)
|
||||||
|
return binascii.b2a_hex(encrypt_bytes).decode()
|
||||||
|
|
||||||
|
|
||||||
|
class YangShiPin:
|
||||||
|
|
||||||
|
def __init__(self, rid):
|
||||||
|
var = parse_qs(rid)
|
||||||
|
vid, = var['vid']
|
||||||
|
pid, = var['pid']
|
||||||
|
|
||||||
|
platform = 4330701
|
||||||
|
guid = 'ko7djb70_vbjvrg5gcm'
|
||||||
|
txvlive_version = '3.0.37'
|
||||||
|
tt = int(time.time())
|
||||||
|
jc = 'mg3c3b04ba'
|
||||||
|
wu = f'|{vid}|{tt}|{jc}|{txvlive_version}|{guid}|{platform}|https://m.yangshipin.cn/|mozilla/5.0 (iphone; ' \
|
||||||
|
f'cpu||Mozilla|Netscape|Win32| '
|
||||||
|
|
||||||
|
u = 0
|
||||||
|
for i in wu:
|
||||||
|
_char = ord(i)
|
||||||
|
u = (u << 5) - u + _char
|
||||||
|
u &= u & 0xffffffff
|
||||||
|
bu = ctypes.c_int32(u).value
|
||||||
|
|
||||||
|
xu = f'|{bu}{wu}'
|
||||||
|
# ckey是个aes加密,CBC模式,pkcs7填充
|
||||||
|
ckey = ('--01' + aes_encrypt(xu)).upper()
|
||||||
|
|
||||||
|
self.params = {
|
||||||
|
'cmd': 2,
|
||||||
|
'cnlid': vid,
|
||||||
|
'pla': 0,
|
||||||
|
'stream': 2,
|
||||||
|
'system': 1,
|
||||||
|
'appVer': '3.0.37',
|
||||||
|
'encryptVer': '8.1',
|
||||||
|
'qq': 0,
|
||||||
|
'device': 'PC',
|
||||||
|
'guid': 'ko7djb70_vbjvrg5gcm',
|
||||||
|
'defn': 'auto',
|
||||||
|
'host': 'yangshipin.cn',
|
||||||
|
'livepid': pid,
|
||||||
|
'logintype': 1,
|
||||||
|
'vip_status': 1,
|
||||||
|
'livequeue': 1,
|
||||||
|
'fntick': tt,
|
||||||
|
'tm': tt,
|
||||||
|
'sdtfrom': 113,
|
||||||
|
'platform': platform,
|
||||||
|
'cKey': ckey,
|
||||||
|
'queueStatus': 0,
|
||||||
|
'uhd_flag': 4,
|
||||||
|
'flowid': uuid.uuid4().hex,
|
||||||
|
'sphttps': 1,
|
||||||
|
# 'callback': 'txvlive_videoinfoget_9046016361',
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_real_url(self):
|
||||||
|
headers = {
|
||||||
|
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, '
|
||||||
|
'like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
|
||||||
|
'referer': 'https://m.yangshipin.cn/',
|
||||||
|
'cookie': ''
|
||||||
|
}
|
||||||
|
res = requests.get('https://liveinfo.yangshipin.cn/', headers=headers, params=self.params).json()
|
||||||
|
url = res.get('playurl', 0)
|
||||||
|
if url:
|
||||||
|
return url
|
||||||
|
else:
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
def get_real_url(rid):
|
||||||
|
try:
|
||||||
|
ysp = YangShiPin(rid)
|
||||||
|
return ysp.get_real_url()
|
||||||
|
except Exception as e:
|
||||||
|
print('Exception:', e)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
r = input('显示“无登录信息”,则需要填充cookie。请输入央视频地址:\n')
|
||||||
|
print(get_real_url(r))
|
Loading…
x
Reference in New Issue
Block a user