第一步:
http://live.readyidu.com/getTypeList 获得分类列表
第二步: 将上一步获得的数据中的 id 传入第二个网络请求中 :
http://live.readyidu.com/getNewChannelListByTypeId?typeId=200 例如 200 就是上边获得的中央频道的id
第三步:上一步获取结果中,比如说 CCTV1 下有很多个源,每个源里都包涵:r, f, i, m 4个值,i 就是我们要用到的 id
http://live.readyidu.com/getSourceById?id=5181 例如 5181 就是一个id,使用GET请求这个地址,但是要注意,再模拟的时候需要在头部加上一对:
platform = ios
这样我们模拟请求就可以正确的取到源了。
{
"code": 200,
"data": "http://livestream.readyidu.com/live/cctv2.m3u8?v=cbmu7y5b",
"errorMessage": "",
"errorCode": 200,
"message": ""
}
# coding:utf-8
import sys, json
from urllib import parse
import http.client
if __name__ == '__main__':
sourceTypeAPI = 'http://live.readyidu.com/getTypeList'
sourceChannelListAPI = 'http://live.readyidu.com/getNewChannelListByTypeId?typeId='
sourceIdAPI = 'http://live.readyidu.com/getSourceById?id='
# 请求源类型列表
conn = http.client.HTTPConnection('live.readyidu.com')
header = {"platform": "ios"}
conn.request(method="GET", url=sourceTypeAPI)
response = conn.getresponse()
res = response.read()
resp = json.loads(res)
typeArray=resp['data']
for item in typeArray:
print(item['type'], "id:", item['id'])
# 获得这个分类下的节目列表
typeSourceURL=sourceChannelListAPI + str(item['id'])
conn.request(method="GET", url=typeSourceURL)
sourceChannelResp = json.loads(conn.getresponse().read())
channelArray=sourceChannelResp['data']['channels']
for channel in channelArray:
# 获得每个源的请求地址
print("\t频道名:", channel['c'])
sourceArray=channel['o']
for source in sourceArray:
# 获得具体源
sourceIdAPIURL = sourceIdAPI + str(source['i'])
conn.request(method="GET", url=sourceIdAPIURL, headers=header)
sourceResp = json.loads(conn.getresponse().read())
swicher = { # 定义一个map,相当于定义case:func()
1: "极速",
2: "流畅",
3: "一般",
4: "一般"
}
if 'data' in sourceResp:
print("\t\t", swicher.get(source['m']), sourceResp['data'])