將DNSPOD域名批量導入到DNSLA
阿新 • • 發佈:2018-11-12
必須 .json gin 步長 blog 批量 代碼 地址 con 小生博客:http://xsboke.blog.51cto.com
小生 Q Q:1770058260
-------謝謝您的參考,如有疑問,歡迎交流
將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)
將DNSPOD域名批量導入到DNSLA