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高并发异步服务器核心库forkcore使用方法
Nov 26 Python
python实现apahce网站日志分析示例
Apr 02 Python
用Python制作简单的朴素基数估计器的教程
Apr 01 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
将Django框架和遗留的Web应用集成的方法
Jul 24 Python
Python实现针对中文排序的方法
May 09 Python
pycharm远程开发项目的实现步骤
Jan 20 Python
matplotlib实现区域颜色填充
Mar 18 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
Apr 30 Python
python在地图上画比例的实例详解
Nov 13 Python
Python xlwings插入Excel图片的实现方法
Feb 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
node+express+jade制作简单网站指南
2014/11/26 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
Element Steps步骤条的使用方法
2020/07/26 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
python根据出生日期返回年龄的方法
2015/03/26 Python
python学习之编写查询ip程序
2016/02/27 Python
Pycharm学习教程(2) 代码风格
2017/05/02 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
用Python写一个for循环的例子
2016/07/19 面试题
数学检讨书1000字
2014/02/24 职场文书
市场营销方案范文
2014/03/11 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
关于感恩的作文
2019/08/26 职场文书