import requests
import json
import CloudFlare

def get_cf_ip_top20_json():
    # 发送 HTTP 请求
    response = requests.get("https://vps789.com/vps/sum/cfIpTop20")

    # 检查响应状态码
    if response.status_code == 200:
        # 返回 JSON 数据
        return response.json()
    else:
        # 返回 None 表示请求失败
        return None

def parse_cf_ip_top20():
    # 获取优选IP
    data = get_cf_ip_top20_json()

    # 提取服务器信息
    servers = data["data"]["good"]

    # 选丢包率小于1的IP
    ip_addresses = []
    for server in servers:
        if server["avgPkgLostRate"] < 1:
            ip_addresses.append(server["ip"])

    return ip_addresses

# 获取优选IP
ip_addresses = parse_cf_ip_top20()

# Cloudflare API 凭证
cloudflare_api_key = "替换你CF的API密钥"
cloudflare_email = "替换你登录CF的邮箱"
zone_id = "你域名的区域ID"

# 域名
domain_name = "替换你在cf托管的域名,比如jose.free.hr"
# DNS 记录名称
record_short_name = "替换你的dns名称,比如cfip"
# 优选域名全名称
record_name = "替换你的域名全称 比如cfip.jose.free.hr"

# 要添加的 DNS 记录
dns_records = []
for ip_address in ip_addresses:
    print(ip_address)
    dns_record = {
            "type": "A",
            "name": record_short_name,
            "content": ip_address,
            "ttl": 120,
            "proxied": False,
        }
    dns_records.append(dns_record)

            
cf = CloudFlare.CloudFlare(cloudflare_email, cloudflare_api_key)
    
# 删除记录
record_type = 'A'
old_dns_records = cf.zones.dns_records.get(zone_id, params={'name': record_name, 'type': record_type})
print('开始删除DNS记录')
for record in old_dns_records:
    print(record['id'], record['name'], record['type'], record['content'])
    dns_record_id = record['id']
    cf.zones.dns_records.delete(zone_id, dns_record_id)
print('删除DNS记录完成')

# 添加记录
print('开始添加新的DNS记录')
for dns_record in dns_records:
    try:
        print(dns_record['content'])
        r = cf.zones.dns_records.post(zone_id, data=dns_record)
    except CloudFlare.CloudFlareAPIError as e:
        exit('/zones.dns_records.post %s - %d %s' % (record['name'], e, e))
print('添加新的DNS记录成功')