小生博客:http://xsboke.blog.51cto.com
-------谢谢您的参考,如有疑问,欢迎交流
将DNSPOD的域名导入到DNSLADNSLA(郑州帝恩爱斯)
DNSLA(郑州帝恩爱斯)的开发规范:
1、开通API:使用DNSLA-API开发应用,首先需要到个人后台申请开通并设置API的ID和密钥才可以使用。
2、API调用频率:为防止用户大量频繁调用API给系统造成过多压力,我们对调用频率做了限制,每小时不超过300次,每天不超过3000次,如超过此限制,则会分别被暂停调用1小时和24小时。
3、安全传输:在调用API通讯期间,需要发送API账号及密钥,为保障账号安全,必须使用https开头的API地址,以免在通讯中泄露API密钥。
4、关于编码:请使用UTF-8编码格式进行数据传输。
5、API权限锁定:当API调用密码错误超过10次将会锁定该用户的API权限,锁定后不会自动解锁,需要您登录用户后台进行解锁操作。
DNSLA(郑州帝恩爱斯)申请开通API:
申请方式:免费申请。
申请地址:https://www.dns.la/manage/APISet.aspx (需登录)
注意事项:API长期不用时请关闭!
代码:
import requests,time
Token_ID = 'ID,Token_Str' # dnspod 的API
DNSLA_APIID = 'apiid' # DNSLA的apiid
DNSLA_APIKey = 'apipass' # DNSLA的apipass
def Get_Init(Login_Token, OffSet, Length):
'''
需要通过函数Get_Domians来判定OffSet和Length的数值.
:param Login_Token:
:param OffSet: 记录开始的偏移, 第一条记录为 0, 依次类推.
:param Length: 要获取的域名数量, 比如获取20个, 则为20.
:return:
'''
Domain_R = requests.post('https://dnsapi.cn/Domain.List', data={'login_token': Login_Token,
'format': 'json',
'offset': OffSet,
'length': Length})
Domain_Result_Data = Domain_R.json()
Domians_Info = Domain_Result_Data['domains']
Domain_Count = 0
for Domain_Dict in Domians_Info:
Domain_ID = Domain_Dict['id']
Domain_Name = Domain_Dict['name']
Domain_Status = Domain_Dict['status']
Domain_Ext_Status = Domain_Dict['ext_status']
if Domain_Status != 'enable':
'''如果域名没有启用则跳过'''
continue
if Domain_Ext_Status:
'''如果域名无效则跳过'''
continue
# 用来统计添加了多少个域名
Domain_Count += 1
# DNSLA 添加域名
DNSLA_Create_Domains = requests.post('https://api.dns.la/api/domain.ashx',
data={'cmd':'create',
'apiid':DNSLA_APIID,
'apipass':DNSLA_APIKey,
'domain':Domain_Name})
DNSLA_Domain_Recv = DNSLA_Create_Domains.json()
DNSLA_Domain_Data = DNSLA_Domain_Recv['data']
DNSLA_Domain_ID = DNSLA_Domain_Data['domainid']
if DNSLA_Domain_Recv['status']['code'] == 300:
print("添加域名:[%s]成功."%(Domain_Name))
else:
Error_Info = DNSLA_Domain_Recv['status']['name']
print("添加域名:[%s]失败,错误信息:[%s]." % (Domain_Name,Error_Info))
Record_R = requests.post('https://dnsapi.cn/Record.List', data={'login_token': Login_Token,
'format': 'json',
'domain_id': Domain_ID})
Record_Result_Data = Record_R.json()
Record_Info = Record_Result_Data['records']
for Record_Dict in Record_Info:
Record_Name = Record_Dict['name']
Record_Type = Record_Dict['type']
Record_Value = Record_Dict['value']
Record_Status = Record_Dict['enabled'] # 0,禁用 1,启用
if Record_Status == '0':
'''如果记录状态为禁用则跳过'''
continue
if Record_Type == 'NS':
'''如果记录类型为NS则跳过'''
continue
DNSLA_ADD_Record = requests.post('https://api.dns.la/api/record.ashx',
data={'cmd':'create',
'apiid':DNSLA_APIID,
'apipass':DNSLA_APIKey,
'rtype':'json',
'domainid':DNSLA_Domain_ID,
'host':Record_Name,
'recordtype':Record_Type,
'recordline':'Def',
'recorddata':Record_Value,
})
DNSLA_ADD_Record_Recv = DNSLA_ADD_Record.json()
if DNSLA_ADD_Record_Recv['status']['code'] == 300:
print("域名:[%s]添加解析记录:[%s][%s][%s],成功."%(Domain_Name,Record_Name,Record_Type,Record_Value))
else:
Error_Info = DNSLA_ADD_Record_Recv['status']['name']
print("域名:[%s]添加解析记录:[%s][%s][%s],失败,错误信息:[%s]."%(Domain_Name,Record_Name,Record_Type,Record_Value,Error_Info))
print("域名导入完成,共导入[%d]个域名,请验证!"%(Domain_Count))
def Get_Domians(Login_Token, Step_Size):
'''
:param Login_Token:
:param Step_Size: 步长,就是每次获取域名的数量
:return:
:Memo: 本次请求使用了offset和length参数来减少每次请求的数量,用来提升程序的稳定性
'''
Count_R = requests.post('https://dnsapi.cn/Domain.List', data={'login_token': Login_Token,
'format': 'json'})
Count_Result_Data = Count_R.json()
if Count_Result_Data['status']['code'] != '1':
return Count_Result_Data
Count = int(Count_Result_Data['info']['domain_total'])
for OffSet in range(0, Count, Step_Size):
if Count > Step_Size:
Integer = Count // int(Step_Size) # 取整 2
Remainder = Count % int(Step_Size) # 取余 40
else:
# Integer = 0
# Remainder = Count
Get_Init(Login_Token=Login_Token, OffSet=OffSet, Length=Count)
continue
if OffSet != 0 and OffSet == Integer * Step_Size:
Length = Remainder
Get_Init(Login_Token=Login_Token, OffSet=OffSet, Length=Length)
else:
Length = Step_Size
Get_Init(Login_Token=Login_Token, OffSet=OffSet, Length=Length)
break
Dnspod_Token = Token_ID
Get_Domians(Login_Token=Dnspod_Token,Step_Size=100)