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应用的教程
Apr 16 Python
Python中threading模块join函数用法实例分析
Jun 04 Python
浅谈五大Python Web框架
Mar 20 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
解决python给列表里添加字典时被最后一个覆盖的问题
Jan 21 Python
Django的性能优化实现解析
Jul 30 Python
python进程的状态、创建及使用方法详解
Dec 06 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
python绘制趋势图的示例
Sep 17 Python
五分钟学会怎么用python做一个简单的贪吃蛇
Jan 12 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 session 检测和注销
2009/03/16 PHP
php session和cookie使用说明
2010/04/07 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
一些mootools的学习资源
2010/02/07 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
Angular(5.2->6.1)升级小结
2018/12/27 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
python的exec、eval使用分析
2017/12/11 Python
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
python list转矩阵的实例讲解
2018/08/04 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
寄语十八大感言
2014/02/07 职场文书
计算机专业自荐信
2014/05/24 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
邀请函的格式
2015/01/30 职场文书
雷锋的观后感
2015/06/10 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
mysql sock文件存储了什么信息
2022/07/15 MySQL