本文目录导读:

要用脚本自动提醒域名续费,通常的做法是:通过 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 服务(零代码)
如果你不想写代码,可以直接使用现成的监控服务:
- UptimeRobot:免费版支持监控域名到期,会发邮件提醒。
- Domain Health Check:Google Domains 等自带提醒功能。
- 自定义 GitHub Actions(适合程序员):在 GitHub 上定期执行上述脚本,免费且可做持久化记录。
自动化执行(定时任务)
写好的脚本需要定时运行:
Linux(Crontab):
# 每天早上9点执行一次 0 9 * * * /usr/bin/python3 /home/user/domain_check.py >> /var/log/domain_check.log 2>&1
Windows(任务计划程序):
- 打开“任务计划程序”。
- 创建基本任务,设置触发器为每天。
- 操作选择“启动程序”,程序选
python.exe,参数填脚本路径。
总结推荐
- 个人/小公司:用方案一 + 企业微信机器人(免费)即可,5分钟搞定。
- 不想写代码:用 UptimeRobot 或购买域名时开启自动续费 + 注册商邮件提醒。
- 生产环境:建议采用方案一,并添加错误重试和日志告警。
如果你提供具体的云厂商(阿里云、腾讯云、AWS等),我可以给出更精确的 API 调用代码。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播