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 相关文章推荐
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
python使用str & repr转换字符串
Oct 13 Python
Python yield 使用方法浅析
May 20 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
Django restframework 源码分析之认证详解
Feb 22 Python
浅谈pyqt5在QMainWindow中布局的问题
Jun 21 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
Apr 24 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 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
PHP的栏目导航程序
2006/10/09 PHP
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
Django框架中方法的访问和查找
2015/07/15 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
致标枪运动员广播稿
2014/02/06 职场文书
检讨书范文2000字
2015/01/28 职场文书
python画条形图的具体代码
2022/04/20 Python