#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File    :   alive.py
@Time    :   2019/05/26 12:14:04
@Author  :   Liuyuqi 
@Version :   1.0
@Contact :   liuyuqi.gov@msn.cn
@License :   (C)Copyright 2019
@Desc    :   保持心跳

https://live.kuaishou.com/rest/wd/live/liveStream/myfollow
Request URL: https://live.kuaishou.com/rest/wd/live/liveStream/myfollow
Request Method: POST
Status Code: 200 OK
Remote Address: 127.0.0.1:1080
Referrer Policy: unsafe-url

Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: keep-alive
Content-Length: 0
Cookie: did=web_4095924dbbb4d12df7a87725a16104b6; didv=1558790317127; Hm_lvt_86a27b7db2c5c0ae37fee4a8a35033ee=1558790317; kuaishou.live.bfb1s=9b8f70844293bed778aade6e0a8f9942; clientid=3; client_key=65890b29; Hm_lpvt_86a27b7db2c5c0ae37fee4a8a35033ee=1558793089; userId=1365365171; userId=1365365171; kuaishou.live.web_st=ChRrdWFpc2hvdS5saXZlLndlYi5zdBKgAZFHcXmdSz0ZqgeR8-TTgoi9QQRV_2I1NT-eK4Wr46MXF-NpYe4Fo00puYYJRRdqB4nJLluPiMpO7YGwHtxLbnttpwFVvU0_aelP9U7kgg9s1BVI9U1dGQsZ0_JLfL8137gJKr4CqwJaq-9LBhM5a_ATTdc5Te1meUd1st2HGg-Dy_g18QwLY84WirWBIaKm8R7r6Dd3fFKYm-gdtJYmMukaEk2hY_LIikBot7IUVtJ3ydB6KCIgx-OxXNSqmT0GdbC5rtc3vchNEkamnb0pAQf6txb5g3YoBTAB; kuaishou.live.web_ph=b1dec6f6601bf17d2cb5b72665242eea8524
Host: live.kuaishou.com
kpf: PC_WEB
kpn: GAME_ZONE
Origin: https://live.kuaishou.com
Referer: https://live.kuaishou.com/u/fengyeYS
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36

res:

'''

import queue
import threading
import time

import requests

# import pymysql
import utils.get_cookie as get_cookie

baseUrl = "https://live.kuaishou.com"
# baseUrl = "http://nginx.ok.yoqi.me:88"

proxies = {"http": "http://120.26.110.59:8080"}
# sessionClient=requests.session()
sessionClients = []

baseHeader = {
    "Accept": "application/json",
    "Content-Type": "application/json;charset=UTF-8",
    "Origin": baseUrl,
    "kpf": "PC_WEB",
    "kpn": "GAME_ZONE",
}
account_alive_count = 0
detail_url_queue = queue.Queue(maxsize=1000)


def login(userPhone, cookies, userAgent, threadid):
    """
    登录快手,执行一次即可。
    param :
    return:
    """
    url = baseUrl + "/rest/wd/live/liveStream/myfollow"
    mPartHeader = {
        "Referer": "https://live.kuaishou.com/u/3xphut7zrw7zcbq",
        "User-Agent": userAgent
    }
    mHeader = baseHeader.copy()
    mHeader.update(mPartHeader)
    proxies = ""
    res = sessionClients[threadid].get(url=url, headers=mHeader, cookies=cookies,
                                       # proxies=proxies
                                       )
    print(res.text)
    if eval(res.text)["result"] != "200":
        return False
    else:
        return True


def myfollow(userPhone, cookies, userAgent, threadid):
    '''
    维持心跳,更新cookie。
    :param userPhone:
    :param cookies:
    :param userAgent:
    :param threadid:
    :return:
    '''
    url = baseUrl + "/rest/wd/live/liveStream/myfollow"
    mPartHeader = {
        "Referer": "https://live.kuaishou.com/u/3xphut7zrw7zcbq",
        "User-Agent": userAgent
    }
    mHeader = baseHeader.copy()
    mHeader.update(mPartHeader)
    # cookies = requests.utils.dict_from_cookiejar(session.cookies)
    # print(session)
    res = sessionClients[threadid].get(
        url=url, headers=mHeader, cookies=cookies,
        # proxies=proxies
    )
    if eval(res.text)["result"] != "200":
        return False
    else:
        return True


def run(userPhone, cookies, userAgent, threadid):
    '''
    执行多线程批量登录,维持在线
    :param userPhone: 用户手机号
    :param cookies: 用户初始化cookie
    :param userAgent: 用户agent
    :param threadid: 线程id
    :return:
    '''
    state = False  # 登录状态
    state = login(userPhone, cookies, userAgent, threadid)
    if state == False:
        print("thread {id}: User {userPhone}.login failure".format(id=threadid, userPhone=userPhone))
        return
    else:
        print("thread {id}: User {userPhone}.login success".format(id=threadid, userPhone=userPhone))
    while True:
        state = myfollow(userPhone, cookies, userAgent, threadid)
        if state == False:
            print("thread {id}: User {userPhone}. is alive".format(id=threadid, userPhone=userPhone))
            break
        else:
            print("thread {id}: User {userPhone}. is alive".format(id=threadid, userPhone=userPhone))
        time.sleep(10)


if __name__ == "__main__":
    start_time = time.time()
    mUser = get_cookie.getUser()
    account_alive_count = len(mUser["userPhone"])
    for i in range(3):
        sessionClients.append(requests.session())  # 新建一个session
        threading.Thread(target=run,
                         args=(mUser["userPhone"][i], mUser["cookies"][i], mUser["userAgent"][i], i)).start()

    print("last time: {} s".format(time.time() - start_time))