高质量直播源获取-python

第一步:
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'])

来自:http://bbs.cnsat.net/thread-249654-1-1.html

猜你喜欢

转载自blog.csdn.net/weixin_33752045/article/details/87313660