溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

批量將DNSPOD域名導(dǎo)入到DNS(廈門(mén)帝恩思)

發(fā)布時(shí)間:2020-07-30 11:51:10 來(lái)源:網(wǎng)絡(luò) 閱讀:864 作者:小生博客 欄目:編程語(yǔ)言

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

                    -------謝謝您的參考,如有疑問(wèn),歡迎交流

DNS供應(yīng)商DNSPOD(dnspod)的域名導(dǎo)入到供應(yīng)商DNS中.
DNS(廈門(mén)帝恩思)的API需要付費(fèi)使用,所以只能使用EXCEL的方式導(dǎo)入域名.

操作步驟:

  1. 打開(kāi)[域名解析]頁(yè)面,然后找到[導(dǎo)入域名]按鈕.
  2. 進(jìn)入[導(dǎo)入域名]頁(yè)面,然后上傳excel即可.

下面是:DNS使用excel導(dǎo)入域名的提示.

溫馨提示:
1、上傳文件格式支持xls和xlsx,大小不超過(guò)2MB。
2、DNS云解析會(huì)按照預(yù)定模板掃描您的文件,并導(dǎo)入數(shù)據(jù)。下載模板
3、每次最多可導(dǎo)入100個(gè)域名,每個(gè)最多可以導(dǎo)入500條解析記錄,超出的部分將不會(huì)導(dǎo)入。
4、不同的域名按照sheet來(lái)區(qū)分,每個(gè)sheet一個(gè)域名。

此腳本是將DNSPOD的域名寫(xiě)到excel,每個(gè)excel最多只寫(xiě)入100個(gè)域名

from openpyxl import Workbook
import requests,time

'''
# 建議使用python3.X
# 需要安裝 requests和openpyxl庫(kù)
DNS使用excel導(dǎo)入域名時(shí),每次只允許導(dǎo)入100條,
所以我們使用DNSPOD的OffSet和Length參數(shù),
每次只取100個(gè)域名寫(xiě)入到一個(gè)工作薄中,每個(gè)域名一個(gè)工作表(sheet),工作表的名字就是域名
'''

def Get_Init(Login_Token, OffSet, Length):
    '''
    需要通過(guò)函數(shù)Get_Domians來(lái)判定OffSet和Length的數(shù)值.
    :param Login_Token:
    :param OffSet:  記錄開(kāi)始的偏移, 第一條記錄為 0, 依次類推.
    :param Length:  要獲取的域名數(shù)量, 比如獲取20個(gè), 則為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 # 用來(lái)統(tǒng)計(jì)當(dāng)前工作薄中有多少個(gè)工作表(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':
            '''如果域名沒(méi)有啟用則跳過(guò)'''
            continue

        if Domain_Ext_Status:
            '''如果域名無(wú)效則跳過(guò)'''
            continue

        Cur_Sheet = wb.create_sheet(title=Domain_Name)  # 創(chuàng)建工作表,并且設(shè)置工作表的名字為域名
        Headers_List = ['主機(jī)','類型','線路','記錄值','MX優(yōu)先級(jí)','TTL'] # 設(shè)置第一行標(biāo)題
        Cur_Sheet.append(Headers_List) #  寫(xiě)入第一行標(biāo)題

        Cols_Count = len(Headers_List)  # 定義列數(shù)
        Starting_Rows = 2  # 起始行為第二行,因?yàn)榈谝恍胁迦肓藰?biāo)題

        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','默認(rèn)','202.1.1.1','',600],
         ['www','CNAME','默認(rèn)','cname.baidu.com','',600],
         ['m','A','默認(rèn)','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':
                '''如果記錄狀態(tài)為禁用則跳過(guò)'''
                continue

            if Record_Type == 'NS':
                '''如果記錄類型為NS則跳過(guò)'''
                continue

            Record_List.append([Record_Name,Record_Type,'默認(rèn)',Record_Value,'',600])

        End_Rows = len(Record_List) + Starting_Rows # 定義結(jié)束行
        Data_Row = 0    # 列表:[Record_List]的索引,從而循環(huán)取出每條解析記錄的信息
        for rows in range(Starting_Rows, End_Rows):
            Rows_Number = rows
            Index = 0   # 用于取出當(dāng)前解析記錄的記錄信息
            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: 步長(zhǎng),就是每次獲取域名的數(shù)量
    :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問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI