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.winktv.co.kr/v1/live/play'
#-------a24的账号---------
a_cookie = f'partner=winktv; renewalAccessCheck=ok; sessKey=6f6c9ca1-e92b-40da-b749-61a77fd4b95f; _ga=GA1.1.77810838.1742387685; userLoginYN=Y; userLoginSaveYN=Y; userLoginIdx=10961682; userLoginSaveID=WVRJME5qQXlNell3TWpRPQ%3D%3D; 79b0c6d4081955eb1c9b2417b9015e73b776b816f05c1f6e3cbf8c71c57259ee=ztjKTcWHd2%2BxFygypeplhPT2eFXabynD9tDWjpzTlTXWfoxdS2cKYBciR9tc2B6hQYbVnCOcWasMu24CKjEKWZlGHW0LuzumHGwq56fKknEonh%2FebJh9Wa41dJCgwnez; _ga_6TT77QH4S6=GS1.1.{now}.1.1.1742387815.0.0.0'
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.winktv.co.kr",
            "Referer": "https://www.winktv.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.winktv.co.kr/v1/live/bookmark'
    live_url = 'https://api.winktv.co.kr/v1/live'
    # Bookmark需要传输的参数
    cookie = f'partner=winktv; renewalAccessCheck=ok; sessKey=6f6c9ca1-e92b-40da-b749-61a77fd4b95f; _ga=GA1.1.77810838.1742387685; userLoginYN=Y; userLoginSaveYN=Y; userLoginIdx=10961682; userLoginSaveID=WVRJME5qQXlNell3TWpRPQ%3D%3D; 79b0c6d4081955eb1c9b2417b9015e73b776b816f05c1f6e3cbf8c71c57259ee=ztjKTcWHd2%2BxFygypeplhPT2eFXabynD9tDWjpzTlTXWfoxdS2cKYBciR9tc2B6hQYbVnCOcWasMu24CKjEKWZlGHW0LuzumHGwq56fKknEonh%2FebJh9Wa41dJCgwnez; _ga_6TT77QH4S6=GS1.1.{now}.1.1.1742387815.0.0.0'
    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.winktv.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()
