Для начала нужно включить возможность использования 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, выполните следующие действия:
- Войдите в свою учетную запись Namecheap.
- Перейдите в меню «Profile» > «Tools menu»
- Прокрутите вниз до раздела «Business & Dev Tools». Нажмите на «MANAGE» рядом с «API Access» Namecheap.
- Переведите переключатель в положение ON, введите пароль своей учетной записи.
- Нажмите «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 Comments