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