需求:每天有大量的域名需要解析,變更,負責解析域名的妹子實屬傷不起,批量更新添加的需求誕生了。 <a href="https://www.dnspod.cn/docs/index.html"> https://www.dnspod.cn/docs/index.html</a> 注1:依據個人笨拙的程式設計思想,碼了這麼一堆代碼,總算實作的添加更新功能,潛在bug尚不清楚。歡迎有興趣的朋友一起讨論。 注2:以下代碼适用于python2.6以下,如果python2.6以上的需要将代碼中的:except Exception,e修改為:except Exception as e <b>注3:</b>在dnsapi.apicn源代碼中Ddns類中,需要把#record_type=record_type,這一行注釋掉進行安裝,已安裝的需要把pyc檔案删除,重新import即可 域名清單格式要求如下: 域名 電信IP,聯通IP www.baidu.com 1.1.1.1,2.2.2.2 www.sohu.com ,3.3.3.3 music.baidu.com 4.4.4.4,
代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<code>#!/usr/bin/env python</code>
<code>#-*- coding:utf-8 -*-</code>
<code>#who:[email protected]</code>
<code>#when:2013-08-14</code>
<code>import</code> <code>os,sys</code>
<code>from</code> <code>dnspod.apicn </code><code>import</code> <code>*</code>
<code>domain_list</code><code>=</code><code>[]</code>
<code>domain_dic</code><code>=</code><code>{}</code>
<code>illegal_list</code><code>=</code><code>[]</code>
<code>login_email</code><code>=</code><code>"XXXXX"</code>
<code>password</code><code>=</code><code>"XXXXX"</code>
<code>domain_file</code><code>=</code><code>"/root/dns"</code>
<code>def</code> <code>domain_index(domain_file):</code>
<code> </code><code>all_domain_list</code><code>=</code><code>[]</code>
<code> </code><code>for</code> <code>line </code><code>in</code> <code>file</code><code>(domain_file).readlines():</code>
<code> </code><code>if</code> <code>line </code><code>=</code><code>=</code> <code>'\n'</code><code>:</code>
<code> </code><code>continue</code>
<code> </code><code>if</code> <code>line[</code><code>-</code><code>1</code><code>] </code><code>=</code><code>=</code> <code>'\n'</code><code>:</code>
<code> </code><code>line</code><code>=</code><code>line[:</code><code>-</code><code>1</code><code>]</code>
<code> </code><code>all_domain_list.append(</code><code>'.'</code><code>.join(line.split()[</code><code>0</code><code>].split(</code><code>'.'</code><code>)[</code><code>-</code><code>2</code><code>:]))</code>
<code> </code><code>domain_list</code><code>=</code><code>list</code><code>(</code><code>set</code><code>(all_domain_list))</code>
<code> </code><code>api</code><code>=</code><code>DomainList(email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>
<code> </code><code>all_msg</code><code>=</code><code>api().get(</code><code>"domains"</code><code>)</code>
<code> </code><code>exists_list</code><code>=</code><code>[]</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>,</code><code>len</code><code>(all_msg)):</code>
<code> </code><code>exists_list.append(all_msg[i].get(</code><code>"name"</code><code>))</code>
<code> </code><code>for</code> <code>dom </code><code>in</code> <code>domain_list:</code>
<code> </code><code>if</code> <code>dom </code><code>not</code> <code>in</code> <code>exists_list:</code>
<code> </code><code>api_create</code><code>=</code><code>DomainCreate(dom,email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>domain_create</code><code>=</code><code>api_create()</code>
<code> </code><code>all_msg</code><code>=</code><code>api().get(</code><code>"domains"</code><code>)</code>
<code> </code><code>for</code> <code>n </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>,</code><code>len</code><code>(all_msg)):</code>
<code> </code><code>if</code> <code>dom </code><code>=</code><code>=</code> <code>all_msg[n].get(</code><code>"name"</code><code>):</code>
<code> </code><code>dom_id</code><code>=</code><code>all_msg[n].get(</code><code>"id"</code><code>)</code>
<code> </code><code>domain_dic[dom]</code><code>=</code><code>dom_id</code>
<code> </code><code>except</code> <code>Exception,e:</code>
<code> </code><code>illegal_list.append(dom)</code>
<code> </code><code>#print "[Error:] %s" % e</code>
<code> </code><code>print</code> <code>"""\033[31m[Error]: Create domain [ %s ] Fail</code>
<code> </code><code>.....You may not have permission to create it ! \033[0m"""</code> <code>%</code> <code>dom</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>all_msg</code><code>=</code><code>api().get(</code><code>"domains"</code><code>)</code>
<code> </code><code>for</code> <code>n </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>,</code><code>len</code><code>(all_msg)):</code>
<code> </code><code>if</code> <code>dom </code><code>=</code><code>=</code> <code>all_msg[n].get(</code><code>"name"</code><code>):</code>
<code> </code><code>dom_id</code><code>=</code><code>all_msg[n].get(</code><code>"id"</code><code>)</code>
<code> </code><code>domain_dic[dom]</code><code>=</code><code>dom_id</code>
<code>def</code> <code>add_record(domain,ip):</code>
<code> </code><code>if</code> <code>len</code><code>(ip.split(</code><code>','</code><code>)) </code><code>=</code><code>=</code> <code>2</code><code>:</code>
<code> </code><code>tel_ip</code><code>=</code><code>ip.split(</code><code>','</code><code>)[</code><code>0</code><code>]</code>
<code> </code><code>unic_ip</code><code>=</code><code>ip.split(</code><code>','</code><code>)[</code><code>1</code><code>]</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>print</code> <code>"\033[31m[Error]: IP format error...\033[0m"</code>
<code> </code><code>#sys.exit()</code>
<code> </code><code>sub_dom</code><code>=</code><code>'.'</code><code>.join(domain.split(</code><code>'.'</code><code>)[:</code><code>-</code><code>2</code><code>])</code>
<code> </code><code>dom_name</code><code>=</code><code>[</code><code>'.'</code><code>.join(domain.split(</code><code>'.'</code><code>)[</code><code>-</code><code>2</code><code>:])]</code>
<code> </code><code>for</code> <code>k,v </code><code>in</code> <code>domain_dic.iteritems():</code>
<code> </code><code>if</code> <code>k </code><code>in</code> <code>dom_name:</code>
<code> </code><code>domain_id</code><code>=</code><code>domain_dic[k]</code>
<code> </code><code>#print sub_dom #debug</code>
<code> </code><code>api_subdom</code><code>=</code><code>RecordList(domain_id,email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>rec_list</code><code>=</code><code>api_subdom().get(</code><code>"records"</code><code>)</code>
<code> </code><code>tmp_sub</code><code>=</code><code>[]</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>,</code><code>len</code><code>(rec_list)):</code>
<code> </code><code>tmp_sub.append(rec_list[i].get(</code><code>"name"</code><code>))</code>
<code> </code><code>if</code> <code>sub_dom </code><code>in</code> <code>tmp_sub:</code>
<code> </code><code>#print "[Error]: Sub_domain [ %s.%s ] exists..." % (sub_dom,'.'.join(domain.split('.')[-2:]))</code>
<code> </code><code>update_record(rec_list,sub_dom,domain_id,</code><code>'.'</code><code>.join(domain.split(</code><code>'.'</code><code>)[</code><code>-</code><code>2</code><code>:]),tel_ip,unic_ip)</code>
<code> </code><code>tel_record</code><code>=</code><code>RecordCreate(sub_dom,</code><code>"A"</code><code>,u</code><code>'預設'</code><code>.encode(</code><code>"utf8"</code><code>),tel_ip,</code><code>600</code><code>,domain_id</code><code>=</code><code>domain_id,email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>
<code> </code><code>unic_record</code><code>=</code><code>RecordCreate(sub_dom,</code><code>"A"</code><code>,u</code><code>'聯通'</code><code>.encode(</code><code>"utf8"</code><code>),unic_ip,</code><code>600</code><code>,domain_id</code><code>=</code><code>domain_id,email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>
<code> </code><code>tel_record()</code>
<code> </code><code>print</code> <code>"\033[32m[Notice]: Add record [ %s.%s ] -- [ %s ] successful!\033[0m"</code> <code>%</code> <code>(sub_dom,</code><code>'.'</code><code>.join(domain.split(</code><code>'.'</code><code>)[</code><code>-</code><code>2</code><code>:]),tel_ip)</code>
<code> </code><code>unic_record()</code>
<code> </code><code>print</code> <code>"\033[32m[Notice]: Add record [ %s.%s ] -- [ %s ] successful!\033[0m"</code> <code>%</code> <code>(sub_dom,</code><code>'.'</code><code>.join(domain.split(</code><code>'.'</code><code>)[</code><code>-</code><code>2</code><code>:]),unic_ip)</code>
<code> </code><code>except</code><code>:</code>
<code> </code><code>print</code> <code>"\033[31m[Error]: Add sub_domain record some error...\033[0m"</code>
<code>def</code> <code>update_record(rec_list,sub_dom,domain_id,dom,tel_ip</code><code>=</code><code>"</code><code>",unic_ip="</code><code>"):</code>
<code> </code><code>for</code> <code>nu </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>,</code><code>len</code><code>(rec_list)):</code>
<code> </code><code>if</code> <code>sub_dom </code><code>=</code><code>=</code> <code>rec_list[nu].get(</code><code>"name"</code><code>):</code>
<code> </code><code>record_id</code><code>=</code><code>rec_list[nu].get(</code><code>"id"</code><code>)</code>
<code> </code><code>if</code> <code>rec_list[nu].get(</code><code>"line"</code><code>) </code><code>=</code><code>=</code> <code>u</code><code>"預設"</code> <code>and</code> <code>tel_ip:</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>tel_update_record</code><code>=</code><code>RecordDdns(record_id,sub_dom,</code><code>"預設"</code><code>,domain_id</code><code>=</code><code>domain_id,ttl</code><code>=</code><code>600</code><code>,value</code><code>=</code><code>tel_ip,email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>
<code> </code><code>tel_update_record()</code>
<code> </code><code>print</code> <code>"\033[32m[Notice]: Update [ %s.%s ] --- [ %s ] Successful!\033[0m"</code> <code>%</code> <code>(sub_dom,dom,tel_ip)</code>
<code> </code><code>except</code> <code>Exception,e:</code>
<code> </code><code>print</code> <code>"[Error]: %s"</code> <code>%</code> <code>e</code>
<code> </code><code>print</code> <code>"\033[31m.......... Update [ %s.%s ] --- [ %s ] Fail!\033[0m"</code> <code>%</code> <code>(sub_dom,dom,tel_ip)</code>
<code> </code><code>elif</code> <code>rec_list[nu].get(</code><code>"line"</code><code>) </code><code>=</code><code>=</code> <code>u</code><code>"聯通"</code> <code>and</code> <code>unic_ip:</code>
<code> </code><code>unic_update_record</code><code>=</code><code>RecordDdns(record_id,sub_dom,</code><code>"聯通"</code><code>,domain_id</code><code>=</code><code>domain_id,ttl</code><code>=</code><code>600</code><code>,value</code><code>=</code><code>unic_ip,email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>
<code> </code><code>unic_update_record()</code>
<code> </code><code>print</code> <code>"\033[32m[Notice]: Update [ %s.%s ] --- [ %s ] Successful!\033[0m"</code> <code>%</code> <code>(sub_dom,dom,unic_ip)</code>
<code> </code><code>print</code> <code>"\033[31m.......... Update [ %s.%s ] --- [ %s ] Fail!\033[0m"</code> <code>%</code> <code>(sub_dom,dom,unic_ip)</code>
<code> </code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>
<code> </code><code>if</code> <code>os.path.isfile(domain_file):</code>
<code> </code><code>domain_index(domain_file)</code>
<code> </code><code>for</code> <code>line </code><code>in</code> <code>file</code><code>(domain_file).readlines():</code>
<code> </code><code>if</code> <code>line </code><code>=</code><code>=</code> <code>'\n'</code><code>:</code>
<code> </code><code>continue</code>
<code> </code><code>if</code> <code>line[</code><code>-</code><code>1</code><code>] </code><code>=</code><code>=</code> <code>'\n'</code><code>:</code>
<code> </code><code>line</code><code>=</code><code>line[:</code><code>-</code><code>1</code><code>]</code>
<code> </code><code>if</code> <code>illegal_list:</code>
<code> </code><code>for</code> <code>g </code><code>in</code> <code>illegal_list:</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>line.split()[</code><code>0</code><code>].index(g)</code>
<code> </code><code>except</code><code>:</code>
<code> </code><code>add_record(line.split()[</code><code>0</code><code>],line.split()[</code><code>1</code><code>])</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>add_record(line.split()[</code><code>0</code><code>],line.split()[</code><code>1</code><code>])</code>
<code> </code><code>print</code> <code>"\033[31m[Error]: Domain file [ %s ]not found...\033[0m"</code> <code>%</code> <code>domain_file</code>
<code> </code><code>sys.exit()</code>
<a href="http://down.51cto.com/data/2363339" target="_blank">附件:http://down.51cto.com/data/2363339</a>
本文轉自 向陽草米奇 51CTO部落格,原文連結:http://blog.51cto.com/grass51/1273375,如需轉載請自行聯系原作者