import os
import pickle
import requests
import re
import base64

DOMAIN = 'http://192.168.1.1/'
USERNAME = 'yourusername'
PASSWORD = 'yourpassword'
HEADERS = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Encoding': 'gzip, deflate'
}

# get random
def get_random(session):
    cnt = session.get(url=DOMAIN+'asp/GetRandCount.asp').content.decode('utf-8-sig')
    return cnt

# get login cookie
def get_cookie(session, cnt):
    payload = {'UserName': USERNAME, 'PassWord': base64.b64encode(str.encode(PASSWORD)),'Language': 'chinese', 'x.X_HW_Token' : cnt}
    save_cookies(session.post(url=DOMAIN+'login.cgi', data=payload).cookies,'cookie.txt')

# get ont temperature
def get_opticinfo(session):
    x = session.get(url=DOMAIN+'html/amp/opticinfo/opticinfo.asp', cookies=load_cookies('cookie.txt')).content.decode('utf-8-sig')
    opticinfos = re.findall('var opticInfos = new Array\(new stOpticInfo\("InternetGatewayDevice.X_HW_DEBUG.AMP.Optic","(.*)","(.*)","(.*)","(.*)","(.*)","(.*)","(.*)","(.*)","(.*)","(.*)","(.*)","(.*)","(.*)","(.*)","(.*)"\),null\);',x)
    return opticinfos

def save_cookies(cookiejar, filename):
    with open(filename, 'wb') as f:
        pickle.dump(cookiejar, f)

def load_cookies(filename):
    with open(filename, 'rb') as f:
        return pickle.load(f)

session = requests.Session()
session.headers = HEADERS

if not os.path.isfile('cookie.txt'):
    get_cookie(session, get_random(session))

opticinfo = get_opticinfo(session)
if not opticinfo:
    get_cookie(session, get_random(session))
    opticinfo_tmp = get_opticinfo(session)
    print(opticinfo_tmp[0][4])
else:
    print(opticinfo[0][4])