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 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
Python正则表达式匹配和提取IP地址
Jun 06 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
python实现超市商品销售管理系统
Nov 22 Python
python之array赋值技巧分享
Nov 28 Python
python实现PCA降维的示例详解
Feb 24 Python
Python生成器实现简单"生产者消费者"模型代码实例
Mar 27 Python
使用Django搭建网站实现商品分页功能
May 22 Python
使用django自带的user做外键的方法
Nov 30 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
Apr 21 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将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
PHP登录(ajax提交数据和后台校验)实例分享
2016/12/29 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
[58:00]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第二场 2月7日
2021/03/11 DOTA
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
python中正则的使用指南
2016/12/04 Python
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
成都思必达公司C#程序员招聘面试题
2013/06/26 面试题
励志演讲稿200字
2014/08/21 职场文书
大学生交通专业求职信
2014/09/01 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
聘用合同范本
2015/09/21 职场文书