고 품질 생방송 소스 획득-python

첫 번 째 단계:http://live.readyidu.com/getTypeList 분류 목록 가 져 오기
두 번 째 단계:이전 단계 에서 얻 은 데이터 의 id 를 두 번 째 네트워크 요청 에 전송 합 니 다:http://live.readyidu.com/getNewChannelListByTypeId?typeId=200 예 를 들 어 200 은 위 에서 얻 은 중앙 채널 의 id 입 니 다.
세 번 째 단계:지난 단계 에서 결 과 를 얻 었 습 니 다.예 를 들 어 CCTV 1 아래 에 여러 개의 소스 가 있 습 니 다.모든 소스 에는 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

좋은 웹페이지 즐겨찾기