Python脚本实现DNSPod DNS动态解析域名
闲暇之余,在家里自建了个服务器,因为用的小区宽带,IP位动态分配。域名解析就是个问题,我的域名一般停放在DNSPod下。DNSPod有提供修改的API,就用Python简单的实现了一下动态解析。这样,就不用安装花生壳了。废话不说,看代码:
#!/usr/bin/envpython #-*-coding:utf-8-*- importhttplib,urllib,urllib2 importtime importsys,os importre importjson username='xxxx'#账号 password='xxx'#密码 format='json' domain=[u'www.youdomain.com']#要解析的域名 defget_domain_info(domain): domain_split=domain.split('.') domain_split_len=len(domain_split) maindomain=domain_split[domain_split_len-2]+'.'+domain_split[domain_split_len-1] returnmaindomain,domain params={'login_email':username,'login_password':password,'format':format} defrequest(action,params,method='POST'): headers={"Content-type":"application/x-www-form-urlencoded","Accept":"text/json"} conn=httplib.HTTPSConnection("dnsapi.cn") conn.request(method,'/'+action,urllib.urlencode(params),headers) response=conn.getresponse() data=response.read() conn.close() ifresponse.status==200: returndata else: returnNone defget_my_domain_id(): data=request('Domain.List',params) data=json.loads(data) domainlist=data.get('domains') domaninfo={} fordindomainlist: domaninfo[d.get('name')]=d.get('id') returndomaninfo defget_my_domain_record_id(domain_id): params['domain_id']=domain_id data=request('Record.List',params) data=json.loads(data) ifdata.get('code')=='10': returnNone domainname=data.get('domain').get('name') record_list=data.get('records') record={} forrinrecord_list: ifr.get('type')=='A': key=r.get('name')!='@'andr.get('name')+'.'+domainnameordomainname record[key]={'id':r.get('id'),'value':r.get('value')} returnrecord defchangerecord(domain,domain_id,record_id,ip): params['domain_id']=domain_id params['record_id']=record_id params['record_type']='A' params['record_line']='默认' params['sub_domain']=domain params['ttl']=600 params['value']=ip data=request('Record.Modify',params) defgetip(): url='http://iframe.ip138.com/ic.asp' response=urllib2.urlopen(url) text=response.read() ip=re.findall(r'\d+.\d+.\d+.\d+',text) returnip[0]orNone defupdatedomaininfo(domain): m,sub_m=get_domain_info(domain) domain_id=my_domain_id_list.get(m) record_list=get_my_domain_record_id(domain_id) ifrecord_list==None: returnNone rocord_info=record_list.get(sub_m) record_ip=rocord_info.get('value') record_id=rocord_info.get('id') returnsub_m,record_ip,record_id,domain_id if__name__=='__main__': my_domain_id_list=get_my_domain_id() try: fordmindomain: domaindata=updatedomaininfo(dm) ifdomaindata==None: continue dnsdomain,dnsdmainip,record_id,domain_id=domaindata domain_name=dnsdomain.split('.')[0] ip=getip() ifip==dnsdmainip: continue else: changerecord(domain_name,domain_id,record_id,ip) except: pass