├── cloudxns ├── __init__.py └── api.py ├── .gitignore ├── setup.py ├── README.md └── sample.py /cloudxns/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.idea 2 | 3 | *.pyc -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from distutils.core import setup 3 | 4 | 5 | setup(name='CloudXNS-API-SDK-Python', 6 | version='0.1', 7 | description='CloudXNS-API-SDK-Python: CloudXNS API Python Software Development Kit.', 8 | author='CloudXNS', 9 | author_email='support@cloudxns.net', 10 | url=' http://www.cloudxns.net/', 11 | packages=['cloudxns'], 12 | long_description="Python sdk for CloudXNS.net", 13 | license="MIT", 14 | platforms=["any"] 15 | ) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ##CloudXNS-API-SDK-Python Package## 2 | 3 | 4 | ##Install## 5 | 6 | ###Install First### 7 | 8 | Extract the archive file downloaded from [CloudXNS-API-SDK-Python.zip](https://github.com//CloudXNS/CloudXNS-API-SDK-Python/archive/master.zip) to your project. 9 | You can install Package: 10 | ```shell 11 | pip install restclient 12 | python setup.py install 13 | ``` 14 | 15 | ###Install Second### 16 | you can then install using the following command: 17 | ```shell 18 | pip install CloudXNS-API-SDK-Python 19 | ``` 20 | 21 | ##Demo## 22 | ================================================== 23 | ```python 24 | #!/usr/bin/env python 25 | #-*- coding:utf-8 -*- 26 | 27 | 28 | from cloudxns.api import * 29 | try: 30 | import json 31 | except ImportError: 32 | import simplejson as json 33 | 34 | if __name__ == '__main__': 35 | 36 | print 'CloudXNS API Version: ', Api.vsersion() 37 | api_key = 'XXXXXX' 38 | secret_key = 'XXXXXX' 39 | api = Api(api_key=api_key, secret_key=secret_key) 40 | # api.set_debug(True) 41 | 42 | """ 43 | 功能 域名列表 44 | HTTP 请求方式 GET 45 | URL https://www.cloudxns.net/api2/domain 46 | :return: String 47 | """ 48 | result = api.domain_list() 49 | print result 50 | 51 | """ 52 | 功能 添加域名 53 | HTTP 请求方式 POST 54 | URL https://www.cloudxns.net/api2/domain 55 | :return: String 56 | """ 57 | import random 58 | domain = "sdk-test%d.com" % random.randint(1000, 100000) 59 | result = api.domain_add(domain) 60 | print result 61 | 62 | """ 63 | 功能 删除域名 64 | HTTP 请求方式 DELETE 65 | URL https://www.cloudxns.net/api2/domain 66 | :return: String 67 | """ 68 | result = api.domain_delete(32224) 69 | print result 70 | 71 | """ 72 | 功能 DDNS快速修改解析记录值 73 | HTTP请求方式 POST 74 | URL https://www.cloudxns.net/api2/ddns 75 | domain:(必选)已存在的完整域名(如主机记录为@时domain是cloudxns.net,为www时domain是www.cloudxns.net) 76 | ip:(可选)记录IP值(8.8.8.8)或者多个IP值中间用|分割(8.8.8.8|1.1.1.1);为空时IP值由API自动获取客户端IP 77 | line_id:(可选)线路id(通过API获取),默认值1(全网默认) 78 | """ 79 | result = api.ddns('ddns.a.com') 80 | print result 81 | ``` 82 | -------------------------------------------------------------------------------- /sample.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | #-*- coding:utf-8 -*- 3 | 4 | 5 | from cloudxns.api import * 6 | try: 7 | import json 8 | except ImportError: 9 | import simplejson as json 10 | 11 | if __name__ == '__main__': 12 | 13 | print 'CloudXNS API Version: ', Api.vsersion() 14 | api_key = 'XXXXXX' 15 | secret_key = 'XXXXXX' 16 | api = Api(api_key=api_key, secret_key=secret_key) 17 | # api.set_debug(True) 18 | 19 | """ 20 | 功能 域名列表 21 | HTTP 请求方式 GET 22 | URL https://www.cloudxns.net/api2/domain 23 | :return: String 24 | """ 25 | #result = api.domain_list() 26 | #print result 27 | 28 | """ 29 | 功能 添加域名 30 | HTTP 请求方式 POST 31 | URL https://www.cloudxns.net/api2/domain 32 | :return: String 33 | """ 34 | #import random 35 | #domain = "sdk-test%d.com" % random.randint(1000, 100000) 36 | #result = api.domain_add(domain) 37 | #print result 38 | 39 | """ 40 | 功能 删除域名 41 | HTTP 请求方式 DELETE 42 | URL https://www.cloudxns.net/api2/domain 43 | :return: String 44 | """ 45 | #result = api.domain_delete(32224) 46 | #print result 47 | 48 | """ 49 | 功能 域名统计 50 | HTTP 请求方式 GET 51 | URL https://www.cloudxns.net/api2/domain_stat/:id 52 | 请求参数: 53 | 参数名称 类型 必填 描述 54 | host String 是 主机名,查询全部传 all 55 | code String 是 统计区域 Id 或统 ISP Id,查询全部传 all 56 | start_date Date 是 开始时间 格式:yyyy-mm-dd 57 | end_date Date 是 结束时间 格式:yyyy-mm-dd 58 | :return: String 59 | """ 60 | #result = api.domain_stat(domain_id=2125, start_date=20151001, end_date=20151020) 61 | #print result 62 | 63 | """ 64 | 功能 主机记录 65 | HTTP 请求方式 GET 66 | URL https://www.cloudxns.net/api2/host/:domain_id?offset=:offset&row_num=:row_num 67 | 请求参数: 68 | 参数名称 类型 必填 描述 69 | domain_id Integer 是 域名ID 70 | offset Integer 否 记录开始的偏移,第一条记录为 0,依次类推 71 | row_num Integer 否 要获取的记录的数量,比如获取 30 条,则为 30,最大可取 2000条 72 | :return: String 73 | """ 74 | #result = api.host_list(2125, 0, 30) 75 | #print result 76 | 77 | """ 78 | 功能 删除主机记录 79 | HTTP 请求方式 GET 80 | URL https://www.cloudxns.net/api2/host/:id 81 | 请求参数: 82 | 参数名称 类型 必填 描述 83 | hostId Integer 是 主机记录id 84 | :return: String 85 | """ 86 | #result = api.host_delete(295167) 87 | #print result 88 | 89 | """ 90 | 功能 线路列表 91 | HTTP 请求方式 GET 92 | URL https://www.cloudxns.net/line 93 | :return: String 94 | """ 95 | #list_all = api.line_list() 96 | #list_isp = api.line_list(level='isp') 97 | #list_region = api.line_list(level='region') 98 | #print 'list_all: ', list_all 99 | #print 'list_isp: ', list_isp 100 | #print 'list_region: ', list_region 101 | 102 | """ 103 | 功能 NS服务器列表 104 | HTTP 请求方式 GET 105 | URL https://www.cloudxns.net/api2/ns_server 106 | :return: String 107 | """ 108 | #result = api.ns_list() 109 | #print result 110 | 111 | """ 112 | 功能 记录类型列表 113 | HTTP 请求方式 GET 114 | URL https://www.cloudxns.net/api2/type 115 | :return: String 116 | """ 117 | #result = api.record_type_list() 118 | #print result 119 | 120 | """ 121 | 功能 解析记录列表 122 | HTTP 请求方式 GET 123 | URL https://www.cloudxns.net/api2/record/:domain_id?host_id=0&offset=:offset&row_num=:row_num 124 | 请求参数: 125 | 参数名称 类型 必填 描述 126 | domain_id Integer 是 域名ID 127 | offset Integer 否 记录开始的偏移,第一条记录为 0,依次类推 128 | row_num Integer 否 要获取的记录的数量,比如获取 30 条,则为 30,最大可取 2000条 129 | :return: string 130 | """ 131 | #result = api.record_list(2125, 0, 0, 30) 132 | #print result 133 | 134 | 135 | """ 136 | 功能 添加解析记录 137 | HTTP 请求方式 GET 138 | URL https://www.cloudxns.net/api2/record 139 | 请求参数: 140 | 参数名称 类型 必填 描述 141 | domain_id Integer 域名 id 142 | host_name String 主机记录名称 如 www, 默认@ 143 | value String 记录值, 如IP:8.8.8.8,CNAME:cname.cloudxns.net., MX: mail.cloudxns.net. 144 | record_type String 记录类型,通过 API 获得记录类型,大写英文,比如:A 145 | mx Integer 优先级,范围 1-100。当记录类型是 MX/AX/CNAMEX 时有效并且必选 146 | ttl Integer TTL,范围 60-3600,不同等级域名最小值不同 147 | line_id Integer 线路id,(通过 API 获得记录线路 id) 148 | :return: String 149 | """ 150 | #result = api.record_add(2125, 'w0', '3.3.3.3', 'A', 55, 600, 1) 151 | #print result 152 | 153 | 154 | """ 155 | 功能 添加备记录 156 | HTTP 请求方式 GET 157 | URL https://www.cloudxns.net/api2/record/spare 158 | 请求参数: 159 | 参数名称 类型 必填 描述 160 | domain_id Integer 域名 id 161 | host_id Integer 主机记录名称 如 www, 默认@ 162 | record_id Integer 解析记录id 163 | value String 记录值, 如IP:8.8.8.8,CNAME:cname.cloudxns.net., MX: mail.cloudxns.net. 164 | :return: String 165 | """ 166 | # add record spare 167 | #result = api.record_spare(2125, 295170, 629121, '192.168.100.222') 168 | #print result 169 | 170 | """ 171 | 功能 更新解析记录 172 | HTTP 请求方式 GET 173 | URL https://www.cloudxns.net/api2/record/:id 174 | 请求参数: 175 | 参数名称 类型 必填 描述 176 | record_id Integer 解析记录id 177 | domain_id Integer 域名id 178 | host_name String 主机记录名称 如 www, 默认@ 179 | value String 记录值, 如IP:8.8.8.8,CNAME:cname.cloudxns.net., MX: mail.cloudxns.net. 180 | record_type String 记录类型,通过 API 获得记录类型,大写英文,比如:A 181 | mx Integer 优先级,范围 1-100。当记录类型是 MX/AX/CNAMEX 时有效并且必选 182 | ttl Integer TTL,范围 60-3600,不同等级域名最小值不同 183 | line_id Integer 线路 id,(通过 API 获得记录线路 id) 184 | spare_data String 备IP 185 | :return: String 186 | """ 187 | #result = api.record_update(629125, 2125, 'w1111111', '192.168.100.210', 'AX', 55, 600, 1) 188 | #print result 189 | 190 | """ 191 | 功能 删除解析记录 192 | HTTP 请求方式 GET 193 | URL https://www.cloudxns.net/api2/record/:id/:domain_id 194 | 请求参数: 195 | 参数名称 类型 必填 描述 196 | record_id Integer 解析记录id 197 | domain_id Integer 域名 id 198 | :return: String 199 | """ 200 | #result = api.record_delete(629125, 2125) 201 | #print result 202 | 203 | """ 204 | 功能 DDNS快速修改解析记录值 205 | HTTP请求方式 POST 206 | URL https://www.cloudxns.net/api2/ddns 207 | domain:(必选)含主机记录的域名(如主机记录为@时domain是cloudxns.net,为www时domain是www.cloudxns.net) 208 | ip:(可选)记录IP值(8.8.8.8)或者多个IP值中间用|分割(8.8.8.8|1.1.1.1);为空时IP值由API自动获取客户端IP 209 | line_id:(可选)线路id(通过API获取),默认值1(全网默认) 210 | """ 211 | #result = api.ddns('ddns.a.com') 212 | #print result 213 | 214 | 215 | 216 | 217 | 218 | 219 | -------------------------------------------------------------------------------- /cloudxns/api.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | 3 | import hashlib 4 | import time 5 | import httplib2 6 | import urllib 7 | from restclient import GET, POST, PUT, DELETE, fix_params 8 | try: 9 | import json 10 | except ImportError: 11 | import simplejson as json 12 | 13 | 14 | __API_URL__ = 'https://www.cloudxns.net/api2/' 15 | __httplib_params__ = {'disable_ssl_certificate_validation':True} 16 | 17 | class Api: 18 | def __init__(self, api_key=None, secret_key=None): 19 | self.__debug = False 20 | self.__content_type = 'application/json' 21 | self.__headers = { 22 | 'API-FORMAT': 'json', 23 | 'Content-Type': self.__content_type, 24 | 'user-agent': 'CloudXNS-Python/v2 (CloudXNS-API-SDK-Python) Python-httplib2/0.9.2' 25 | } 26 | self.__api_key = '' 27 | self.__secret_key = '' 28 | if api_key: 29 | self.set__api_key(api_key) 30 | if secret_key: 31 | self.set__secret_key(secret_key) 32 | 33 | def set_debug(self, debug=True): 34 | self.__debug = debug 35 | if debug: 36 | httplib2.debuglevel = 1 37 | else: 38 | httplib2.debuglevel = 0 39 | 40 | def __header_update(self, uri, data=None): 41 | if data: 42 | data = json.dumps(data) 43 | else: 44 | data = '' 45 | md5 = hashlib.md5() 46 | date = time.strftime('%a %b %d %H:%M:%S %Y', time.localtime()) 47 | md5.update(self.__api_key + __API_URL__ + uri + data + date + self.__secret_key) 48 | self.__headers['API-HMAC'] = md5.hexdigest() 49 | self.__headers['API-REQUEST-DATE'] = date 50 | 51 | def set__api_key(self, api_key): 52 | self.__api_key = api_key 53 | self.__headers['API-KEY'] = api_key 54 | 55 | def set__secret_key(self, secret_key): 56 | self.__secret_key = secret_key 57 | 58 | def __request(self, method, uri, data=None): 59 | if method not in ['GET', 'POST', 'PUT', 'DELETE']: 60 | raise Exception("Invalid HTTP request method") 61 | 62 | if method in ['POST', 'PUT']: 63 | self.__header_update(uri, data=data) 64 | elif data: 65 | params = urllib.urlencode(fix_params(data)) 66 | self.__header_update(uri + '?' + params) 67 | else: 68 | self.__header_update(uri) 69 | 70 | if self.__debug: 71 | resp, content = eval(method)(__API_URL__ + uri, 72 | params=data, headers=self.__headers, resp=self.__debug, async=False,httplib_params=__httplib_params__) 73 | return resp, content 74 | 75 | else: 76 | content = eval(method)(__API_URL__ + uri, 77 | params=data, headers=self.__headers, resp=self.__debug, async=False,httplib_params=__httplib_params__) 78 | 79 | return content 80 | 81 | @staticmethod 82 | def vsersion(): 83 | return GET(__API_URL__ + 'version',httplib_params=__httplib_params__) 84 | 85 | def domain_list(self): 86 | """ 87 | 功能 域名列表 88 | HTTP 请求方式 GET 89 | URL https://www.cloudxns.net/api2/domain 90 | :return: String 91 | """ 92 | return self.__request('GET', 'domain') 93 | 94 | def domain_add(self, domain_name): 95 | """ 96 | 功能 添加域名 97 | HTTP 请求方式 POST 98 | URL https://www.cloudxns.net/api2/domain 99 | :return: String 100 | """ 101 | data = {"domain": domain_name} 102 | return self.__request('POST', 'domain', data=data) 103 | 104 | def domain_delete(self, domain_id): 105 | """ 106 | 功能 删除域名 107 | HTTP 请求方式 DELETE 108 | URL https://www.cloudxns.net/api2/domain 109 | 请求参数: 110 | 参数名称 类型 必填 描述 111 | domain_id Integer 是 域名ID 112 | :return: String 113 | """ 114 | if isinstance(domain_id, int): 115 | domain_id = str(domain_id) 116 | return self.__request('DELETE', 'domain/' + domain_id) 117 | 118 | def domain_stat(self, domain_id, start_date, end_date, host='all', code='all'): 119 | """ 120 | 功能 获取某域名解析量统计数据 121 | HTTP 请求方式 GET 122 | URL https://www.cloudxns.net/api2/domain_stat/:id 123 | URL 参数说明 Id:域名 ID 124 | 请求参数: 125 | 参数名称 类型 必填 描述 126 | host String 是 主机名,查询全部传 all 127 | code String 是 统计区域 Id 或统 ISP Id,查询全部传 all 128 | start_date Date 是 开始时间 格式:yyyy-mm-dd 129 | end_date Date 是 结束时间 格式:yyyy-mm-dd 130 | :return: 131 | """ 132 | if isinstance(domain_id, int): 133 | domain_id = str(domain_id) 134 | data = { 135 | 'host': host, 136 | 'code': code, 137 | 'start_date': start_date, 138 | 'end_date': end_date 139 | } 140 | return self.__request('GET', 'domain_stat/' + domain_id, data=data) 141 | 142 | def host_list(self, domain_id, offset=0, row_num=2000): 143 | """ 144 | 功能 主机记录 145 | HTTP 请求方式 GET 146 | URL https://www.cloudxns.net/api2/host/:domain_id?offset=:offset&row_num=:row_num 147 | 请求参数: 148 | 参数名称 类型 必填 描述 149 | domain_id Integer 是 域名ID 150 | offset Integer 否 记录开始的偏移,第一条记录为 0,依次类推 151 | row_num Integer 否 要获取的记录的数量,比如获取 30 条,则为 30,最大可取 2000条 152 | :return: String 153 | """ 154 | if isinstance(domain_id, int): 155 | domain_id = str(domain_id) 156 | return self.__request('GET', 'host/'+domain_id, {"offset": offset, "row_num": row_num}) 157 | 158 | def host_delete(self, host_id): 159 | """ 160 | 功能 删除主机记录 161 | HTTP 请求方式 DELETE 162 | URL https://www.cloudxns.net/api2/host/:id 163 | 请求参数: 164 | 参数名称 类型 必填 描述 165 | host_id Integer 是 主机记录id 166 | :return: String 167 | """ 168 | if isinstance(host_id, int): 169 | host_id = str(host_id) 170 | return self.__request('DELETE', 'host/'+host_id) 171 | 172 | def line_list(self, level=''): 173 | """ 174 | 功能 线路列表 175 | HTTP 请求方式 GET 176 | URL https://www.cloudxns.net/line 177 | :return: String 178 | """ 179 | if level not in ['', 'region', 'isp']: 180 | raise Exception("param 'level' mast be '' or 'region' or 'isp' ") 181 | if level != '': 182 | uri = 'line/'+level 183 | else: 184 | uri = 'line' 185 | return self.__request('GET', uri) 186 | 187 | def ns_list(self): 188 | """ 189 | 功能 NS服务器列表 190 | HTTP 请求方式 GET 191 | URL https://www.cloudxns.net/api2/ns_server 192 | :return: String 193 | """ 194 | return self.__request('GET', 'ns_server') 195 | 196 | def record_type_list(self): 197 | """ 198 | 功能 记录类型列表 199 | HTTP 请求方式 GET 200 | URL https://www.cloudxns.net/api2/type 201 | :return: String 202 | """ 203 | return self.__request('GET', 'type') 204 | 205 | def record_list(self, domain_id, host_id=0, offset=0, row_num=30): 206 | """ 207 | 功能 获取解析记录列表 208 | HTTP 请求方式 GET 209 | URL https://www.cloudxns.net/api2/record/:domain_id?host_id=0&offset=:offset&row_num=:row_num 210 | URL 参数说明 211 | domain_id:域名 id 212 | host_id:主机记录 id(传 0 查全部) 213 | offset:记录开始的偏移,第一条记录为 0,依次类推,默认取 0 214 | row_num:要获取的记录的数量, 比如获取 30 条, 则为 30,最大可取 2000 215 | 条,默认取 30 条. 216 | :return: 217 | code int 请求状态,详见附件 code 对照表 218 | message String 操作信息,提示操作成功或错误信息 219 | total int 总记录条数 220 | offset int 记录开始的偏移 221 | row_num int 要获取的记录的数量 222 | data array 记录列表 223 | record_id: 解析记录 id 224 | host_id:主机记录 id 225 | host:主机记录名 226 | line_id:线路 ID 227 | line_zh:中文名称 228 | line_en:英文名称 229 | mx:优先级 230 | Value:记录值 231 | Type:记录类型 232 | Status:记录状态(ok 已生效 userstop 暂停) 233 | create_time:创建时间 234 | update_time:更新时间 235 | """ 236 | if isinstance(domain_id, int): 237 | domain_id = str(domain_id) 238 | return self.__request('GET', 'record/'+domain_id, {"host_id": host_id, "offset": offset, "row_num": row_num}) 239 | 240 | def record_add(self, domain_id, host_name, value, record_type='A', mx=None, ttl=600, line_id=1): 241 | """ 242 | 功能 添加解析记录 243 | HTTP 请求方式 POST 244 | URL https://www.cloudxns.net/api2/record 245 | 请求参数: 246 | 参数名称 类型 必填 描述 247 | domain_id Integer 域名 id 248 | host_name String 主机记录名称 如 www, 默认@ 249 | value String 记录值, 如IP:8.8.8.8,CNAME:cname.cloudxns.net., MX: mail.cloudxns.net. 250 | record_type String 记录类型,通过 API 获得记录类型,大写英文,比如:A 251 | mx Integer 优先级,范围 1-100。当记录类型是 MX/AX/CNAMEX 时有效并且必选 252 | ttl Integer TTL,范围 60-3600,不同等级域名最小值不同 253 | line_id Integer 线路id,(通过 API 获得记录线路 id) 254 | :return: String 255 | """ 256 | if record_type not in ["A", "CNAME", "NS", "MX", "TXT", "AAAA", "LINK", "AX", 257 | "CNAMEX", "SRV", "DR301X", "DR302X", "DRHIDX"]: 258 | raise Exception("Invalid record type") 259 | 260 | data = { 261 | "domain_id": domain_id, 262 | "host": host_name, 263 | "value": value, 264 | "type": record_type, 265 | "ttl": ttl, 266 | "line_id": line_id 267 | } 268 | 269 | if (mx is not None) and (mx >= 1 or mx <= 100): 270 | data['mx'] = mx 271 | 272 | return self.__request('POST', 'record', data=data) 273 | 274 | def record_spare(self, domain_id, host_id, record_id, value): 275 | """ 276 | 功能 添加备记录 277 | HTTP 请求方式 POST 278 | URL https://www.cloudxns.net/api2/record/spare 279 | 请求参数: 280 | 参数名称 类型 必填 描述 281 | domain_id Integer 域名 id 282 | host_id Integer 主机记录名称 如 www, 默认@ 283 | record_id Integer 解析记录id 284 | value String 记录值, 如IP:8.8.8.8,CNAME:cname.cloudxns.net., MX: mail.cloudxns.net. 285 | :return: String 286 | """ 287 | data = { 288 | "domain_id": domain_id, 289 | "host_id": host_id, 290 | "record_id": record_id, 291 | "value": value 292 | } 293 | return self.__request('POST', 'record/spare', data=data) 294 | 295 | def record_update(self, record_id, domain_id, host_name, value, 296 | record_type='A', mx=None, ttl=600, line_id=1, spare_data=None): 297 | """ 298 | 功能 更新解析记录 299 | HTTP 请求方式 PUT 300 | URL https://www.cloudxns.net/api2/record/:id 301 | 请求参数: 302 | 参数名称 类型 必填 描述 303 | record_id Integer 解析记录id 304 | domain_id Integer 域名id 305 | host_name String 主机记录名称 如 www, 默认@ 306 | value String 记录值, 如IP:8.8.8.8,CNAME:cname.cloudxns.net., MX: mail.cloudxns.net. 307 | record_type String 记录类型,通过 API 获得记录类型,大写英文,比如:A 308 | mx Integer 优先级,范围 1-100。当记录类型是 MX/AX/CNAMEX 时有效并且必选 309 | ttl Integer TTL,范围 60-3600,不同等级域名最小值不同 310 | line_id Integer 线路 id,(通过 API 获得记录线路 id) 311 | spare_data String 备IP 312 | :return: String 313 | """ 314 | if record_type not in ["A", "CNAME", "NS", "MX", "TXT", "AAAA", "LINK", "AX", 315 | "CNAMEX", "SRV", "DR301X", "DR302X", "DRHIDX"]: 316 | raise Exception("Invalid record type") 317 | 318 | data = { 319 | "domain_id": domain_id, 320 | "host": host_name, 321 | "value": value, 322 | "type": record_type, 323 | "ttl": ttl, 324 | "line_id": line_id 325 | } 326 | 327 | if (mx is not None) and (mx >= 1 or mx <= 100): 328 | data['mx'] = mx 329 | 330 | if spare_data: 331 | data['bak_ip'] = spare_data 332 | 333 | if isinstance(record_id, int): 334 | record_id = str(record_id) 335 | 336 | return self.__request('PUT', 'record/' + record_id, data=data) 337 | 338 | def record_delete(self, record_id, domain_id): 339 | """ 340 | 功能 删除解析记录 341 | HTTP 请求方式 DELETE 342 | URL https://www.cloudxns.net/api2/record/:id/:domain_id 343 | 请求参数: 344 | 参数名称 类型 必填 描述 345 | record_id Integer 解析记录id 346 | domain_id Integer 域名 id 347 | :return: String 348 | """ 349 | if isinstance(record_id, int): 350 | record_id = str(record_id) 351 | 352 | if isinstance(domain_id, int): 353 | domain_id = str(domain_id) 354 | 355 | return self.__request('DELETE', 'record/' + record_id + '/' + domain_id) 356 | 357 | def ddns(self, domain, ip=None, line_id=0): 358 | """ 359 | 功能 DDNS快速修改解析记录值 360 | HTTP请求方式 POST 361 | URL https://www.cloudxns.net/api2/ddns 362 | :param domain:(必选)含主机记录的域名(如主机记录为@时domain是cloudxns.net,为www时domain是www.cloudxns.net) 363 | :param ip:(可选)记录IP值(8.8.8.8)或者多个IP值中间用|分割(8.8.8.8|1.1.1.1);为空时IP值由API自动获取客户端IP 364 | :param line_id:(可选)线路id(通过API获取),默认值1(全网默认) 365 | :return: 366 | """ 367 | 368 | data = { 369 | "domain": domain 370 | } 371 | 372 | if ip is not None: 373 | data['ip'] = ip 374 | 375 | if line_id > 0: 376 | data['line_id'] = line_id 377 | 378 | return self.__request('POST', 'ddns', data=data) --------------------------------------------------------------------------------