批量将DNSPOD域名导入到DNS(厦门帝恩思)
小生博客:http://xsboke.blog.51cto.com
-------谢谢您的参考,如有疑问,欢迎交流
将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 Workbookimport 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)
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。