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开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
Python实现简单过滤文本段的方法
May 24 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
Apr 02 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
在Windows中设置Python环境变量的实例讲解
Apr 28 Python
python样条插值的实现代码
Dec 17 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
Dec 18 Python
详解python配置虚拟环境
Apr 08 Python
python django生成迁移文件的实例
Aug 31 Python
用Python画小女孩放风筝的示例
Nov 23 Python
python 常见的反爬虫策略
Sep 27 Python
python利用文件时间批量重命名照片和视频
Feb 09 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入门教程 精简版
2009/12/13 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
利用python程序帮大家清理windows垃圾
2017/01/15 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
详解python如何引用包package
2020/06/07 Python
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
大学生自我鉴定
2013/12/16 职场文书
全国道德模范事迹
2014/02/01 职场文书
农村婚礼主持词
2014/03/13 职场文书
动员大会主持词
2014/03/20 职场文书
自我鉴定书
2014/03/24 职场文书
和睦家庭事迹
2014/05/14 职场文书
求职信怎么写
2014/05/23 职场文书
小学班主任培训方案
2014/06/04 职场文书
三八活动策划方案
2014/08/17 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL
python中的random模块和相关函数详解
2022/04/22 Python