码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 青龙脚本分享(不断更新完善)


    目录

    • 开篇
    • 详细的使用教程可以往下看其他签到脚本
    • 青龙京东脚本分享
      • 6dylan6(集合库)【√可用】
      • gys619(集合库)【√可用】
      • fake2助力池版(集合库)【√可用】
      • Faker3 纯净版【√可用】
      • Akali5【√可用】
      • KingRan 【√可用】
      • zero205【√可用】
      • smiek2121【√可用】
      • curtinlv【√可用】
    • 青龙其他签到脚本
      • 准备工作
        • 新建脚本
        • 消息通知pushplus
        • 设置环境变量
        • 安装依赖
        • 定时任务
        • 定时规则
      • 阿里云签到(只签到不领取奖励)
      • 阿里云盘签到(js文件,有时候不推送消息bug,但是领取奖励)
      • bilbil签到
        • 1. 步骤
          • 1.1. 登录青龙面板并修改配置
          • 1.2. 在青龙面板中添加拉库定时任务
          • 1.2.1. 订阅管理
          • 1.2.2. 定时任务拉库
          • 1.3. 登录
          • PushPlus的Token,参考[pushplus的官网](http://www.pushplus.plus/doc/)
          • PushPlus的Topic,参考[pushplus的官网](http://www.pushplus.plus/doc/)
      • 天翼云盘签到(不需要环境变量版)
      • 天翼云盘签到(修改版,环境变量版)
      • 什么值得买签到
        • 脚本内容
        • 青龙拉库脚本
        • NodeJS 依赖
        • 抓包
        • 青龙环境变量
      • 恩山签到
      • 每日天气提醒
      • 下一个节假日
      • 每天60s
      • 小米社区签到
        • 代码
      • epic消息提醒
      • 欢迎大家投稿

    开篇

    当你们打开这篇文章的时候,大概率是已经配置好环境了,如果没有配置好青龙环境,看我之前的文章,安装docker、青龙和青龙卸载更新,lxc安装docker青龙,安装ubuntu-server系统等。

    详细的使用教程可以往下看其他签到脚本

    青龙京东脚本分享

    脚本库-Hi科技玩家

    6dylan6(集合库)【√可用】

    github地址


    拉库指令
    国内机用下面指令(带代理):

    ql repo https://js.nbplay.site/https://github.com/6dylan6/jdpro.git "jd_|jx_|jddj_" "backUp" "^jd[^_]|USER|JD|function|sendNotify"
    
    • 1

    国外机(无需代理)用下面指令:

    ql repo https://github.com/6dylan6/jdpro.git "jd_|jx_|jddj_" "backUp" "^jd[^_]|USER|JD|function|sendNotify"
    
    • 1

    使用流程

    1、青龙部署。
    2、登录青龙配置管理config.sh修改,差不多在17行(特别注意,没有修改此配置,任务拉不全,一键部署可忽略此处);
    RepoFileExtensions="js py"修改为 RepoFileExtensions=“js py sh ts” 保存;
    3、新建拉库任务或订阅,并执行,刷新浏览器即可看到添加的任务;
    4、添加CK环境变量,多CK不要写在一起,每个都新建JD_COOKIE变量;
    5,通知key变量请添加到配置管理config.sh文件,否则收不到通知;


    支持的通知方式

    server酱,go-cqhttp,pushdeer,Bark App,tg bot,钉钉bot,企业微信bot,企业微信应用消息,飞书,iGot,push plus,WxPusher,gotify
    请在配置管理config文件里写变量

    gys619(集合库)【√可用】

    github地址
    评价:脚本很多,但是好多失效脚本


    拉库指令

    ql repo https://github.com/gys619/Absinthe.git “jd_|jx_|jddj_|gua_|jddj_|getJDCookie|wskey” “activity|backUp” “^jd[^_]|USER|utils|ZooFaker|JDJRValidator_|^sign|jddj_cookie|function|ql” “main”
    
    • 1

    fake2助力池版(集合库)【√可用】

    github地址


    拉库指令

    ql repo https://github.com/shufflewzc/faker2.git “jd_|jx_|gua_|jddj_|jdCookie” “activity|backUp” “^jd[^_]|USER|function|utils|sendNotify|ZooFaker_Necklace.js|JDJRValidator_|sign_graphics_validate|ql|JDSignValidator” “main”
    
    • 1

    助力池版
    日常任务带有助力池,助力池助力量充足,相互助力。

    Faker3 纯净版【√可用】

    github地址


    拉库指令

    ql repo https://github.com/shufflewzc/faker3.git “jd_|jx_|gua_|jddj_|jdCookie” “activity|backUp” “^jd[^_]|USER|function|utils|sendNotify|ZooFaker_Necklace.js|JDJRValidator_|sign_graphics_validate|ql|JDSignValidator” “main”
    
    • 1

    纯净版
    无任何自带助力码。

    Akali5【√可用】

    github地址


    拉库指令

    ql repo https://github.com/Akali5/jd-depot.git "jd_|jx_|jddj_|gua_|getJDCookie|wskey" "activity|backUp" "^jd[^_]|USER|utils|ZooFaker_Necklace|JDJRValidator_|sign_graphics_validate|jddj_cookie|function|ql|magic|JDJR|sendNotify|depend|h5|jdspider"
    
    • 1

    KingRan 【√可用】

    github地址


    拉库指令

    ql repo https://github.com/KingRan/KR.git "jd_|jx_|jdCookie" "activity|backUp" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"
    
    • 1

    zero205【√可用】

    smiek2121【√可用】

    github地址

    curtinlv【√可用】

    github地址


    青龙其他签到脚本

    准备工作

    新建脚本

    签到脚本的使用教程:
    可以在青龙脚本下面新建新的文件夹
    在这里插入图片描述

    消息通知pushplus

    copy一个notify.py,主要用于pushplus推送消息用

    设置环境变量

    脚本需要的环境变量,在环境变量里面设置
    在这里插入图片描述

    安装依赖

    重点:确保import 的库依赖已经安装,否则会报错,没有安装去依赖里面安装即可

    定时任务

    在这里插入图片描述
    命令必须task开头 后面跟着是现金脚本的路径

    定时规则

    在线Cron表达式生成器
    讲解【csdn】

    阿里云签到(只签到不领取奖励)

    大概一个多月就得重新更新一次token,会显示签到失败

    #!/usr/bin/python3
    # -- coding: utf-8 --
    # @Time : 2023/4/8 10:23
    # -------------------------------
    # cron "30 5 * * *" script-path=xxx.py,tag=匹配cron用
    # const $ = new Env('阿里云盘签到');
    
    import json
    import  requests
    import  os
    import notify
    
    ##变量export ali_refresh_token=''
    ali_refresh_token=os.getenv("ali_refresh_token").split('&')
    #refresh_token是一成不变的呢,我们使用它来更新签到需要的access_token
    #refresh_token获取教程:https://github.com/bighammer-link/Common-scripts/wiki/%E9%98%BF%E9%87%8C%E4%BA%91%E7%9B%98refresh_token%E8%8E%B7%E5%8F%96%E6%96%B9%E6%B3%95
    # ali_refresh_token = os.getenv("ali_refresh_token")
    
    
    
    
    #签到函数
    for i in range(len(ali_refresh_token)):
        print(f'开始帐号{i+1}签到')
        def daily_check(access_token):
            url = 'https://member.aliyundrive.com/v1/activity/sign_in_list'
            headers = {
                'Authorization': access_token
            }
            response = requests.post(url=url, headers=headers, json={}).text
            result = json.loads(response)
            if 'success' in result:
                print('签到成功')
                for i, j in enumerate(result['result']['signInLogs']):
                    if j['status'] == 'miss':
                        day_json = result['result']['signInLogs'][i-1]
                        # print(day_json)
                        if not day_json['isReward']:
                            contents = '签到成功,今日未获得奖励'
                        else:
                            contents = '本月累计签到{}天,今日签到获得{}{}'.format(result['result']['signInCount'],
                                                                             day_json['reward']['name'],
                                                                             day_json['reward']['description'])
                        print(contents)
    
                        return contents
    
    
        # 使用refresh_token更新access_token
        def update_token(refresh_token):
            url = 'https://auth.aliyundrive.com/v2/account/token'
            data = {
                'grant_type': 'refresh_token',
                'refresh_token': ali_refresh_token[i]
            }
            response = requests.post(url=url, json=data).json()
            access_token = response['access_token']
    #         print('获取的access_token为{}'.format(access_token))
            return access_token
    
    
        def main():
    #         print('更新access_token')
            access_token = update_token(ali_refresh_token)
    #         print('更新成功,开始进行签到')
            content = daily_check(access_token)
            notify.send("阿里云盘签到", content)
    
        if __name__ == '__main__':
            main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    在环境变量里面设置ali_refresh_toke

    获取阿里云盘的ali_refresh_toke教程:
    方法一:

    网页登录阿里云盘,键盘F12,刷新一下网页,然后找到如下:
    在这里插入图片描述

    方法二
    F12下找到控制台,输入命令,弹窗显示refresh_token

    alert(JSON.parse(localStorage.token).refresh_token)
    
    • 1

    在这里插入图片描述

    阿里云盘签到(js文件,有时候不推送消息bug,但是领取奖励)

    采用订阅的方式,订阅地址如下:

    https://github.com/mrabit/aliyundriveDailyCheck.git
    
    • 1

    bilbil签到

    采用的是BiliBiliToolPro,来源github

    1. 步骤

    1.1. 登录青龙面板并修改配置

    青龙面板,配置文件页。

    修改 RepoFileExtensions=“js py” 为 RepoFileExtensions=“js py sh”

    保存配置。

    1.2. 在青龙面板中添加拉库定时任务

    两种方式:

    1.2.1. 订阅管理

    名称:Bilibili
    类型:公开仓库
    链接:https://github.com/RayWangQvQ/BiliBiliToolPro.git
    定时类型:crontab
    定时规则:2 2 28 * *
    白名单:bili_task_.+.sh
    文件后缀:sh
    没提到的不要动。

    保存后,点击运行按钮,运行拉库。

    1.2.2. 定时任务拉库

    青龙面板,定时任务页,右上角添加任务,填入以下信息:

    名称:拉取Bili库
    命令:ql repo https://github.com/RayWangQvQ/BiliBiliToolPro.git “bili_task_”
    定时规则:2 2 28 * *
    点击确定。

    保存成功后,找到该定时任务,点击运行按钮,运行拉库。

    如果正常,拉库成功后,同时也会自动添加bilibili相关的task任务。

    1.3. 登录

    在青龙定时任务中,点击运行bili扫码登录任务,查看运行日志,扫描日志中的二维码进行登录。
    登录成功后,会将cookie保存到青龙的环境变量中:

    首次运行会自动安装dotnet环境,时间久点,之后就不需要重复安装了。

    说明,采用的方式为订阅,会每天自动拉取脚本,第一次运行会比较慢,等待即可。需要配置通知,默认不发送通知

    这里讲解配置pushplus的方式,如果采用其他推送方式可以自行查阅文档地址,或者找我一起学习。

    PushPlus的Token,参考pushplus的官网
    TITLECONTENT
    配置KeySerilog:WriteTo:9:Args:token
    值域一串字符串
    默认值空
    环境变量Ray_Serilog__WriteTo__9__Args__token
    GitHub SecretsPUSHPLUSTOKEN
    PushPlus的Topic,参考pushplus的官网
    TITLECONTENT
    配置KeySerilog:WriteTo:9:Args:topic
    值域一串字符串
    默认值空
    环境变量Ray_Serilog__WriteTo__9__Args__topic
    GitHub SecretsPUSHPLUSTOPIC

    一般来说,这两个配置就够用了,如果需要更详细的配置,可以自行查阅文档。

    在这里插入图片描述
    配置完成的截图如上。

    天翼云盘签到(不需要环境变量版)

    # 来自吾爱论坛,在原作者的基础上把推送消息换成了青龙自带的通知,如有侵权请告知,将立即删除。
    # @author Sten
    # 我的仓库:https://github.com/aefa6/QinglongScript.git
    # 觉得不错麻烦点个star谢谢
    import notify
    import time
    import re
    import json
    import base64
    import hashlib
    import urllib.parse,hmac
    import rsa
    import requests
    import random
     
    BI_RM = list("0123456789abcdefghijklmnopqrstuvwxyz")
     
    B64MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
     
    s = requests.Session()
     
    # 在下面两行的引号内贴上账号(仅支持手机号)和密码
    username = "xxxxxx"
    password = "xxxxxx"
     
    _ = """
    if(username == "" or password == ""):
        username = input("账号:")
        password = input("密码:")
    # """
     
    assert username and password, "在第23、24行填入有效账号和密码"
    
    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 0 == e:
                    e = 1
                    d += int2char(v >> 2)
                    c = 3 & v
                elif 1 == e:
                    e = 2
                    d += int2char(c << 2 | v >> 4)
                    c = 15 & v
                elif 2 == e:
                    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):
        #https://m.cloud.189.cn/login2014.jsp?redirectURL=https://m.cloud.189.cn/zhuanti/2021/shakeLottery/index.html
        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'\"]+"  # 匹配以http或https开头的url
        match = re.search(pattern, r.text)  # 在文本中搜索匹配
        if match:  # 如果找到匹配
            url = match.group()  # 获取匹配的字符串
            # print(url)  # 打印url
        else:  # 如果没有找到匹配
            print("没有找到url")
     
        r = s.get(url)
        # print(r.text)
        pattern = r"]*href=\"([^\"]+)\""  # 匹配id为j-tab-login-link的a标签,并捕获href引号内的内容
        match = re.search(pattern, r.text)  # 在文本中搜索匹配
        if match:  # 如果找到匹配
            href = match.group(1)  # 获取捕获的内容
            # print("href:" + href)  # 打印href链接
        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 main():
        s=login(username, password)
        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空间"
     
        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(url, headers=headers)
        if ("errorCode" in response.text):
            print(response.text)
            res2 = ""
        else:
            description = response.json()['description']
            print(f"抽奖获得{description}")
            res2 = f"抽奖获得{description}"
        response = s.get(url2, headers=headers)
        if ("errorCode" in response.text):
            print(response.text)
            res3 = ""
        else:
            description = response.json()['description']
            print(f"抽奖获得{description}")
            res3 = f"抽奖获得{description}"
     
        response = s.get(url3, headers=headers)
        if ("errorCode" in response.text):
            print(response.text)
            res4 = ""
        else:
            description = response.json()['description']
            print(f"链接3抽奖获得{description}")
            res4 = f"链接3抽奖获得{description}"
    
        title = "天翼云签到"
        content = f"""
        {res1}
        {res2}
        {res3}
        {res4}
        """
        notify.send(title, content)
    
    def lambda_handler(event, context):  # aws default
        main()
     
     
    def main_handler(event, context):  # tencent default
        main()
     
     
    def handler(event, context):  # aliyun default
        main()
     
     
    if __name__ == "__main__":
        # time.sleep(random.randint(5, 30))
        main()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216

    天翼云盘签到(修改版,环境变量版)

    # 来自吾爱论坛,在原作者的基础上把推送消息换成了青龙自带的通知,如有侵权请告知,将立即删除。
    # @author Sten
    # 我的仓库:https://github.com/aefa6/QinglongScript.git
    # 觉得不错麻烦点个star谢谢
    import notify
    import time
    import re
    import json
    import base64
    import hashlib
    import urllib.parse,hmac
    import rsa
    import requests
    import random
    import os
     
    BI_RM = list("0123456789abcdefghijklmnopqrstuvwxyz")
     
    B64MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
     
    s = requests.Session()
     
    # 在下面两行的引号内贴上账号(仅支持手机号)和密码
    # username = "15612510963"
    # password = "Gao15227020648an"
    username  = os.getenv("cloud189_username")
    password = os.getenv("cloud189_password")
     
    _ = """
    if(username == "" or password == ""):
        username = input("账号:")
        password = input("密码:")
    # """
     
    assert username and password, "在第23、24行填入有效账号和密码"
    
    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 0 == e:
                    e = 1
                    d += int2char(v >> 2)
                    c = 3 & v
                elif 1 == e:
                    e = 2
                    d += int2char(c << 2 | v >> 4)
                    c = 15 & v
                elif 2 == e:
                    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):
        #https://m.cloud.189.cn/login2014.jsp?redirectURL=https://m.cloud.189.cn/zhuanti/2021/shakeLottery/index.html
        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'\"]+"  # 匹配以http或https开头的url
        match = re.search(pattern, r.text)  # 在文本中搜索匹配
        if match:  # 如果找到匹配
            url = match.group()  # 获取匹配的字符串
            # print(url)  # 打印url
        else:  # 如果没有找到匹配
            print("没有找到url")
     
        r = s.get(url)
        # print(r.text)
        pattern = r"]*href=\"([^\"]+)\""  # 匹配id为j-tab-login-link的a标签,并捕获href引号内的内容
        match = re.search(pattern, r.text)  # 在文本中搜索匹配
        if match:  # 如果找到匹配
            href = match.group(1)  # 获取捕获的内容
            # print("href:" + href)  # 打印href链接
        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 main():
        s=login(username, password)
        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空间"
     
        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(url, headers=headers)
        if ("errorCode" in response.text):
            print(response.text)
            res2 = ""
        else:
            description = response.json()['description']
            print(f"抽奖获得{description}")
            res2 = f"抽奖获得{description}"
        response = s.get(url2, headers=headers)
        if ("errorCode" in response.text):
            print(response.text)
            res3 = ""
        else:
            description = response.json()['description']
            print(f"抽奖获得{description}")
            res3 = f"抽奖获得{description}"
     
        response = s.get(url3, headers=headers)
        if ("errorCode" in response.text):
            print(response.text)
            res4 = ""
        else:
            description = response.json()['description']
            print(f"链接3抽奖获得{description}")
            res4 = f"链接3抽奖获得{description}"
    
        title = "天翼云签到"
        content = f"""
        {res1}
        {res2}
        {res3}
        {res4}
        """
        notify.send(title, content)
    
    def lambda_handler(event, context):  # aws default
        main()
     
     
    def main_handler(event, context):  # tencent default
        main()
     
     
    def handler(event, context):  # aliyun default
        main()
     
     
    if __name__ == "__main__":
        # time.sleep(random.randint(5, 30))
        main()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219

    什么值得买签到

    脚本内容

    每日签到
    每日抽奖
    生活频道转盘抽奖
    值会员转盘抽奖
    每日任务(指的是签到页面中的任务)
    浏览文章
    收藏文章
    点赞文章
    评论文章
    分享
    抽奖
    免费抽奖
    5 碎银子抽奖
    关注用户
    关注栏目
    关注品牌
    限时累计活动

    青龙拉库脚本

    ql repo https://github.com/hex-ci/smzdm_script.git "" "env.js|bot.js|sendNotify.js" "env.js|bot.js|sendNotify.js"
    
    • 1

    NodeJS 依赖

    crypto-js

    抓包

    建议使用 Android 手机抓包(iOS 也可以)域名为 user-api.smzdm.com 的任意链接,把所有 Cookie 取出来放到青龙面板的 SMZDM_COOKIE 环境变量中,多用户请添加多个同名环境变量或者用 & 符号分隔。
    如果手机实在抓不到,也可以用浏览器的 Cookie,但是强烈建议使用手机端的 Cookie。
    抓包教程
    以下教程请大家自行尝试,本人没有亲自尝试,如有问题可以进群交流。
    https://www.jianshu.com/p/5e5524868442
    https://www.zqh.plus/2022/03/19/Android-Capture/
    https://jishuin.proginn.com/p/763bfbd5f92e
    https://juejin.cn/post/7091524392005566471
    https://www.caq98i.top/article/?page=38

    青龙环境变量

    环境变量请使用环境变量列表直接添加,不要使用 export xxx=""这种方式添加环境变量。

    SMZDM_COOKIE: 抓包抓到的 Cookie 内容,需要所有 Cookie 内容,多用户可以用 & 分隔,或者使用多个同名环境变量。
    SMZDM_SK: 这个值是可选值,会自动计算,如果你一定想用自己的,可以抓取,是从安卓 App 的 https://user-api.smzdm.com/checkin 请求参数中抓包抓到的,多用户可以用 & 分隔,或者使用多个同名环境变量,顺序要保持与 SMZDM_COOKIE 多用户顺序一致。
    SMZDM_USER_AGENT_APP: 这个值是可选值,是指 APP 的 User-Agent,从 APP 的 API 请求头中抓包得到,建议抓取 Android 的 User-Agent,不填使用脚本默认值。
    SMZDM_USER_AGENT_WEB: 这个值是可选值,是指 APP 中访问网页的 User-Agent,一般在 APP 内的转盘网页中抓包得到,建议抓取 Android 的 User-Agent,不填使用脚本默认值。
    SMZDM_COMMENT: 如果要完成评论文章的任务请设置这个环境变量,环境变量的内容是评论的文案,文案要大于 10 个汉字,建议用比较个性化的文案,脚本发布评论后会删除这条评论,但是为防止删除失败的情况,请尽量用好一点的文案,防止被判定为恶意灌水。
    SMZDM_CROWD_SILVER_5: 每日抽奖任务默认只进行免费抽奖,如要进行 5 碎银子的抽奖,请设置这个环境变量的值为 yes。
    SMZDM_CROWD_KEYWORD: 抽奖关键词,执行非免费抽奖时,会优先选择包含此关键词的抽奖,如果未找到包含此关键词的抽奖,则会随机选择一个。

    恩山签到

    #!/usr/bin/python3
    # -- coding: utf-8 -- 
    # const $ = new Env('恩山签到')
    import requests,re,os
    import notify
    
    #配置恩山的cookie 到配置文件config.sh export enshanck='' 需要推送配置推送加token export plustoken=''
    enshanck = os.getenv("enshanck")
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36",
        "Cookie": enshanck,
    }
    session = requests.session()
    response = session.get('https://www.right.com.cn/FORUM/home.php?mod=spacecp&ac=credit&showcredit=1', headers=headers)
    try:
        coin = re.findall("恩山币: (.*?)nb  ", response.text)[0]
        point = re.findall("积分: (.*?), response.text)[0]
        res = f"恩山币:{coin}\n积分:{point}"
        print(res)
        notify.send("恩山签到", res)
    except Exception as e:
        res = str(e)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    说明:配置恩山的环境变量,enshanck,把获取到的cookies全部复制。

    每日天气提醒

    #!/usr/bin/python3
    # -- coding: utf-8 --
    # -------------------------------
    # @Author : github@wd210010 https://github.com/wd210010/just_for_happy
    # @Time : 2023/2/27 13:23
    # -------------------------------
    # cron "30 7 * * *" script-path=xxx.py,tag=匹配cron用
    # const $ = new Env('天气推送')
    
    import requests, json ,os,notify
    
    # 城市code 自己城市的code https://fastly.jsdelivr.net/gh/Oreomeow/checkinpanel@master/city.json 这个网址查看
    # city_code = ''
    
    # 青龙变量 city_code
    city_code = os.getenv("city_code")
    
    
    r = requests.get(
        f"http://t.weather.itboy.net/api/weather/city/{city_code}"
    )
    d = json.loads(r.text)
    result2 = json.loads(r.text)['cityInfo']
    
    msg = (
        f' 城市:{d["cityInfo"]["parent"]} {d["cityInfo"]["city"]}\n'
        f' 日期:{d["data"]["forecast"][0]["ymd"]} {d["data"]["forecast"][0]["week"]}\n'
        f' 天气:{d["data"]["forecast"][0]["type"]}\n'
        f' 温度:{d["data"]["forecast"][0]["high"]} {d["data"]["forecast"][0]["low"]}\n'
        f' 湿度:{d["data"]["shidu"]}\n'
        f' 空气质量:{d["data"]["quality"]}\n'
        f' PM2.5:{d["data"]["pm25"]}\n'
        f' PM10:{d["data"]["pm10"]}\n'
        f' 风力风向 {d["data"]["forecast"][0]["fx"]} {d["data"]["forecast"][0]["fl"]}\n'
        f' 感冒指数:{d["data"]["ganmao"]}\n'
        f' 温馨提示:{d["data"]["forecast"][0]["notice"]}\n'
        f' 更新时间:{d["time"]}'
    )
    
    
    w_list = []
    for i in range(7):
        list = [
            d['data']['forecast'][i]['ymd'],
            d['data']['forecast'][i]['week'],
            d['data']['forecast'][i]['type'],
            d['data']['forecast'][i]['low'],
            d['data']['forecast'][i]['high'],
            d['data']['forecast'][i]['notice']
        ]
        w_list.append(list)
    seven_days_weather = str(w_list).replace('], [','\n').replace(', ','').replace('[','').replace(']','').replace('\'',' ')
    msg_total = (msg + '\n\n'+ seven_days_weather)
    print(msg_total)
    notify.send("保定天气", msg_total)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    说明需要配置环境变量cityInfo,查看自己城市代码地址

    下一个节假日

    # @author Sten
    # 作者仓库:https://github.com/aefa6/QinglongScript.git
    # 觉得不错麻烦点个star谢谢
    
    import requests
    import json
    import notify
    
    title = "下个节假日" 
    
    dateurl = 'https://date.appworlds.cn/next'
    date1url = 'https://date.appworlds.cn/next/days'
    holiday = requests.get(dateurl)
    holiday1 = requests.get(date1url)
    
    desc = json.loads(holiday.text)
    desc1 = json.loads(holiday1.text)
    
    daytime = desc['data']['date']
    dayname = desc['data']['name']
    Remain = desc1['data']
    
    info = f"""
    下个节假日是{Remain}天后的{dayname}({daytime})
    """
    print(info)
    notify.send(title, info)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    每天60s

    # @author Sten
    # 作者仓库:https://github.com/aefa6/QinglongScript.git
    # 觉得不错麻烦点个star谢谢
    # 使用青龙自带的通知
    import requests
    import json
    import notify
    
    url = 'https://60s.viki.moe/?encoding=text'
    resp = requests.get(url)
    
    # 分片处理
    pieces = resp.text.split('\n', 8)
    content1 = '\n'.join(pieces[:8])  
    content2 = '\n'.join(pieces[8:])
    
    info1 = f"""
    {content1}   
    """
    info2 = f"""
    {content2}   
    """
    
    # 发送分片推送  
    notify.send("每天60s读懂世界", info1 + "\n\n")
    notify.send("每天60s读懂世界", info2)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    小米社区签到

    github地址
    截止到2023.11.12,问题出现:人机校验失败
    在这里插入图片描述
    在这里插入图片描述
    问题等待大佬解决中。。。
    2023.11.14问题解决,这就是效率!!!
    在这里插入图片描述

    代码

    在这里插入图片描述
    打开requirement.txt文件,按照里面的需求安装对应的依赖。

    requests>=2.25.1
    python-dotenv>=0.19.2
    PyYAML>=6.0
    onepush

    文件只需要utils包、config.yml、miuitask.py下载
    查看代码默认的推行方式好像是onepush,如果想更改为pushplus,进行如下的代码修改:

    1. 复制一个notify.py文件到最外面文件,即跟utils在同一个包下。【这个只要用来消息提醒的】
    2. import notify在untils.py中引入
    3. 代码修改:在这里插入图片描述
      在这里插入图片描述
      去掉x部分,然后添加代码notify.send(“标题”,content)

    epic消息提醒

    暂时只找到epic的每周消息提醒,没找到自动签到领取,需要手动进行领取。
    github地址
    只需要下载mian.py即可

    import json
    import requests
    from datetime import datetime
    
    
    def get_free_games() -> dict:
        timestamp = datetime.timestamp(datetime.now())
        games = {'timestamp': timestamp, 'free_now': [], 'free_next': []}
        base_store_url = 'https://store.epicgames.com'
        api_url = 'https://store-site-backend-static.ak.epicgames.com/freeGamesPromotions?country=CN'
        resp = requests.get(api_url)
        for element in resp.json()['data']['Catalog']['searchStore']['elements']:
            if promotions := element['promotions']:
                game = {}
                game['title'] = element['title']
                game['images'] = element['keyImages']
                game['origin_price'] = element['price']['totalPrice']['fmtPrice']['originalPrice']
                game['discount_price'] = element['price']['totalPrice']['fmtPrice']['discountPrice']
                game['store_url'] = f"{base_store_url}/p/{element['catalogNs']['mappings'][0]['pageSlug']}" if element['catalogNs']['mappings'] else base_store_url
                if offers := promotions['promotionalOffers']:
                    game['start_date'] = offers[0]['promotionalOffers'][0]['startDate']
                    game['end_date'] = offers[0]['promotionalOffers'][0]['endDate']
                    games['free_now'].append(game)
                if offers := promotions['upcomingPromotionalOffers']:
                    game['start_date'] = offers[0]['promotionalOffers'][0]['startDate']
                    game['end_date'] = offers[0]['promotionalOffers'][0]['endDate']
                    games['free_next'].append(game)
        return games
    
    
    def generate_json(games: dict, filename: str):
        with open(filename, 'w') as f:
            json.dump(games, f)
            # json.dump(obj=games, fp=f, ensure_ascii=False, indent=4)
    
    
    def generate_markdown(games: dict, filename: str):
        images = {}
        data = games['free_now'] + games['free_next']
        for game in data:
            for image in game['images']:
                if image['type'] in ['OfferImageWide', 'VaultClosed']:
                    images[game['title']] = image['url']
                    break
    
        content = '''# Epic 每周限免
    
    - ## 本周限免
    
    '''
    
        for game in games['free_now']:
            content += f'''
      - ### [{game['title']}]({game['store_url']} "{game['title']}")
    
        原价: {game['origin_price']}
    
        购买链接: [{game['store_url']}]({game['store_url']} "{game['title']}")
    
        ![{game['title']}]({images[game['title']]})
    
    '''
    
        content += f'''
    - ## 下周限免
    
    '''
    
        for game in games['free_next']:
            content += f'''
      - ### [{game['title']}]({game['store_url']} "{game['title']}")
    
        原价: {game['origin_price']}
    
        购买链接: [{game['store_url']}]({game['store_url']} "{game['title']}")
    
        ![{game['title']}]({images[game['title']]})
    
    '''
    
        with open(filename, 'w') as f:
            f.write(content)
    
    
    if __name__ == '__main__':
        games = get_free_games()
        generate_json(games, './epic_free_games.json')
        generate_markdown(games, './README.md')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88

    代码优化:

    1. import notify引入到main.py中【消息提醒】
    2. 修改代码:最后加上
      file = open(‘help.md’,‘r’,encoding=‘utf-8’).read()
      html = markdown(file)
      notify.send(“标题”,html)

    效果图:
    在这里插入图片描述

    md转html链接【csdn】


    欢迎大家投稿

  • 相关阅读:
    【软考系统架构设计师】2023年系统架构师冲刺模拟习题之《系统工程与信息系统基础》
    QGIS编译(跨平台编译)之四十八:QGIS在Windows(Visual Studio 2019)环境下的错误处理
    SpringBoot+PDF.js实现按需分片加载预览(包含可运行示例源码)
    leetcode 26. 删除有序数组中的重复项(实现unique函数)
    【实用技巧】Latex写算法伪代码(格式篇)
    FPGA刷题——序列检测
    《国际结算》期末试卷及参考答案
    代数、图算法:图基础
    多表操作-子查询
    UniApp中的数据存储与获取指南
  • 原文地址:https://blog.csdn.net/qq_44774198/article/details/133268930
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号