如何用脚本自动提醒域名续费?

wen 实用脚本 2

本文目录导读:

如何用脚本自动提醒域名续费?

  1. 方案一:使用云厂商 API(推荐,最稳定)
  2. 方案二:使用 WHOIS 查询(无需 API 密钥,但不可靠)
  3. 方案三:利用现有 SaaS 服务(零代码)
  4. 自动化执行(定时任务)
  5. 总结推荐

要用脚本自动提醒域名续费,通常的做法是:通过 API 查询域名的到期时间,然后与当前时间比较,如果距离到期日小于设定的阈值(30 天),就通过邮件、钉钉/企业微信机器人或短信发送提醒。

以下是两种主流的实现方案,你可以根据是否使用云厂商来选择:

使用云厂商 API(推荐,最稳定)

如果你在阿里云、腾讯云、AWS 等平台购买的域名,它们都提供了查询域名到期时间的 API。

示例(Python + 阿里云/腾讯云)

准备工作:

  • 安装 SDK:pip install alibabacloud_domain20180129 #阿里云
  • 获取 AccessKey 和 SecretKey(需要授予域名查询权限)。
  • 配置发信邮箱或 Webhook。

脚本代码(以阿里云为例):

import json
import requests
from datetime import datetime, timedelta
from alibabacloud_domain20180129.client import Client
from alibabacloud_domain20180129 import models as domain_models
from alibabacloud_tea_openapi import models as open_api_models
# ---------- 配置区域 ----------
ALIYUN_ACCESS_KEY = "你的AccessKeyId"
ALIYUN_SECRET_KEY = "你的AccessKeySecret"
DOMAIN_LIST = ["example1.com", "example2.net"]  # 要检查的域名列表
DAYS_THRESHOLD = 30  # 提前多少天提醒
# ---------- 通知配置 ----------
NOTIFY_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXXX"  # 企业微信机器人
# 或 SMTP配置
FROM_EMAIL = "your@email.com"
TO_EMAIL = "admin@email.com"
SMTP_PASSWORD = "xxx"
# 1. 初始化阿里云客户端
config = open_api_models.Config(
    access_key_id=ALIYUN_ACCESS_KEY,
    access_key_secret=ALIYUN_SECRET_KEY
)
config.endpoint = 'domain.aliyuncs.com'
client = Client(config)
# 2. 查询域名到期时间(批量)
def check_domains():
    expired_domains = []
    for domain in DOMAIN_LIST:
        req = domain_models.QueryDomainByInstanceIdRequest(instance_id=domain)
        try:
            resp = client.query_domain_by_instance_id(req)
            # 解析返回的expirationDate字段
            expire_date_str = resp.body.expiration_date
            expire_date = datetime.strptime(expire_date_str, "%Y-%m-%dT%H:%M:%SZ")
            days_left = (expire_date - datetime.utcnow()).days
            print(f"{domain} 到期时间: {expire_date_str}, 剩余 {days_left} 天")
            if days_left <= DAYS_THRESHOLD:
                expired_domains.append((domain, days_left))
        except Exception as e:
            print(f"查询 {domain} 失败: {str(e)}")
    return expired_domains
# 3. 发送通知(示例:钉钉/微信群机器人)
def send_notification(domains):
    if not domains:
        print("所有域名均未到期,无需提醒。")
        return
    msg = "## ⚠️ 域名到期提醒\n"
    for domain, days in domains:
        msg += f"- **{domain}**: 还剩 **{days}** 天到期,请及时续费!\n"
    data = {
        "msgtype": "markdown",
        "markdown": {"content": msg}
    }
    requests.post(NOTIFY_URL, json=data)
    print("通知已发送。")
if __name__ == "__main__":
    expired = check_domains()
    send_notification(expired)

注意:

  • 对于腾讯云,API 是 DescribeDomains,需要传入域名列表。
  • 阿里云的 expiration_date 字段可能不包含域名(例如只返回实例ID),建议使用 QueryDomainList 接口批量查询。

使用 WHOIS 查询(无需 API 密钥,但不可靠)

如果你没有云厂商账号,或者域名在不同注册商,可以通过 WHOIS 协议查询。

依赖库: pip install python-whois

import whois
from datetime import datetime
def check_domain(domain):
    try:
        w = whois.whois(domain)
        expire_date = w.expiration_date
        # 有时返回列表
        if isinstance(expire_date, list):
            expire_date = expire_date[0]
        days_left = (expire_date - datetime.now()).days
        return days_left
    except Exception as e:
        print(f"查询 {domain} 失败: {e}")
        return None
# 使用示例
domain = "example.com"
days = check_domain(domain)
if days and days <= 30:
    print(f"{domain} 仅剩 {days} 天到期,请续费!")

缺点:

  • WHOIS 服务可能被屏蔽或限流。
  • 有些域名(如 .cn)需要额外处理格式。
  • 不适合大批量查询。

利用现有 SaaS 服务(零代码)

如果你不想写代码,可以直接使用现成的监控服务:

  1. UptimeRobot:免费版支持监控域名到期,会发邮件提醒。
  2. Domain Health Check:Google Domains 等自带提醒功能。
  3. 自定义 GitHub Actions(适合程序员):在 GitHub 上定期执行上述脚本,免费且可做持久化记录。

自动化执行(定时任务)

写好的脚本需要定时运行:

Linux(Crontab):

# 每天早上9点执行一次
0 9 * * * /usr/bin/python3 /home/user/domain_check.py >> /var/log/domain_check.log 2>&1

Windows(任务计划程序):

  1. 打开“任务计划程序”。
  2. 创建基本任务,设置触发器为每天。
  3. 操作选择“启动程序”,程序选 python.exe,参数填脚本路径。

总结推荐

  • 个人/小公司:用方案一 + 企业微信机器人(免费)即可,5分钟搞定。
  • 不想写代码:用 UptimeRobot 或购买域名时开启自动续费 + 注册商邮件提醒。
  • 生产环境:建议采用方案一,并添加错误重试和日志告警。

如果你提供具体的云厂商(阿里云、腾讯云、AWS等),我可以给出更精确的 API 调用代码。

抱歉,评论功能暂时关闭!