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=d1042c0b-35e9-41db-af4f-814ec47dbaed; _gcl_au=1.1.568079683.1778616783; exelbid-uid=mm4u8k8KAn0r6ZlENutg; _tt_enable_cookie=1; _ttp=01KREX4S83TH50YCBG740P88X9_.tt.2; _gid=GA1.3.29106667.1778616789; tk_id=cb950b94-2d53-4c7c-89a5-4f783a2c4ec1; _fcOM={"k":"a5abae6119430e0f-4df6679619e1dd018ac2aa9","i":"219.157.165.88.89770","r":1778616789094}; userLoginIdx=10961682; userLoginYN=Y; userLoginSaveYN=Y; userLoginSaveID=WVRJME5qQXlNell3TWpRPQ%3D%3D; 79b0c6d4081955eb1c9b2417b9015e73b776b816f05c1f6e3cbf8c71c57259ee=mFlbViSxK%2FxaxQuMpiFI%2FWmIioM4g5aRf3Ywo%2Frjr8i%2Bi43bKCjT6H4dChgJai%2FvErBR6r0mdkl9nUDITYucpX2xZNHiNvMI4YpRYAEZGWBEB16cEh7JhrlV1ACrk%2FZs; tk_key=eyJhdWlkIjoiYTVhYmFlNjExOTQzMGUwZi00ZGY2Njc5NjE5ZTFkZDAxOGFjMmFhOSIsImlwIjoiMjE5LjE1Ny4xNjUuODguODk3NzAifQ==; partner=winktv; t_se_id=5b9a5ebf-6c7b-4f60-a544-c37254b2d1f1; t_u_so=direct; t_u_me=none; _ga_0J8HGTPY46=GS2.1.s1778675367$o2$g0$t1778675367$j60$l0$h0; __rtbh.lid=%7B%22eventType%22%3A%22lid%22%2C%22id%22%3A%2267CJSohj1eTLnlDo8DRV%22%2C%22expiryDate%22%3A%222027-05-13T12%3A29%3A28.997Z%22%7D; cto_bundle=rmwIJV80RjlEQUFMRFdWOHZSSnpqZ1RjUm9YenZEeWQ0WDFkOE43eWRCd3dZN3VSUndnWnpaYW1KZUoyTzJEa3YlMkJyM3BZREhUV0RUSEZ2ZDBWNCUyRjJPZ25zWmdBa0diR2clMkZjejdWWm4lMkZ6QklvZHQ3ZnhhRkUxOXlRR21DSGx6ViUyRnozaFk; _ga=GA1.3.953511221.1778616782; _gat_UA-193540779-1=1; _ga_ZJ51R4C39H=GS2.3.s1778675370$o2$g0$t1778675370$j60$l0$h0; __rtbh.uid=%7B%22eventType%22%3A%22uid%22%2C%22id%22%3A10961682%2C%22expiryDate%22%3A%222027-05-13T12%3A29%3A42.876Z%22%7D; _ga_NGSHFJTQS1=GS2.1.s1778675367$o2$g1$t1778675383$j44$l0$h0; _ga_W91XDLC3YE=GS2.1.s1778675367$o2$g1$t1778675405$j22$l0$h1081927381; ttcsid=1778675356834::AvezUmbEhNiuA22MNOq0.3.1778675411436.0::1.26030.12513::54598.26.61.104::53639.19.0; ttcsid_CPNT7B3C77U5K3OPINOG=1778675356836::X-FX--sqZE5AY4ow0eLi.2.1778675411436.1; _ga_Z58JX68TPR=GS2.1.s1778675356$o2$g1$t1778675411$j5$l0$h1810358424'
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=d1042c0b-35e9-41db-af4f-814ec47dbaed; _gcl_au=1.1.568079683.1778616783; exelbid-uid=mm4u8k8KAn0r6ZlENutg; _tt_enable_cookie=1; _ttp=01KREX4S83TH50YCBG740P88X9_.tt.2; _gid=GA1.3.29106667.1778616789; tk_id=cb950b94-2d53-4c7c-89a5-4f783a2c4ec1; _fcOM={"k":"a5abae6119430e0f-4df6679619e1dd018ac2aa9","i":"219.157.165.88.89770","r":1778616789094}; userLoginIdx=10961682; userLoginYN=Y; userLoginSaveYN=Y; userLoginSaveID=WVRJME5qQXlNell3TWpRPQ%3D%3D; 79b0c6d4081955eb1c9b2417b9015e73b776b816f05c1f6e3cbf8c71c57259ee=mFlbViSxK%2FxaxQuMpiFI%2FWmIioM4g5aRf3Ywo%2Frjr8i%2Bi43bKCjT6H4dChgJai%2FvErBR6r0mdkl9nUDITYucpX2xZNHiNvMI4YpRYAEZGWBEB16cEh7JhrlV1ACrk%2FZs; tk_key=eyJhdWlkIjoiYTVhYmFlNjExOTQzMGUwZi00ZGY2Njc5NjE5ZTFkZDAxOGFjMmFhOSIsImlwIjoiMjE5LjE1Ny4xNjUuODguODk3NzAifQ==; partner=winktv; t_se_id=5b9a5ebf-6c7b-4f60-a544-c37254b2d1f1; t_u_so=direct; t_u_me=none; _ga_0J8HGTPY46=GS2.1.s1778675367$o2$g0$t1778675367$j60$l0$h0; __rtbh.lid=%7B%22eventType%22%3A%22lid%22%2C%22id%22%3A%2267CJSohj1eTLnlDo8DRV%22%2C%22expiryDate%22%3A%222027-05-13T12%3A29%3A28.997Z%22%7D; cto_bundle=rmwIJV80RjlEQUFMRFdWOHZSSnpqZ1RjUm9YenZEeWQ0WDFkOE43eWRCd3dZN3VSUndnWnpaYW1KZUoyTzJEa3YlMkJyM3BZREhUV0RUSEZ2ZDBWNCUyRjJPZ25zWmdBa0diR2clMkZjejdWWm4lMkZ6QklvZHQ3ZnhhRkUxOXlRR21DSGx6ViUyRnozaFk; _ga=GA1.3.953511221.1778616782; _gat_UA-193540779-1=1; _ga_ZJ51R4C39H=GS2.3.s1778675370$o2$g0$t1778675370$j60$l0$h0; __rtbh.uid=%7B%22eventType%22%3A%22uid%22%2C%22id%22%3A10961682%2C%22expiryDate%22%3A%222027-05-13T12%3A29%3A42.876Z%22%7D; _ga_NGSHFJTQS1=GS2.1.s1778675367$o2$g1$t1778675383$j44$l0$h0; _ga_W91XDLC3YE=GS2.1.s1778675367$o2$g1$t1778675405$j22$l0$h1081927381; ttcsid=1778675356834::AvezUmbEhNiuA22MNOq0.3.1778675411436.0::1.26030.12513::54598.26.61.104::53639.19.0; ttcsid_CPNT7B3C77U5K3OPINOG=1778675356836::X-FX--sqZE5AY4ow0eLi.2.1778675411436.1; _ga_Z58JX68TPR=GS2.1.s1778675356$o2$g1$t1778675411$j5$l0$h1810358424'
    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()
