# pip install aliyun-python-sdk-core
# pip install pyaliyunsdk
导入
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.acs_exception.exceptions import ClientException
类,成员变量
class CAliyunUtils:
#私有类变量
__aki = ""
__aks = ""
__domain = ""
# rr = "@" # 可以为 @ www 等 二级域名
# type = 'A' # 可以为 A MX CNAME 等
# value = ""
__client = None
__request = None
__response = None
初始化函数
@classmethod
def init(self, AccessKeyId,AccessKeySecret,domain):
self.domain = domain
self.aki = AccessKeyId
self.aks = AccessKeySecret
self.client = AcsClient(self.aki, self.aks, 'cn-hangzhou')
self.request = CommonRequest()
self.request.set_accept_format('json')
self.request.set_domain('alidns.aliyuncs.com')
self.request.set_method('POST')
self.request.set_version('2015-01-09')
self.request.add_query_param('DomainName',self.domain)
#print(self.request)
增加一条解析记录
@classmethod
def act_addDomainRecord(self,rr,type,value):
self.request.set_action_name('AddDomainRecord')
self.request.add_query_param('RR', rr)
self.request.add_query_param('Type',type)
self.request.add_query_param('Value',value)
try:
self.response = self.client.do_action(self.request)
return True
except (ServerException, ClientException) as reason:
print(reason.get_error_msg())
return False
获得一条记录的RecordId
@classmethod
def act_getRecordId(self, rr_search, type):
# 这里注意SubDomain的处理,比较特殊
self.request.set_action_name('DescribeSubDomainRecords')
self.request.add_query_param('SubDomain', rr_search+"."+self.domain)
self.request.add_query_param('Type', type)
self.request.add_query_param('DomainName',self.domain)
try:
self.response = self.client.do_action_with_exception(self.request)
jsonObj = json.loads(self.response.decode("UTF-8"))
#print(jsonObj)
records = jsonObj["DomainRecords"]['Record']
recordid = None
for each in records:
if each['RR'] == rr_search:
recordid = each['RecordId']
break
return recordid
except (ServerException, ClientException) as reason:
print(reason.get_error_msg())
return None
更新一条解析记录
@classmethod
def act_updateDomainRecord(self,rr,type,value):
id_recorder = self.act_getRecordId(rr,type)
if(id_recorder != None):
self.request.set_action_name('UpdateDomainRecord')
self.request.add_query_param('RecordId', id_recorder)
self.request.add_query_param('RR', rr)
self.request.add_query_param('Type',type)
self.request.add_query_param('Value',value)
try:
self.response = self.client.do_action_with_exception(self.request)
return True
except (ServerException, ClientException) as reason:
# 阿里云脑子有毛病吧,不存在的记录Update个屁啊,这叫什么异常
if(reason.get_error_msg() == "The DNS record already exists."):
return True
print(reason.get_error_msg())
return False
用法
a = CAliyunUtils()
# 关于这里用到AccessKey和密码,在自己的阿里云账户里查
a.init("Xsadjfoas","Sdsfsldf","xxx.com")
a.act_getRecordId("@","A")
a.act_updateDomainRecord("@","A",get_ip())
参考
# 阿里云,云解析的python文档 # https://next.api.aliyun.com/api-tools/sdk/Alidns?language=python # 阿里云关于CommonRequest的调用 # https://help.aliyun.com/document_detail/61476.html # 阿里云,修改解析记录文档 # https://help.aliyun.com/document_detail/29774.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)