Python脚本实现DNSPod DNS动态解析域名


Posted in Python onFebruary 14, 2015

闲暇之余,在家里自建了个服务器,因为用的小区宽带,IP位动态分配。域名解析就是个问题,我的域名一般停放在DNSPod下。DNSPod有提供修改的API,就用Python简单的实现了一下动态解析。这样,就不用安装花生壳了。 废话不说,看代码:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import httplib, urllib, urllib2
import time
import sys,os
import re
import json

username = 'xxxx' #账号
password = 'xxx' #密码
format = 'json'

domain = [u'www.youdomain.com'] #要解析的域名

def get_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]
  return maindomain,domain

params = {'login_email':username,'login_password':password,'format':format}

def request(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()
  if response.status == 200:
    return data
  else:
    return None

def get_my_domain_id():
  data = request('Domain.List',params)
  data = json.loads(data)
  domainlist = data.get('domains')
  domaninfo = {}
  for d in domainlist:
    domaninfo[d.get('name')] = d.get('id')
  return domaninfo

def get_my_domain_record_id(domain_id):
  params['domain_id'] = domain_id
  data = request('Record.List',params)
  data = json.loads(data)
  if data.get('code') == '10':
    return None
  domainname = data.get('domain').get('name')
  record_list = data.get('records')
  record = {}
  for r in record_list:
    if r.get('type') == 'A':
      key = r.get('name') != '@' and r.get('name') + '.' + domainname or domainname
      record[key] = {'id':r.get('id'),'value':r.get('value')}
  return record

def changerecord(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)

def getip():
  url = 'http://iframe.ip138.com/ic.asp'
  response = urllib2.urlopen(url)
  text = response.read()
  ip = re.findall(r'\d+.\d+.\d+.\d+', text)
  return ip[0] or None

def updatedomaininfo(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)
  if record_list == None:
    return None
  rocord_info = record_list.get(sub_m)
  record_ip = rocord_info.get('value')
  record_id = rocord_info.get('id')
  return sub_m,record_ip,record_id,domain_id

if __name__ == '__main__':
  my_domain_id_list = get_my_domain_id()
  try:
    for dm in domain:
      domaindata = updatedomaininfo(dm)
      if domaindata == None:
        continue
      dnsdomain,dnsdmainip,record_id,domain_id = domaindata
      domain_name = dnsdomain.split('.')[0]
      ip = getip()
      if ip == dnsdmainip:
        continue
      else:
        changerecord(domain_name,domain_id,record_id,ip)
  except:
    pass
Python 相关文章推荐
wxpython 最小化到托盘与欢迎图片的实现方法
Jun 09 Python
用python登录Dr.com思路以及代码分享
Jun 25 Python
python登录pop3邮件服务器接收邮件的方法
Apr 30 Python
Python实现的异步代理爬虫及代理池
Mar 17 Python
Python实现随机选择元素功能
Sep 14 Python
使用python实现抓取腾讯视频所有电影的爬虫
Apr 15 Python
django-rest-framework解析请求参数过程详解
Jul 18 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
Feb 17 Python
Python可视化工具如何实现动态图表
Oct 23 Python
python boto和boto3操作bucket的示例
Oct 30 Python
python 基于opencv去除图片阴影
Jan 26 Python
Python压缩和解压缩zip文件
Feb 14 #Python
Python简单日志处理类分享
Feb 14 #Python
Python魔术方法详解
Feb 14 #Python
Python中非常实用的一些功能和函数分享
Feb 14 #Python
深入理解Python中的元类(metaclass)
Feb 14 #Python
Python开发常用的一些开源Package分享
Feb 14 #Python
Python中的MongoDB基本操作:连接、查询实例
Feb 13 #Python
You might like
使用adodb lite解决问题
2006/12/31 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
Python自定义简单图轴简单实例
2018/01/08 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
如何基于python测量代码运行时间
2019/12/25 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
Python内置函数locals和globals对比
2020/04/28 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
python线性插值解析
2020/07/05 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
如何解决python多种版本冲突问题
2020/10/13 Python
美国知名的在线旅游服务网站:Priceline
2016/07/23 全球购物
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物