import requests
import json
from urllib import parse
import time


# 要修改的房间数量eg:24,48,72
limit = '36'

now = str(int(time.time()))

#代理服务器
sock = 'http://127.0.0.1:7890'

proxy = {
    'http': sock,
    'https': sock,
}

# address的变量
a_url = 'https://api.pandalive.co.kr/v1/live/play'
#-------a24的账号---------
a_cookie = 'sessKey=ba52a353-e8db-45d2-ae79-b7dfcada8062; _gcl_au=1.1.35295747.1763237317; exelbid-uid=bPSdHJWsO5GhuwSiRmgj; _tt_enable_cookie=1; _ttp=01KA4J75G1YPSH1VBMPNAH3SQ8_.tt.2; userLoginIdx=10961682; userLoginYN=Y; userLoginSaveYN=Y; userLoginSaveID=WVRJME5qQXlNell3TWpRPQ%3D%3D; partner=winktv; _gid=GA1.3.307652721.1764498335; 79b0c6d4081955eb1c9b2417b9015e73b776b816f05c1f6e3cbf8c71c57259ee=4YGHMSgz7nu0GTNg7zUyAIA2y3Ay6HTN38o9qoXGTg5%2B2BP3wRSQe13pvrixcqQm%2B%2BAOgKwVjCHCvGCUVINd7F03n%2BL%2F9zmxubwJWNGlMAMGLQedlppY2KNn9sYC45X2; _ga=GA1.1.1507135084.1763237316; _ga_ZJ51R4C39H=GS2.3.s1764675822$o16$g1$t1764675832$j50$l0$h0; ttcsid_CPNT7B3C77U5K3OPINOG=1764675822541::0M5Aopa8poj-WWYxrKXN.39.1764675908789.0; ttcsid=1764675822542::ebzbbD9bzQkh_YUAs7wk.39.1764675908789.0; _ga_W91XDLC3YE=GS2.1.s1764675820$o66$g1$t1764675911$j42$l0$h2133797830; _ga_NGSHFJTQS1=GS2.1.s1764675820$o66$g1$t1764675911$j42$l0$h0; _ga_0J8HGTPY46=GS2.1.s1764675820$o17$g1$t1764675911$j60$l0$h0; _ga_Z58JX68TPR=GS2.1.s1764675666$o67$g1$t1764675912$j23$l0$h258627859'
a_headers = {
            "Accept": "application/json, text/plain, */*",
            "Accept-Encoding": "gzip, deflate, br, zstd",
            "Accept-Language": "en-US,en;q=0.9",
            "Content-Type": "application/x-www-form-urlencoded",
            "Cookie": a_cookie,
            "Origin": "https://www.pandalive.co.kr",
            "Referer": "https://www.pandalive.co.kr/",
            "sec-ch-ua": '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
            "sec-ch-ua-mobile": "?0",
            "sec-ch-ua-platform": '"macOS"',
            "sec-fetch-dest": "empty",
            "sec-fetch-mode": "cors",
            "sec-fetch-site": "same-site",
            "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
            "x-device-info": '{"t":"webPc","v":"1.0","ui":17217562}',
}


def writeList(file_path, bj_list):
    with open(file_path, 'w') as f:
        json.dump(bj_list, f, indent=4)



#从bookmark获取正在直播bj
def getLiveList(now, proxy, limit):
    url = 'https://api.pandalive.co.kr/v1/live/bookmark'
    live_url = 'https://api.pandalive.co.kr/v1/live'
    # Bookmark需要传输的参数
    cookie = 'sessKey=ba52a353-e8db-45d2-ae79-b7dfcada8062; _gcl_au=1.1.35295747.1763237317; exelbid-uid=bPSdHJWsO5GhuwSiRmgj; _tt_enable_cookie=1; _ttp=01KA4J75G1YPSH1VBMPNAH3SQ8_.tt.2; userLoginIdx=10961682; userLoginYN=Y; userLoginSaveYN=Y; userLoginSaveID=WVRJME5qQXlNell3TWpRPQ%3D%3D; partner=winktv; _gid=GA1.3.307652721.1764498335; 79b0c6d4081955eb1c9b2417b9015e73b776b816f05c1f6e3cbf8c71c57259ee=4YGHMSgz7nu0GTNg7zUyAIA2y3Ay6HTN38o9qoXGTg5%2B2BP3wRSQe13pvrixcqQm%2B%2BAOgKwVjCHCvGCUVINd7F03n%2BL%2F9zmxubwJWNGlMAMGLQedlppY2KNn9sYC45X2; _ga=GA1.1.1507135084.1763237316; _ga_ZJ51R4C39H=GS2.3.s1764675822$o16$g1$t1764675832$j50$l0$h0; ttcsid_CPNT7B3C77U5K3OPINOG=1764675822541::0M5Aopa8poj-WWYxrKXN.39.1764675908789.0; ttcsid=1764675822542::ebzbbD9bzQkh_YUAs7wk.39.1764675908789.0; _ga_W91XDLC3YE=GS2.1.s1764675820$o66$g1$t1764675911$j42$l0$h2133797830; _ga_NGSHFJTQS1=GS2.1.s1764675820$o66$g1$t1764675911$j42$l0$h0; _ga_0J8HGTPY46=GS2.1.s1764675820$o17$g1$t1764675911$j60$l0$h0; _ga_Z58JX68TPR=GS2.1.s1764675666$o67$g1$t1764675912$j23$l0$h258627859'
    data = 'offset=0&limit=60&isLive=Y&width=280&height=158&imageResize=crop'
    data = parse.parse_qs(data)
    # Live需要传输的参数
    live_data = f'offset=0&limit={limit}&orderBy=user&onlyNewBj=N'
    live_data = parse.parse_qs(live_data)
    headers = {
        "accept": "application/json, text/plain, */*",
        "accept-language": "en-US,en;q=0.9",
        "content-type": "application/x-www-form-urlencoded",
        # "sec-ch-ua": "\"Chromium\";v=\"104\", \" Not A;Brand\";v=\"99\", \"Google Chrome\";v=\"104\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\"",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-site",
        "x-device-info": "{\"t\":\"webPc\",\"v\":\"1.0\",\"ui\":17217562}",
        "cookie": cookie,
        "Referer": "https://www.pandalive.co.kr/",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
        "Referrer-Policy": "strict-origin-when-cross-origin"
    }
    ###  -------返回的3个参数--------
    bj_set = set() #在线bjId
    fan_set = set() #粉丝房bjId
    live_set = set() #正在直播bjId
    try:
        # 先获取书签中正在直播的bj
        response = requests.post(url=url, headers=headers, data=data, proxies=proxy)
        if response.status_code == 200:
            content = response.json()
            for bookmark in content['list']:
                media = bookmark['media']
                #判断是否是直播
                if media['liveType'] == 'live':
                    #将正在直播的bjId添加到集合中
                    bj_set.add(media['userId'])
                    if 'fanLevel' in media:
                        fan_set.add(media['userId']) #将粉丝房bjId添加到集合中
                        bj_set = bj_set - fan_set
        else:
            print(response.status, 'Request Bookmark Error')
        # 再获取所有直播中靠前的bj
        live_response = requests.post(url=live_url, headers=headers, data=live_data, proxies=proxy)
        if live_response.status_code == 200:
            live_content = live_response.json()
            for media in live_content['list']:
                live_set.add(media['userId'])
        else:
            print('Request Live Error')
        # 求交集
        bj_set = bj_set & live_set
        return bj_set
    except:
        print('Unkonwn Error')
        return bj_set



def getAddress(name, url, headers, proxy):
    data = f'action=watch&userId={name}&password=&shareLinkType='
    data = parse.parse_qs(data)
    try:
        response = requests.post(url=url, headers=headers, data=data, proxies=proxy)
        if response.status_code == 200:
            content = response.json()
            address = content['PlayList']['hls'][0]['url']
            return address
        else:
            return ''
    except:
        return ''


def main():
    bj_list = {}
    bj_set = getLiveList(now, proxy, limit)
    for bj in bj_set:
        bj_list[bj] = {
                'address':  getAddress(bj, a_url, a_headers, proxy),
                'time':     time.strftime("%H:%M:%S", time.localtime())
            }
        time.sleep(0.5)
    writeList('/home/uftp/lazy_list.json', bj_list)


if __name__ == '__main__':
    main()
