本文分享用Python操作DNSPOD域名API的脚本。
#coding: utf-8
import json
import requests
import argparse
import copy
URL_DLIST = "https://dnsapi.cn/Domain.List"
URL_RADD = "https://dnsapi.cn/Record.Create"
URL_RLIST = "https://dnsapi.cn/Record.List"
URL_RUPDATE = "https://dnsapi.cn/Record.Modify"
URL_RDELETE = "https://dnsapi.cn/Record.Remove"
URL_ALLOWTYPE = "https://dnsapi.cn/Record.Type"
TOKEN = "12345,3c2ycyagyqpndvcqw54u1hloyp848psg"
COMMON_DATA = {
"login_token": TOKEN,
"format": "json"
}
PROXIES = {"http": "", "https": ""}
def builddata(d):
pdata = copy.deepcopy(COMMON_DATA)
pdata.update(d)
return pdata
def check(r):
if r.status_code != 200:
print(r.status_code, r.text)
raise
def getallow(domain_grade="DP_Free"):
pdata = builddata({
"domain_grade": domain_grade
})
r = requests.post(URL_ALLOWTYPE, data=pdata, proxies=PROXIES)
check(r)
print("getallow\n" + r.text)
# {"status":{"code":"1","message":"Action completed successful","created_at":"2018-10-24 16:11:42"},"types":["A","CNAME","MX","TXT","NS","AAAA","SRV","显性URL","隐性URL"]}
def getdomains():
pdata = builddata({})
r = requests.post(URL_DLIST, data=pdata, proxies=PROXIES)
check(r)
print(r.text)
def getdomain(domain):
pdata = builddata({
"domain": domain
})
r = requests.post(URL_RLIST, data=pdata, proxies=PROXIES)
check(r)
data = r.json()
records = data["records"]
for record in records:
print("%s\t%s\t%s\t%s\t%s\t%s" % (record["id"], record["type"], record["name"], record["value"], record["ttl"], record["updated_on"]))
return data
def add_record(domain, recordtype, subdomain, value):
pdata = builddata({
"domain": domain,
"subdomain": subdomain,
"recordtype": recordtype,
"value": value
})
r = requests.post(URL_RADD, data=pdata, proxies=PROXIES)
check(r)
data = r.json()
print("add_record\n" + r.text)
return data
def update_record(domain, subdomain, recordtype, value):
data = getdomain(domain)
rid = None
for record in data["records"]:
if record['type'] == recordtype and record["name"] == subdomain:
rid = record["id"]
break
if rid == None:
print("no rid")
return
pdata = builddata({
"domain": domain,
"record_id": rid,
"sub_domain": subdomain,
"record_type": recordtype,
"value": value,
"record_line": u"默认"
})
print(pdata)
r = requests.post(URL_RUPDATE, data=pdata, proxies=PROXIES)
check(r)
data = r.json()
print("update_record\n" + r.text)
return data
def delete_record(domain, rid):
pdata = builddata({
"domain": domain,
"record_id": rid,
})
r = requests.post(URL_RDELETE, data=pdata, proxies=PROXIES)
check(r)
data = r.json()
print("delete_record\n" + r.text)
return data
def update_ssl(domain, value):
update_record(domain, "_acme-challenge", "TXT", value)
def main(args):
if args.mode == "add":
add_record(args.domain, args.subdomain, args.recordtype, args.value)
elif args.mode == "update":
update_record(args.domain, args.subdomain, args.recordtype, args.value)
elif args.mode == "delete":
delete_record(args.domain)
elif args.mode == "list":
getdomain(args.domain)
elif args.mode == "ssl":
update_ssl(args.domain, args.value)
if __name__ == '__main__':
argParser = argparse.ArgumentParser()
argParser.add_argument('-m', '--mode', dest='mode', type=str, help='mode', choices=['add', 'delete', 'update', 'list', 'ssl'])
argParser.add_argument('-t', '--recordtype', dest='recordtype', type=str, help='recordtype', choices=['A', 'CNAME', 'MX', 'TXT'])
argParser.add_argument('-d', '--domain', dest='domain', type=str, help='domain')
argParser.add_argument('-n', '--subdomain', dest='subdomain', type=str, help='subdomain')
argParser.add_argument('-i', '--id', dest='id', type=str, help='id')
argParser.add_argument('-v', '--value', dest='value', type=str, help='value')
args = argParser.parse_args()
main(args)
-- EOF --
本文最后修改于6年前 (2019-06-04)