1
0
mirror of https://github.com/wbt5/real-url.git synced 2025-06-16 15:59:57 +08:00
zhibo-url/iqiyi.py
2021-05-15 14:18:47 +08:00

87 lines
2.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 获取爱奇艺直播的真实流媒体地址。
# iqiyi.js是cmd5x加密函数
import json
import re
import time
import urllib.parse
import execjs
import requests
class IQiYi:
"""获取爱奇艺 m3u8 格式直播源
输入房间号,通常是数字,比如链接 https://gamelive.iqiyi.com/w/74429 中的 74429。
注意:
爱奇艺有部分直播是来自pps的要打开房间看链接是否有跳转有则用pps.py
爱奇艺直播依赖js环境建议安装node.js。
Attributes:
rid: 房间号
"""
def __init__(self, rid):
self.rid = rid
self.s = requests.Session()
def get_real_url(self):
"""
里面iqiyi.js是个加盐的md5execjs执行后获取cmd5x的返回值
Returns:
m3u8格式播放地址
Raises:
incorrect rid: 请确实是爱奇艺直播房间号爱奇艺有部分直播是来自pps的要打开房间看链接是否有跳转有则用pps.py
Could not find an available JavaScript runtime: 是否安装了js环境
"""
res = self.s.get('https://m-gamelive.iqiyi.com/w/' + self.rid).text
# 获取直播间的qipuId
try:
qipuid, = re.findall(r'"qipuId":(\d*?),"roomId', res)
except ValueError:
raise Exception('Incorrect rid.')
callback = 'jsonp_' + str(int((time.time() * 1000))) + '_0000'
params = {
'lp': qipuid,
'src': '01010031010000000000',
'rateVers': 'H5_QIYI',
'qd_v': 1,
'callback': callback
}
# ba传参iqiyi.js,返回vf
ba = '/jp/live?' + urllib.parse.urlencode(params)
with open('iqiyi.js', 'r') as f:
content = f.read()
try:
cmd5x = execjs.compile(content)
vf = cmd5x.call('cmd5x', ba)
except RuntimeError:
raise Exception('Could not find an available JavaScript runtime.')
# 请求
response = self.s.get('https://live.video.iqiyi.com' + ba, params={'vf': vf}).text
url_json = json.loads(re.findall(r'try{.*?\((.*)\);}catch\(e\){};', response)[0])
url = (url_json.get('data').get('streams'))[0].get('url')
url = url.replace('hlslive.video.iqiyi.com', 'm3u8live.video.iqiyi.com')
return url
def get_real_url(rid):
try:
iqiyi = IQiYi(rid)
return iqiyi.get_real_url()
except Exception as e:
print('Exception', e)
return False
if __name__ == '__main__':
r = input('请输入爱奇艺直播房间号:\n')
print(get_real_url(r))