温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

批量将DNSPOD域名导入到DNS(厦门帝恩思)

发布时间:2020-07-30 11:51:10 来源:网络 阅读:854 作者:小生博客 栏目:编程语言

小生博客:http://xsboke.blog.51cto.com

                    -------谢谢您的参考,如有疑问,欢迎交流

DNS供应商DNSPOD(dnspod)的域名导入到供应商DNS中.
DNS(厦门帝恩思)的API需要付费使用,所以只能使用EXCEL的方式导入域名.

操作步骤:

  1. 打开[域名解析]页面,然后找到[导入域名]按钮.
  2. 进入[导入域名]页面,然后上传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)
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI