自动签到天翼云盘,告别繁琐的手动操作

你是否也因为拥有电信手机的福利,而获得了10T的天翼云盘空间,但又不想每天都登录签到?别担心,我为你提供了一个自动签到脚本的解决方案,让你告别烦人的手动操作。

感谢热心观众:felix发现的错误。

为了方便大家使用,特此放上脚本的下载链接:

玩命点我

问题的开始

想象一下,每天早上醒来,你需要打开手机,登录天翼云盘,找到签到入口,然后点击签到按钮。虽然这个过程看似简单,但如果你想要长期坚持每天签到,它可能会变得相当烦琐。而且,有时候你可能会因为忙碌或忘记而错过签到,错失了获得奖励的机会。

这就是这个自动签到脚本诞生的原因。它可以轻松地代替你完成签到任务,让你享受到天翼云盘的优惠,同时又省去了不必要的手动操作。

项目介绍

这个项目是一个简单但非常实用的Python脚本,它可以自动登录你的天翼云盘账户,找到签到入口,并点击签到按钮,完成每日签到任务。它的使用方法也非常简单,只需将脚本上传到你的服务器上,然后设置一个定时任务即可。一旦配置完成,你就可以忘记签到的烦恼,脚本会每天按时为你签到。

项目优势

这个自动签到脚本具有以下几个显著的优势:

1. 自动化操作

脚本完全自动化,不需要手动干预。你只需设置一次,就可以忘记签到的烦恼,每天都能获得奖励。

2. 节省时

手动签到可能会花费你宝贵的时间,而脚本只需要几秒钟就能完成任务,让你有更多时间用于其他事情。

3. 避免错过签到

由于自动定时任务的存在,你再也不会因为忘记签到而错失奖励,始终能够及时签到。

4. 开放源代码

这个脚本的源代码是开放的,你可以根据自己的需求进行修改和定制,以满足特定的需求。

使用方法

要使用这个自动签到脚本,只需按照以下简单的步骤操作:

  1. 将脚本上传到你的服务器上。
  2. 在服务器上创建一个定时任务,设置脚本每天自动执行的时间。
  3. 启动定时任务,让脚本开始自动签到。

不需要任何复杂的配置或技术知识,即可轻松享受自动签到的便利。

代码部分

如果你也想告别繁琐的手动签到,省下更多的时间用于更重要的事情,那就赶紧尝试这个自动签到脚本吧!复制粘贴下面的代码,然后挂起来吧。

import time
import re
import json
import base64
import hashlib
import urllib.parse
import hmac
import rsa
import requests
import random
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

BI_RM = list("0123456789abcdefghijklmnopqrstuvwxyz")

B64MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

s = requests.Session()

# 在下面两行的引号内贴上账号(仅支持手机号)和密码
username = "手机号"
password = "密码"

# 用于发送通知的邮箱配置
email_config = {
    "smtp_server": "修改成你的邮箱信息",  # SMTP服务器地址
    "smtp_port": 587,  # SMTP服务器端口号
    "email_address": "修改成你的邮箱信息",  # 发件人邮箱地址
    "email_password": "修改成你的邮箱信息",  # 发件人邮箱密码
    "recipient_email": "修改成你的邮箱信息",  # 收件人邮箱地址
}

if not email_config["email_address"] or not email_config["email_password"]:
    print("发件人邮箱地址或密码为空,无法发送邮件通知")
    exit()

def int2char(a):
    return BI_RM[a]

def b64tohex(a):
    d = ""
    e = 0
    c = 0
    for i in range(len(a)):
        if list(a)[i] != "=":
            v = B64MAP.index(list(a)[i])
            if e == 0:
                e = 1
                d += int2char(v >> 2)
                c = 3 & v
            elif e == 1:
                e = 2
                d += int2char(c << 2 | v >> 4)
                c = 15 & v
            elif e == 2:
                e = 3
                d += int2char(c)
                d += int2char(v >> 2)
                c = 3 & v
            else:
                e = 0
                d += int2char(c << 2 | v >> 4)
                d += int2char(15 & v)
    if e == 1:
        d += int2char(c << 2)
    return d

def rsa_encode(j_rsakey, string):
    rsa_key = f"-----BEGIN PUBLIC KEY-----\n{j_rsakey}\n-----END PUBLIC KEY-----"
    pubkey = rsa.PublicKey.load_pkcs1_openssl_pem(rsa_key.encode())
    result = b64tohex((base64.b64encode(rsa.encrypt(f'{string}'.encode(), pubkey))).decode())
    return result

def calculate_md5_sign(params):
    return hashlib.md5('&'.join(sorted(params.split('&'))).encode('utf-8')).hexdigest()

def login(username, password):
    url = ""
    urlToken = "https://m.cloud.189.cn/udb/udb_login.jsp?pageId=1&pageKey=default&clientType=wap&redirectURL=https://m.cloud.189.cn/zhuanti/2021/shakeLottery/index.html"
    s = requests.Session()
    r = s.get(urlToken)
    pattern = r"https?://[^\s'\"]+"  
    match = re.search(pattern, r.text)  
    if match:
        url = match.group()  
    else:
        print("没有找到url")

    r = s.get(url)
    pattern = r"<a id=\"j-tab-login-link\"[^>]*href=\"([^\"]+)\""
    match = re.search(pattern, r.text)
    if match:
        href = match.group(1)
    else:
        print("没有找到href链接")

    r = s.get(href)
    captchaToken = re.findall(r"captchaToken' value='(.+?)'", r.text)[0]
    lt = re.findall(r'lt = "(.+?)"', r.text)[0]
    returnUrl = re.findall(r"returnUrl= '(.+?)'", r.text)[0]
    paramId = re.findall(r'paramId = "(.+?)"', r.text)[0]
    j_rsakey = re.findall(r'j_rsaKey" value="(\S+)"', r.text, re.M)[0]
    s.headers.update({"lt": lt})

    username = rsa_encode(j_rsakey, username)
    password = rsa_encode(j_rsakey, password)
    url = "https://open.e.189.cn/api/logbox/oauth2/loginSubmit.do"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/76.0',
        'Referer': 'https://open.e.189.cn/',
    }
    data = {
        "appKey": "cloud",
        "accountType": '01',
        "userName": f"{{RSA}}{username}",
        "password": f"{{RSA}}{password}",
        "validateCode": "",
        "captchaToken": captchaToken,
        "returnUrl": returnUrl,
        "mailSuffix": "@189.cn",
        "paramId": paramId
    }
    r = s.post(url, data=data, headers=headers, timeout=5)
    if (r.json()['result'] == 0):
        print(r.json()['msg'])
    else:
        print(r.json()['msg'])
    redirect_url = r.json()['toUrl']
    r = s.get(redirect_url)
    return s

def sign_in(s):
    rand = str(round(time.time() * 1000))
    surl = f'https://api.cloud.189.cn/mkt/userSign.action?rand={rand}&clientType=TELEANDROID&version=8.6.3&model=SM-G930K'
    url = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN&activityId=ACT_SIGNIN'
    url2 = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN_PHOTOS&activityId=ACT_SIGNIN'
    url3 = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_2022_FLDFS_KJ&activityId=ACT_SIGNIN'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G930K Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 Ecloud/8.6.3 Android/22 clientId/355325117317828 clientModel/SM-G930K imsi/460071114317824 clientChannelId/qq proVersion/1.0.6',
        "Referer": "https://m.cloud.189.cn/zhuanti/2016/sign/index.jsp?albumBackupOpened=1",
        "Host": "m.cloud.189.cn",
        "Accept-Encoding": "gzip, deflate",
    }
    response = s.get(surl, headers=headers)
    netdiskBonus = response.json()['netdiskBonus']
    if (response.json()['isSign'] == "false"):
        print(f"未签到,签到获得{netdiskBonus}M空间")
        res1 = f"未签到,签到获得{netdiskBonus}M空间"
    else:
        print(f"已经签到过了,签到获得{netdiskBonus}M空间")
        res1 = f"已经签到过了,签到获得{netdiskBonus}M空间"

    def draw_prize(url, description_prefix):
        response = s.get(url, headers=headers)
        if ("errorCode" in response.text):
            print(response.text)
            return ""
        else:
            description = response.json()['description']
            print(f"{description_prefix}{description}")
            return f"{description_prefix}{description}"

    res2 = draw_prize(url, "抽奖获得")
    res3 = draw_prize(url2, "抽奖获得")
    res4 = draw_prize(url3, "链接3抽奖获得")

    return res1, res2, res3, res4

def send_email_notification(res1, res2, res3, res4):
    msg = MIMEMultipart()
    msg["From"] = email_config["email_address"]
    msg["To"] = email_config["recipient_email"]
    msg["Subject"] = "签到通知"

    body = f"签到结果:\n{res1}\n{res2}{res3}{res4}"
    msg.attach(MIMEText(body, "plain"))

    try:
        server = smtplib.SMTP(email_config["smtp_server"], email_config["smtp_port"])
        server.starttls()
        server.login(email_config["email_address"], email_config["email_password"])
        server.sendmail(email_config["email_address"], email_config["recipient_email"], msg.as_string())
        server.quit()
        print("邮件通知已发送")
    except Exception as e:
        print(f"邮件通知发送失败:{str(e)}")

def main():
    s = login(username, password)
    res1, res2, res3, res4 = sign_in(s)
    send_email_notification(res1, res2, res3, res4)

def lambda_handler(event, context):
    main()

def main_handler(event, context):
    main()

def handler(event, context):
    main()

if __name__ == "__main__":
    main()

让自动化精神帮助你解放双手,享受更多的天翼云盘福利吧!

本文由作者 王大神 原创发布于 大神网的AI博客。

转载请注明作者:王大神

原文出处:自动签到天翼云盘,告别繁琐的手动操作

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年11月5日
下一篇 2023年11月5日

相关推荐

  • 用 Docker 部署的容器处理文件时自动识别新增文件并处理的方法

    在使用 Docker 部署的应用中,经常会遇到需要处理特定目录下文件的情况。然而,当目录里的文件增加时,Docker 容器并不会自动识别这些新增文件,需要手动重启容器才能让处理逻辑生效。这种情况下,我们可以通过一些…

    2024年3月17日
    00
  • BiliBiliTool:你的智能任务管家,轻松实现B站生活全自动化!

    在B站的丰富世界里,有无数的精彩内容等待着你去发现和体验。然而,在繁忙的生活中,你是否常常因为忙碌而错过了重要的B站任务、福利和直播节目?别担心,现在有一个绝佳的解决方案,让你的B站生活更加畅快无忧!那…

    2023年8月27日
    00
  • WeiboBot:基于微博H5 API的机器人框架

    一天,王大神正在研究如何自动化他的社交媒体活动,特别是在微博上。他发现了一款神奇的工具 – WeiboBot,这是一个基于微博H5 API开发的机器人框架,能够让他的机器人更加智能地参与微博互动。今天,我们将深入了解…

    2023年10月10日
    00
  • 创建自动化试卷生成工具:使用Python和OpenPyXL

    你是否曾经需要为学生创建大量的试卷,但又不想手动编写每一份试卷?在这个教程中,我们将使用Python编写一个自动化试卷生成工具,可以根据题库随机生成试卷,并保存为Word文档。无需编程经验,我们将一步步引导你…

    2023年9月13日
    00
  • 玩转 Docker:使用 Terraform 管理容器化应用

    Docker 是一种流行的容器化技术,而 Terraform 则是一种用于自动化管理基础设施的工具。结合使用 Docker 和 Terraform 可以帮助您更加轻松地管理和部署容器化应用。本文将向您介绍如何使用 Terraform 管理 Docker …

    2024年3月17日
    00
  • 如何自动化发送数据库查询结果邮件:简单教程

    数据库查询是许多自由职业者和远程工作者日常工作中的一项重要任务。然而,手动执行这些查询并将结果发送给特定的收件人可能会非常耗时,特别是当这个任务需要定期执行时。为了提高工作效率,我们将学习如何使用Pyt…

    2023年9月24日
    00
  • 让Python成为你的工作助手:工作自动化的终极指南

    你是否曾经感到工作负担沉重,每天都在处理重复性任务,而无法集中精力完成更有价值的工作?如果是的话,那么Python可能会成为你的工作救星。Python是一种强大的编程语言,拥有丰富的库和工具,可以帮助你自动化各…

    2023年9月14日
    00
  • 用深度学习将设计草图转换成HTML和CSS代码

    在计算机科学和人工智能领域的快速发展下,我们见证了各种令人兴奋的技术应用。其中之一是深度学习,它已经改变了我们对图像处理和自然语言处理的认识。本文将介绍一个令人兴奋的项目,该项目使用深度学习将设计草…

    2023年10月7日
    00
  • 如何通过Python自动启动小米电视上的指定APP

    大家好,今天我要和你分享一个有趣的技巧,可以帮助你自动启动小米电视上的指定APP。你是否曾经遇到过小米电视更新后,导致已安装的APP被分类,难以找到的问题?如果是的话,这篇教程将为你提供一种解决方案。 背景…

    2023年9月19日
    00
  • 如何运用AI技术提升远程办公效率

    远程办公,作为一种灵活自由的工作方式,正变得越来越流行。对于像我这样充满热情的自由职业者来说,远程办公为我提供了无限的灵活性,但同时也带来了一些挑战。在这篇文章中,我们将探讨如何运用AI技术来提升远程…

    2023年11月26日
    00

评论列表(19条)

  • asdf
    asdf 2023年11月18日 上午10:31

    出错,
    Traceback (most recent call last):
    File “/root/ty.py”, line 8, in
    import rsa
    ModuleNotFoundError: No module named ‘rsa’

    注释掉第8行,也是出一堆错误

    • 王大神
      王大神 2023年11月18日 上午10:33

      @asdfNo module named ‘rsa’
      安装一下
      pip install rsa

    • 王大神
      王大神 2023年11月18日 上午10:35

      @asdf我看你的脚本目录是/root/ty.py
      如果用root用户运行,要用root用户pip install

    • asdf
      asdf 2023年11月18日 下午1:39

      @王大神安装了模块,还是出错。

      root@OpenWrt:~# python ty.py
      Traceback (most recent call last):
      File “/root/ty.py”, line 204, in
      main()
      File “/root/ty.py”, line 190, in main
      s = login(username, password)
      File “/root/ty.py”, line 99, in login
      captchaToken = re.findall(r”captchaToken’ value='(.+?)'”, r.text)[0]
      IndexError: list index out of range

    • 王大神
      王大神 2023年11月18日 下午3:19

      @asdfcaptchaTokens = re.findall(r”captchaToken’ value='(.+?)'”, r.text)
      if captchaTokens:
      captchaToken = captchaTokens[0]
      else:
      print(“未找到captchaToken字段”😉
      # 可以添加适当的处理代码

    • felix
      felix 2023年11月19日 上午1:56

      @王大神我也遇到同样错误,captchaToken、lt这些都没获取到,后续接口请求应该走不通了吧。
      我把r.text答应出来是乱码。
      大佬你那边是能跑的吗

    • 王大神
      王大神 2023年11月19日 上午9:25

      @felix我自己测试了,没什么问题,你的python版本,运行环境是linux还是windows?

    • felix
      felix 2023年11月19日 上午10:34

      @王大神我Linux和Windows都试了,一样的报错。windows python 版本3.12,Linux python版本3.10

    • felix
      felix 2023年11月19日 上午10:35

      @王大神是不是最近云盘的系统更新了?你现在还能运行吗?

    • 王大神
      王大神 2023年11月19日 上午10:38

      @felix正常运行。刚还自动签到了。

    • felix
      felix 2023年11月19日 上午10:58

      @王大神找到原因了:这行代码pattern = r”]*href=\”([^\”]+)\”” ,匹配到的链接是一个图片,所以输出乱码。
      应该换成pattern =r”]*href=\”([^\”]+)\””才能匹配到目标url

    • felix
      felix 2023年11月19日 上午11:03

      @王大神改成这个pattern =r”]*href=\”([^\”]+)\””

    • felix
      felix 2023年11月19日 上午11:04
    • 王大神
      王大神 2023年11月19日 上午11:07

      @felix是的,markdown格式化之后被吃掉了。

    • 王大神
      王大神 2023年11月19日 上午11:08

      @felix以后代码放到网盘里。

    • 王大神
      王大神 2023年11月19日 上午11:08

      @felix感谢指正

    • felix
      felix 2023年11月19日 上午11:10

      @王大神pattern =r”《a id=\”j-tab-login-link\”[^》]*href=\”([^\”]+)\””
      中文尖括号替换成英文的

    • 王大神
      王大神 2023年11月19日 上午11:25

      @felix代码高亮的问题。换了很多插件都这样显示。回头改代码了。