溫馨提示×

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

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

將DNSPOD域名批量導(dǎo)入到DNSLA

發(fā)布時(shí)間:2020-07-04 13:23:07 來源:網(wǎng)絡(luò) 閱讀:623 作者:小生博客 欄目:編程語言

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

                -------謝謝您的參考,如有疑問,歡迎交流

DNSPOD的域名導(dǎo)入到DNSLADNSLA(鄭州帝恩愛斯)

DNSLA(鄭州帝恩愛斯)的開發(fā)規(guī)范:

1、開通API:使用DNSLA-API開發(fā)應(yīng)用,首先需要到個(gè)人后臺(tái)申請(qǐng)開通并設(shè)置API的ID和密鑰才可以使用。
2、API調(diào)用頻率:為防止用戶大量頻繁調(diào)用API給系統(tǒng)造成過多壓力,我們對(duì)調(diào)用頻率做了限制,每小時(shí)不超過300次,每天不超過3000次,如超過此限制,則會(huì)分別被暫停調(diào)用1小時(shí)和24小時(shí)。
3、安全傳輸:在調(diào)用API通訊期間,需要發(fā)送API賬號(hào)及密鑰,為保障賬號(hào)安全,必須使用https開頭的API地址,以免在通訊中泄露API密鑰。
4、關(guān)于編碼:請(qǐng)使用UTF-8編碼格式進(jìn)行數(shù)據(jù)傳輸。
5、API權(quán)限鎖定:當(dāng)API調(diào)用密碼錯(cuò)誤超過10次將會(huì)鎖定該用戶的API權(quán)限,鎖定后不會(huì)自動(dòng)解鎖,需要您登錄用戶后臺(tái)進(jìn)行解鎖操作。

DNSLA(鄭州帝恩愛斯)申請(qǐng)開通API:

申請(qǐng)方式:免費(fèi)申請(qǐng)。
申請(qǐng)地址:https://www.dns.la/manage/APISet.aspx (需登錄)
注意事項(xiàng):API長期不用時(shí)請(qǐng)關(guān)閉!

代碼:

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):
    '''
    需要通過函數(shù)Get_Domians來判定OffSet和Length的數(shù)值.
    :param Login_Token:
    :param OffSet:  記錄開始的偏移, 第一條記錄為 0, 依次類推.
    :param Length:  要獲取的域名數(shù)量, 比如獲取20個(gè), 則為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

        # 用來統(tǒng)計(jì)添加了多少個(gè)域名
        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]失敗,錯(cuò)誤信息:[%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':
                '''如果記錄狀態(tài)為禁用則跳過'''
                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],失敗,錯(cuò)誤信息:[%s]."%(Domain_Name,Record_Name,Record_Type,Record_Value,Error_Info))

    print("域名導(dǎo)入完成,共導(dǎo)入[%d]個(gè)域名,請(qǐng)驗(yàn)證!"%(Domain_Count))

def Get_Domians(Login_Token, Step_Size):
    '''
    :param Login_Token:
    :param Step_Size: 步長,就是每次獲取域名的數(shù)量
    :return:
    :Memo: 本次請(qǐng)求使用了offset和length參數(shù)來減少每次請(qǐng)求的數(shù)量,用來提升程序的穩(wěn)定性
    '''
    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)
向AI問一下細(xì)節(jié)

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

AI