将DNSPOD域名批量导入到DNSLA
admin
2023-07-16 19:23:43
0

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

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

将DNSPOD的域名导入到DNSLADNSLA(郑州帝恩爱斯)

DNSLA(郑州帝恩爱斯)的开发规范:

1、开通API:使用DNSLA-API开发应用,首先需要到个人后台申请开通并设置API的ID和密钥才可以使用。
2、API调用频率:为防止用户大量频繁调用API给系统造成过多压力,我们对调用频率做了限制,每小时不超过300次,每天不超过3000次,如超过此限制,则会分别被暂停调用1小时和24小时。
3、安全传输:在调用API通讯期间,需要发送API账号及密钥,为保障账号安全,必须使用https开头的API地址,以免在通讯中泄露API密钥。
4、关于编码:请使用UTF-8编码格式进行数据传输。
5、API权限锁定:当API调用密码错误超过10次将会锁定该用户的API权限,锁定后不会自动解锁,需要您登录用户后台进行解锁操作。

DNSLA(郑州帝恩爱斯)申请开通API:

申请方式:免费申请。
申请地址:https://www.dns.la/manage/APISet.aspx (需登录)
注意事项:API长期不用时请关闭!

代码:

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):
    '''
    需要通过函数Get_Domians来判定OffSet和Length的数值.
    :param Login_Token:
    :param OffSet:  记录开始的偏移, 第一条记录为 0, 依次类推.
    :param Length:  要获取的域名数量, 比如获取20个, 则为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

        # 用来统计添加了多少个域名
        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]失败,错误信息:[%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':
                '''如果记录状态为禁用则跳过'''
                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],失败,错误信息:[%s]."%(Domain_Name,Record_Name,Record_Type,Record_Value,Error_Info))

    print("域名导入完成,共导入[%d]个域名,请验证!"%(Domain_Count))

def Get_Domians(Login_Token, Step_Size):
    '''
    :param Login_Token:
    :param Step_Size: 步长,就是每次获取域名的数量
    :return:
    :Memo: 本次请求使用了offset和length参数来减少每次请求的数量,用来提升程序的稳定性
    '''
    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)

相关内容

热门资讯

古巴国家主席回应遭美制裁 古巴国家主席迪亚斯-卡内尔当地时间4日在社交媒体平台发文,回应遭美国制裁一事。迪亚斯-卡内尔在文中指...
消息称苹果将借谷歌云英伟达芯片... 来源:环球网 【环球网科技综合报道】6月4日消息,据科技媒体《The Information》最新...
胡锡进:这一大盆脏水泼过来,简... 中国产品的竞争力相当于“服用兴奋剂参加体育比赛”?成员基本都是西方发达国家的经合组织6月1日发布了一...
微软首推自研模型,成本只需竞品... 在刚刚举行的Build2026开发者大会上,微软公布了七款内部前沿人工智能模型。尽管其中五款是对既有...
省口腔医院发布口腔大模型和智能... (来源:南京晨报) 转自:南京晨报 6月1日,由南京医科大学附属口腔医院(江苏省口腔医院)主办的“人...
快手一季报,分拆可灵的“紧迫感... 来源 | 伯虎财经(bohuFN) 作者 | 楷楷 半个月前,快手计划分拆可灵独立上市的消息火遍行业...
粉笔张小龙,犯了众怒 在讲台上荒诞“暴走”的张小龙,并不令人意外。6月3日,粉笔创始人张小龙作为主讲嘉宾,应邀出席一所大学...
民进党前秘书长欠台糖公司1.7... 【环球网报道】据台湾中时新闻网报道,民进党前秘书长吴乃仁在担任台糖公司董事长期间,涉及贱卖台糖土地案...
3岁小孩不知妈妈去世,因想念每... “妈妈去国外工作了,很爱你们,只是暂时回不了家。”面对三岁大宝日复一日的寻母思念,湖北武汉的李先生只...
内塔尼亚胡险遭无人机袭击,以媒... 尽管黎以停火协议已达成并开始实施,但零星交火仍在持续。以色列总理内塔尼亚胡刚离开北部边境地区,疑似真...