Для начала нужно включить возможность использования API для аккаунта. Для этого, вы должны соответствовать одному из следующих требований:

  • иметь как минимум 20 доменов под своей учетной записью;
  • иметь на своем счете не менее 50 долларов;
  • потратить не менее 50 долларов за последние 2 года.

Если ваша учетная запись не подходит под эти требования, можно создать аккаунт в песочнице Namecheap по ссылке https://www.sandbox.namecheap.com/myaccount/signup/

Так же песочницу можно использовать для тестирования скрипта, все действия в песочнице никак не повлияют на работу вашего аккаунта, но в песочнице не всегда отображается актуальная информация.
При работе с API в тестовой среде/песочнице используется адрес:
https : //api.sandbox.namecheap.com/xml.response
Основной адрес:
https : //api.namecheap.com/xml.response

Чтобы включить доступ через API, выполните следующие действия:

  1. Войдите в свою учетную запись Namecheap.
  2. Перейдите в меню «Profile» > «Tools menu»
  3. Прокрутите вниз до раздела «Business & Dev Tools». Нажмите на «MANAGE» рядом с «API Access» Namecheap.
  4. Переведите переключатель в положение ON, введите пароль своей учетной записи.
  5. Нажмите «Edit» рядом с «Whitelisted IPs» > «Add IP» > Введите название, IP адрес откуда будут выполняться запросы и ваш пароль, после чего нажмите на кнопку «Save Changes».

После включения доступа к API вам будет присвоен APIKey, который будет использоваться при работе с API. Инструкции по работе с API Namecheap:
https://www.namecheap.com/support/api/intro/

https://www.namecheap.com/support/api/methods/users/get-pricing/


Можно приступать к запуску скрипта. Собственно сам скрипт:

import xml.etree.ElementTree as ET
import requests
import os.path
from os import path
def api_request(domain):
    url = 'https://api.namecheap.com/xml.response?ApiUser=username&ApiKey=api_key&UserName=username&ClientIp=clientIPaddress&Command=namecheap.users.getPricing&ProductType=DOMAIN&ProductName='+domain
    api = requests.get(url)
    if api.status_code == 200:
        if path.exists('domain.xml'):
            with open('domain.xml', 'w') as file:
                file.write(api.text)
                file.close()
                return True
        else:
            with open('domain.xml', 'a') as file:
                file.write(api.text)
                file.close()
                return True
    else:
        return False
def parser(domain):
    tree = ET.parse('domain.xml')#Open the file
    root = tree.getroot()
    lis = []
    #print (root.attrib)
    res = ""
    for y in root[3][0][0]:
        productcategory = y.attrib#get categories
        if (productcategory.get('Name')) == 'redemption':# skip non-use categories
            continue
        elif (productcategory.get('Name')) == "landrush":
            continue
        elif (productcategory.get('Name')) == "preorder":
            continue
        elif (productcategory.get('Name')) == "reactivate":
            continue
        res = res + "\t" + productcategory.get('Name') + " "
        for i in y:
            price = i[0].attrib# get price
            cost = price.get('YourAdditonalCost')
            if cost is None:
                cost = str(cost).replace('None', '0')
            res = res + price.get('Duration') + price.get('DurationType') + " " + str(round((float(price.get('RegularPrice'))) + float(cost),2)) + " "
            if (float(price.get('YourPrice')) != float(price.get('RegularPrice'))):
                res = res + "(" + str(round(float(price.get('YourPrice'))+ float(cost),2)) + ")"
            else:
                res = res + "      "
    lis.append(res)
    result = '\n'.join(lis)
    return result
list = ['info', 'net', 'org', 'fun','host','me', 'biz', 'pro', 'cc', 'com','mobi','co','in','tv','site', 'io', 'de']
for i in list:
    if api_request(i):
        print(i,"\t\t\t",parser(i))
    else:
        print("Error")

В переменной url, вместо username, api_key и clientIPaddress подставляем название пользователя, ключ API  и IP адрес соответственно.
В переменной list задается список доменов, подставляем туда нужные домены.
Ограничение вызовов API составляет 20/мин, 700/час и 8000/день на ключ. Если планируется проверка больше чем 20 доменов одновременно, рекомендуется добавить задержку в скрипт, чтобы не превысить ограничение.
Скрипт так же проверяет, требуется ли дополнительная плата ICANN в размере $0.18 и добавляет её в стоимость домена.
Для работы скрипта требуется python3 и дополнительный модуль requests.
Результат работы скрипта:
info                            register 1YEAR 15.16 (4.06)     renew 1YEAR 15.16               transfer 1YEAR 15.16
net                             register 1YEAR 13.16 (12.16)    renew 1YEAR 15.16               transfer 1YEAR 12.06 (11.06)
org                             register 1YEAR 13.16            renew 1YEAR 15.16               transfer 1YEAR 11.66
fun                             register 1YEAR 20.06 (3.06)     renew 1YEAR 22.06 (15.16)       transfer 1YEAR 20.06 (17.06)
host                            register 1YEAR 85.06 (3.06)     renew 1YEAR 87.06 (20.06)       transfer 1YEAR 85.06 (70.06)
me                              register 1YEAR 18.99 (4.88)     renew 1YEAR 20.98               transfer 1YEAR 15.99
biz                             register 1YEAR 16.06 (5.06)     renew 1YEAR 17.06               transfer 1YEAR 16.06
pro                             register 1YEAR 15.16 (3.06)     renew 1YEAR 16.06               transfer 1YEAR 15.16
cc                              register 1YEAR 9.88 (5.88)      renew 1YEAR 13.88               transfer 1YEAR 11.88
com                             register 1YEAR 9.06             renew 1YEAR 13.16               transfer 1YEAR 9.06 (8.76)
mobi                            register 1YEAR 18.16 (4.06)     renew 1YEAR 18.16               transfer 1YEAR 18.16
co                              register 1YEAR 23.98 (7.98)     renew 1YEAR 25.98               transfer 1YEAR 22.99
in                              register 1YEAR 9.98 (6.78)      renew 1YEAR 11.98               transfer 1YEAR 9.99 (6.78)
tv                              register 1YEAR 29.88            renew 1YEAR 31.88               transfer 1YEAR 28.88
site                            register 1YEAR 26.06 (2.06)     renew 1YEAR 28.06 (20.06)       transfer 1YEAR 26.06 (21.86)
io                              register 1YEAR 32.88 (28.88)    renew 1YEAR 34.88               transfer 1YEAR 32.88

1 колонка — название домена, 2 — стоимость регистрации, 3 — стоимость продления и 4 — стоимость трансфера. В скобках указана цена со скидкой.

 

Рубрики: Разное

0 комментариев

Добавить комментарий