提醒:本文最后更新于 148 天前,其中某些信息可能已经过时,请谨慎使用!
你似乎正在查看一篇很久远的文章。
为了你这样的访客,我特地保留了我的历史博文。不要笑话过去的我,用温柔的目光看下去吧。

使用腾讯云云函数自动领hostloc积分

首先呢,应该先介绍下云函数: 云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。SCF 是实时文件处理和数据处理等场景下理想的计算平台。

腾讯SCF是由免费额度的,轻量使用完全够用,超量后费用也不算贵。每个月的免费额度,会在每月开始时刻重置,不会进行累积。每月计费时,会先抵扣免费额度,超出部分再进行后付费结算。

资源类型每月免费额度
资源使用量40 万 GBs
调用次数100 万 次

下表标明在配置为不同内存时,函数可免费运行的时长:

内存(MB)免费时长(秒)
1283,200,000
2561,600,000
512800,000
1024400,000
1536266667

利用这个免费额度,我们可以将很多小脚本放在上面运行,今天就来讲下如何使用scf云函数来获取 Hostloc 论坛积分(原理: 访问他人用户空间每次可以获得 2 积分,每天最多 20 积分 ,这个小脚本就是基于这一原理,使用代码模拟用户登录,然后随机访问用户空间来实现的 )

首先登录 腾讯云 SCF 控制台(在此之前要完成腾讯云 实名认证),点击左侧菜单栏的 函数服务,接着点击顶栏的地区选择下拉框,选择 香港,因为大陆区域在绑定域名时需要备案,如果你拥有已备案的域名,则可以选择国内,当然不绑定域名也可以使用。接着点击蓝色的 新建 按钮,创建函数。

然后自定义一个函数名,并选择python3.6环境,使用模板函数中的hello word即可

修改index.py文件为如下代码

import os
import requests
import time
import random
import re


# 随机生成用户空间链接
def randomly_gen_uspace_url():
    url_list = []
    # 访问小黑屋用户空间不会获得积分、生成的随机数可能会重复,这里多生成两个链接用作冗余
    for i in range(12):
        uid = random.randint(10000, 35000)
        url = "https://www.hostloc.com/space-uid-{}.html".format(str(uid))
        url_list.append(url)
    return url_list


# 登录帐户
def login(username, password):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
    }
    login_url = "https://www.hostloc.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1"
    login_data = {
        "fastloginfield": "username",
        "username": username,
        "password": password,
    }
    s = requests.Session()
    s.post(url=login_url, data=login_data, headers=headers)
    return s


# 通过抓取用户设置页面的标题检查是否登录成功
def check_login_status(s, number_c):
    test_url = "https://www.hostloc.com/home.php?mod=spacecp"
    res = s.get(test_url)
    res.encoding = "utf-8"
    test_title = re.findall("<title>.*?</title>", res.text)
    if test_title[0] != "<title>个人资料 -  全球主机交流论坛 -  Powered by Discuz!</title>":
        print("第" + str(number_c) + "个帐户登录失败!")
        return False
    else:
        print("第" + str(number_c) + "个帐户登录成功!")
        return True


# 依次访问随机生成的用户空间链接获取积分
def get_points(s, number_c):
    if check_login_status(s, number_c):
        url_list = randomly_gen_uspace_url()
        # 使用for和try/except实现当前链接访问出错时不中断程序继续访问下一个链接
        for url in url_list:
            try:
                s.get(url)
                print("用户空间链接:" + url + " 访问成功")
                time.sleep(4)  # 每访问一个链接后休眠4秒,以避免触发论坛的防cc机制
            except Exception as e:
                print("链接访问异常:" + str(e))
            continue
    else:
        print("请检查你的帐户是否正确!")

def main_handler(event,context):
    username = os.environ.get('HOSTLOC_USERNAME')
    password = os.environ.get('HOSTLOC_PASSWORD')

    # 分割用户名和密码为列表
    user_list = username.split(",")
    passwd_list = password.split(",")

    if len(user_list) != len(passwd_list):
        print("用户名与密码个数不匹配,请检查环境变量设置是否错漏!")
    else:
        print("共检测到" + str(len(user_list)) + "个帐户,开始获取积分")
        print("**************************************************")

        # 使用for和try/except实现当前用户获取积分出错时不中断程序继续尝试下一个用户
        for i in range(len(user_list)):
            try:
                s = login(user_list[i], passwd_list[i])
                get_points(s, i + 1)
                print("**************************************************")
            except Exception as e:
                print("获取积分异常:" + str(e))
            continue
            print("程序执行完毕,获取积分结束")


if __name__ == "__main__":
    main_handler("", "")
    
        

然后拉到底部,在高级配置中修改超时时间为60秒,并添加两个环境变量:

HOSTLOC_USERNAME
HOSTLOC_PASSWORD

然后点击完成即可。之后来到触发方式,点击“添加触发方式”,并如下配置

点击完成即可,这样每天就都有积分进账啦。

发表评论

共有 1 条看法