今天介绍一个非常有名的域名购买网站,对于网站的使用这里就不多说,直接开始正题,使用python调用godaddy的api,统计域名的详细信息。
###首先,能正常使用api的前提是你已经购买了域名。
###第二,如果不熟悉godaddy的调用过程,官方也给了详细的步骤与使用的说明文档。

###第三,需要获取api的认证,在这里点击 Getting Access 是key与secret。注意,其中的Test无法使用的,需要用产品的key与对应的secret才可以。而且,一旦选择创建key之后,里面的secret只会出现一次,所以好好保存。

###第四,查阅api的官方文档,熟悉每个api的作用。
其中使用的最多的应该也就是/v1/domains 这个系列的api了,所以如果有需要,多了解。

- 注意:
- 这里,godaddy官方只提供了api的借口,对于python使用的第三方库是没有的。所以只能自己搜或者自己写。我比较推荐的是godaddypy,这里也使用的是这个库。
####我们的需求:
- 将对应账户里面的所有域名提取出来,然后打印出每个域名对应的创建时间,截止时间,公司信息,是否自动续费和域名状态。
###代码:
# -*- coding: utf-8 -*-
"""
@Auth: jackie.yuan
@Email: 13772002022@163.com
@Description: get godaddy's domains infomation
"""
import json,time
from datetime import datetime
from godaddypy import Client, Account
# 填写用户名称
admin = "xxx"+"'s domain info"
# 存储文件路径
set_path = "xxx"
# 获取认证,需要的是api的key和对应的secret
my_acct = Account(api_key='xxx', api_secret='xxx')
client = Client(my_acct)
# ----------------------------- 当代码已经完美运行之后,只需要修改上面带x的部分就好了
# 获取账户的域的信息(默认100 个,即少于100时直接用这个)
# Domains = client.get_domains()
# 获取账户的域的信息(limit为需要的数量,或者为用户域的数量,官方规定为0-1000)
Domains = client.get_domains_withlimit(1000) #需要添加
# 因为这个库不提供带修改限制的方法,所以要在库函数client.py中添加这个方法:
"""
def get_domains_withlimit(self, limit):
# Returns a list of domains for the authenticated user. add limit
url = self.API_TEMPLATE + self.DOMAINS + u'?limit={}'.format(limit)
data = self._get_json_from_response(url)
domains = list()
for item in data:
domain = item['domain']
domains.append(domain)
self.logger.debug('Discovered domains: {}'.format(domain))
return domains
"""
# 存放指定域名要求获取的对应信息
def Specified_info(i):
domain_info = client.get_domain_info(i)
# expires_date = domain_info["expires"]
if client.get_domain_info(i).has_key("expires"):
expires_date = datetime.strptime(domain_info["expires"],"%Y-%m-%dT%H:%M:%SZ").strftime("%Y/%m/%d")
else:
expires_date = "None"
if client.get_domain_info(i).has_key("contactRegistrant"):
organization = client.get_domain_info(i)["contactRegistrant"]["organization"]
else:
organization = "None"
# organization = domain_info["contactRegistrant"]["organization"]
Auto_renew = domain_info["renewAuto"]
try:
datetime.strptime(domain_info["createdAt"], "%Y-%m-%dT%H:%M:%SZ").strftime("%Y/%m/%d")
except ValueError:
create_date = datetime.strptime(domain_info["createdAt"], "%Y-%m-%dT%H:%M:%S.%fZ").strftime("%Y/%m/%d")
else:
create_date = datetime.strptime(domain_info["createdAt"], "%Y-%m-%dT%H:%M:%SZ").strftime("%Y/%m/%d")
STATUS = domain_info["status"]
return expires_date, organization, Auto_renew, create_date, STATUS
# 写入属性
with open(set_path, "a+") as f:
f.write("\n" + admin + "\n")
f.writelines(" domain , expires , organization , Auto-Renew , create_date , status\n") #用逗号分隔是为了可以直接存储在excel中。
# 对应每一个域名的信息分别存储
for i in Domains:
if i == "bigtrafficgenerator.info": continue
# Domain_Info_Specified = json.dumps(client.get_domain_info(i))
# Domain_Info_Specified = client.get_domain_info(i)
expires_date, organization, Auto_renew, create_date, STATUS = Specified_info(i)
with open(set_path, "a+") as f:
f.write(i+",")
# f.writelines(Domain_Info_Specified + "\n")
# f.write("到期日 : ")
json.dump(expires_date, f)
f.write(",")
# f.write("所属公司 : ")
json.dump(organization, f)
f.write(",")
# f.write("Auto-Renew : ")
json.dump(Auto_renew, f)
f.write(",")
# f.write("分配时间 : ")
json.dump(create_date, f)
f.write(",")
json.dump(STATUS, f)
f.write(",\n")
f.flush()
print "get domain {} info success...".format(i)
time.sleep(0.5) # 这个非常重要!! 不然客户端有可能会识别为类似DDOS攻击,时间自己把控
with open(set_path, "a+") as f:
f.write("\n")
print "get all {} finished ! ".format(admin)
if __name__ == "__main__":
pass
####由于我的文件路径直接指定了 xxx.csv 格式存储,所以结果直接可以在excel显示:
