示例#1
0
def init():
    # 设置代理
    crawler.quickly_set_proxy()

    if ACCESS_TOKEN is not None:
        return True

    # 文件存在,检查格式是否正确
    if os.path.exists(token_file_path):
        api_info = tool.json_decode(crypto.Crypto().decrypt(file.read_file(token_file_path)), [])
        if crawler.check_sub_key(("api_key", "api_secret"), api_info):
            # 验证token是否有效
            if get_access_token(api_info["api_key"], api_info["api_secret"]):
                output.print_msg("access token get succeed!")
                return True
            else:
                output.print_msg("api info has expired")
        else:
            output.print_msg("decrypt api info failure")
        # token已经无效了,删除掉
        path.delete_dir_or_file(token_file_path)
    output.print_msg("Please input api info")
    while True:
        api_key = input("API KEY: ")
        api_secret = input("API SECRET; ")
        # 验证token是否有效
        if get_access_token(api_key, api_secret):
            # 加密保存到文件中
            if not os.path.exists(token_file_path):
                file.write_file(crypto.Crypto().encrypt(json.dumps({"api_key": api_key, "api_secret": api_secret})), token_file_path, file.WRITE_FILE_TYPE_REPLACE)
            output.print_msg("access token get succeed!")
            return True
        output.print_msg("incorrect api info, please type again!")
    return False
示例#2
0
def check_login():
    global USER_ID, USER_KEY
    # 文件存在,检查格式是否正确
    if SESSION_DATA_PATH is not None:
        api_info = tool.json_decode(crypto.Crypto().decrypt(file.read_file(SESSION_DATA_PATH)))
        if crawler.check_sub_key(("user_id", "user_key"), api_info):
            # 验证token是否有效
            if check_token(api_info["user_id"], api_info["user_key"]):
                # 设置全局变量
                USER_ID = api_info["user_id"]
                USER_KEY = api_info["user_key"]
                return True
            log.step("登录信息已过期")
        # token已经无效了,删除掉
        path.delete_dir_or_file(SESSION_DATA_PATH)
    while True:
        input_str = input(crawler.get_time() + " 未检测到api信息,是否手动输入手机号码+密码登录(1)、或者直接输入api信息进行验证(2)、或者退出程序(E)xit?").lower()
        if input_str in ["e", "exit"]:
            tool.process_exit()
        elif input_str not in ["1", "2"]:
            continue
        elif input_str == "1":
            phone_number = input(crawler.get_time() + " 请输入手机号:")
            password = input(crawler.get_time() + " 请输入密码:")
            # 模拟登录
            login_status, error_message = login(phone_number, password)
            if login_status is False:
                log.step("登录失败,原因:%s" % error_message)
                continue
        elif input_str == "2":
            user_id = input(crawler.get_time() + " 请输入USER ID: ")
            user_key = input(crawler.get_time() + " 请输入USER KEY; ")
            # 验证token是否有效
            if not check_token(user_id, user_key):
                log.step("无效的登录信息,请重新输入")
                continue
            # 设置全局变量
            USER_ID = user_id
            USER_KEY = user_key
        # 加密保存到文件中
        file.write_file(crypto.Crypto().encrypt(json.dumps({"user_id": USER_ID, "user_key": USER_KEY})), SESSION_DATA_PATH, file.WRITE_FILE_TYPE_REPLACE)
        return True
    return False
示例#3
0
def set_token_to_file():
    access_token = input(crawler.get_time() + " 请输入access_token: ")
    auth_token = input(crawler.get_time() + " 请输入auth_token: ")
    zhezhe_info = input(crawler.get_time() + " 请输入zhezhe_info: ")
    account_data = {
        "access_token": access_token,
        "auth_token": auth_token,
        "zhezhe_info": zhezhe_info,
    }
    file.write_file(crypto.Crypto().encrypt(json.dumps(account_data)),
                    SESSION_DATA_PATH, file.WRITE_FILE_TYPE_REPLACE)
示例#4
0
def check_login():
    if not COOKIE_INFO["sessionid"] and SESSION_DATA_PATH:
        # 从文件中读取账号密码
        account_data = tool.json_decode(crypto.Crypto().decrypt(file.read_file(SESSION_DATA_PATH)), {})
        if crawler.check_sub_key(("email", "password"), account_data):
            if _do_login(account_data["email"], account_data["password"]):
                return True
    else:
        index_url = "https://www.instagram.com/"
        index_response = net.request(index_url, method="GET", cookies_list=COOKIE_INFO)
        if index_response.status == net.HTTP_RETURN_CODE_SUCCEED:
            return index_response.data.decode(errors="ignore").find('"viewer":{') >= 0
    return False
示例#5
0
def get_token_from_file():
    account_data = tool.json_decode(crypto.Crypto().decrypt(
        file.read_file(SESSION_DATA_PATH)))
    if account_data is None:
        return False
    if crawler.check_sub_key(("access_token", "auth_token", "zhezhe_info"),
                             account_data):
        global ACCESS_TOKEN, AUTH_TOKEN, ZHEZHE_INFO
        ACCESS_TOKEN = account_data["access_token"]
        AUTH_TOKEN = account_data["auth_token"]
        ZHEZHE_INFO = account_data["zhezhe_info"]
        return True
    return False
示例#6
0
def login_from_console():
    # 从命令行中输入账号密码
    while True:
        email = input(tool.get_time() + " 请输入邮箱: ")
        password = input(tool.get_time() + " 请输入密码: ")
        while True:
            input_str = input(tool.get_time() + " 是否使用这些信息(Y)es或重新输入(N)o: ")
            input_str = input_str.lower()
            if input_str in ["y", "yes"]:
                if _do_login(email, password):
                    if IS_LOCAL_SAVE_SESSION and SESSION_DATA_PATH:
                        file.write_file(crypto.Crypto().encrypt(json.dumps({"email": email, "password": password})), SESSION_DATA_PATH, file.WRITE_FILE_TYPE_REPLACE)
                    return True
                return False
            elif input_str in ["n", "no"]:
                break