import re
import json
import time
import requests
from urllib import parse

name = input('BjId: ')

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

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

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


# address的变量
a_url = 'https://api.pandalive.co.kr/v1/live/play'
#-------panda的账号---------
a_cookie = 'userLoginSaveYN=Y; userLoginSaveID=Wm1KaVptSmpZZz09; _tt_enable_cookie=1; _ttp=01JTJS3SC1MF42KGP2DFH3B7B1_.tt.2; _ga_DB0PV23GCC=GS2.1.s1784810654$o2$g0$t1784810692$j22$l0$h0; __rtbh.uid=%7B%22eventType%22%3A%22uid%22%2C%22id%22%3A17217562%2C%22expiryDate%22%3A%222027-08-06T11%3A33%3A00.152Z%22%7D; __rtbh.lid=%7B%22eventType%22%3A%22lid%22%2C%22id%22%3A%22M7yRxwcKpyeBJJ6kC8ru%22%2C%22expiryDate%22%3A%222027-08-06T11%3A33%3A00.153Z%22%7D; exelbid-uid=oVspWjYccpq6iYBlRMsX; _gcl_au=1.1.927960546.1785934319.-.-.1786015980.1825686400.1786015980.1786015980; sessKey=8e5cbeed-299b-49e0-a2e7-d08c4fb62546; userLoginIdx=17217562; userLoginYN=Y; partner=winktv; cto_bundle=S_uIgl9tcEk5YUR2JTJCVXpOZ3JPWENlSmh6ZU5ERmtvenJ4bXlacXZXQVVuNnBvb0RTQkRISW9TSXZwTUYzdUY1OEozcloxRzRWN2xqWU5HQTdFTG9jcjdNQWZvJTJGYlluTGo3eWolMkJmeldRSWUwdzhVZkQzZ09ySGVwWnlVOHFsY0VZekkzeHlKSHVkd005MmJKTmdOaVpSM2lJbkElM0QlM0Q; _gid=GA1.3.910431135.1789837840; _gat_UA-193540779-1=1; _gat_gtag_UA_194444882_2=1; 79b0c6d4081955eb1c9b2417b9015e73b776b816f05c1f6e3cbf8c71c57259ee=LcqI9dY8aXETWhRewIuuspuVCw0sdpQSZYI5vTdtEo1jm%2BdzoZj28UQL6O1WQS6V88e0Qw4NLrkjnvQFCK0WiblYy4L%2FWuyqe984JyGE7DWogKOu8ZX7bFzkEdqfIrCC; _ga_W91XDLC3YE=GS2.1.s1789837839$o84$g1$t1789837879$j20$l0$h991992193; _ga=GA1.1.1926602821.1746534365; _ga_NGSHFJTQS1=GS2.1.s1789837840$o84$g1$t1789837879$j21$l0$h0; _ga_0J8HGTPY46=GS2.1.s1789837840$o65$g1$t1789837879$j21$l0$h0; ttcsid_CPNT7B3C77U5K3OPINOG=1789837841550::zE9m2WXlcsHn24iMOVhr.74.1789837879403.1; ttcsid=1789837841550::x4pzOyJZuZlmU3i0U83P.75.1789837879404.0::1.35324.37854::22147.7.495.88::21107.7.0; _ga_ZJ51R4C39H=GS2.3.s1789837841$o80$g1$t1789837879$j22$l0$h0; _ga_Z58JX68TPR=GS2.1.s1789837838$o84$g1$t1789837879$j19$l1$h1943985643'
data = 'offset=0&limit=60&isLive=Y&width=280&height=158&imageResize=crop'
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 matchUrl(url):
    pattern = r'GROUP-ID="720.*\n.*\n(https?://[^\s]+)'
    headers = {
        "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",
        "Origin": "https://www.pandalive.co.kr",
    }
    response = requests.get(url=url, headers=headers)
    if response.status_code == 200:
        content = response.text
        match = re.search(pattern, content)
        if match:
            url = match.group(1)
            return url
        else:
            return 'Error 4'
    else:
        print(response.text)
        return 'Error 1'


def getBjUrl(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 response.text
    except:
        return 'Error 3'


def main():
    address = getBjUrl(name, a_url, a_headers, proxy)
    # print('address\n'+address)
    real_address = matchUrl(address)
    print('real_address:\n' + real_address)

if __name__ == '__main__':
    main()
