批量將DNSPOD域名匯入到DNS(廈門帝恩思)
阿新 • • 發佈:2018-11-11
小生部落格:http://xsboke.blog.51cto.com
小生 Q Q:1770058260
-------謝謝您的參考,如有疑問,歡迎交流
將DNS供應商DNSPOD(dnspod)的域名匯入到供應商DNS中.
DNS(廈門帝恩思)的API需要付費使用,所以只能使用EXCEL的方式匯入域名.
操作步驟:
- 開啟[域名解析]頁面,然後找到[匯入域名]按鈕.
- 進入[匯入域名]頁面,然後上傳excel即可.
下面是:DNS使用excel匯入域名的提示.
溫馨提示:
1、上傳檔案格式支援xls和xlsx,大小不超過2MB。
2、DNS雲解析會按照預定模板掃描您的檔案,並匯入資料。下載模板
3、每次最多可匯入100個域名,每個最多可以匯入500條解析記錄,超出的部分將不會匯入。
4、不同的域名按照sheet來區分,每個sheet一個域名。
此指令碼是將DNSPOD的域名寫到excel,每個excel最多隻寫入100個域名
from openpyxl import Workbook import requests,time ''' # 建議使用python3.X # 需要安裝 requests和openpyxl庫 DNS使用excel匯入域名時,每次只允許匯入100條, 所以我們使用DNSPOD的OffSet和Length引數, 每次只取100個域名寫入到一個工作薄中,每個域名一個工作表(sheet),工作表的名字就是域名 ''' def Get_Init(Login_Token, OffSet, Length): ''' 需要通過函式Get_Domians來判定OffSet和Length的數值. :param Login_Token: :param OffSet: 記錄開始的偏移, 第一條記錄為 0, 依次類推. :param Length: 要獲取的域名數量, 比如獲取20個, 則為20. :return: ''' Time = time.time() wb = Workbook() FileName = './域名_' + str(Time) + '.xlsx' # 定義工作薄的名稱 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'] sheet_count = 0 # 用來統計當前工作薄中有多少個工作表(sheet) 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 Cur_Sheet = wb.create_sheet(title=Domain_Name) # 建立工作表,並且設定工作表的名字為域名 Headers_List = ['主機','型別','線路','記錄值','MX優先順序','TTL'] # 設定第一行標題 Cur_Sheet.append(Headers_List) # 寫入第一行標題 Cols_Count = len(Headers_List) # 定義列數 Starting_Rows = 2 # 起始行為第二行,因為第一行插入了標題 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'] Record_List = [] ''' [Record_List] 的格式: [ ['@','A','預設','202.1.1.1','',600], ['www','CNAME','預設','cname.baidu.com','',600], ['m','A','預設','202.1.1.1','',600], ] ''' 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 Record_List.append([Record_Name,Record_Type,'預設',Record_Value,'',600]) End_Rows = len(Record_List) + Starting_Rows # 定義結束行 Data_Row = 0 # 列表:[Record_List]的索引,從而迴圈取出每條解析記錄的資訊 for rows in range(Starting_Rows, End_Rows): Rows_Number = rows Index = 0 # 用於取出當前解析記錄的記錄資訊 for Int in range(65, 65 + Cols_Count): Cols_Letter = chr(Int) Cur_Sheet[Cols_Letter + str(Rows_Number)] = Record_List[Data_Row][Index] Index = Index + 1 Data_Row = Data_Row + 1 wb.save(FileName) sheet_count += 1 print(sheet_count) def Get_Domians(Login_Token, Step_Size): ''' :param Login_Token: :param Step_Size: 步長,就是每次獲取域名的數量 :return: ''' 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) # 取整 Remainder = Count % int(Step_Size) # 取餘 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) Dnspod_Token = 'ID,Token_Str' Get_Domians(Login_Token=Dnspod_Token,Step_Size=100)