diff --git a/yangshipin.py b/yangshipin.py new file mode 100644 index 0000000..f88f2cc --- /dev/null +++ b/yangshipin.py @@ -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))