Example #1
0
 def __init__(self, options, engine_overrides=None):
     super(Provider, self).__init__(options, engine_overrides)
     self.options = options
     self.client = namecheap.Api(ApiUser=options.get('auth_username', ''),
                                 ApiKey=options.get('auth_token', ''),
                                 UserName=options.get('auth_username', ''),
                                 ClientIP=options.get('auth_client_ip', ''),
                                 sandbox=options.get('auth_sandbox', False),
                                 debug=False)
     self.domain = self.options['domain']
     self.domain_id = None
Example #2
0
 def __init__(self, config):
     super(Provider, self).__init__(config)
     self.client = namecheap.Api(
         ApiUser=self._get_provider_option('auth_username') or '',
         ApiKey=self._get_provider_option('auth_token') or '',
         UserName=self._get_provider_option('auth_username') or '',
         ClientIP=self._get_provider_option('auth_client_ip') or '',
         sandbox=self._get_provider_option('auth_sandbox') or False,
         debug=False,
     )
     self.domain = self.domain
     self.domain_id = None
class CheckDomain(DomainGenerator):
    checked = 0
    api = namecheap.Api(configuration.USERNAME,
                        configuration.API_KEY,
                        configuration.USERNAME,
                        configuration.IP_ADDRESS,
                        sandbox=configuration.SANDBOX)

    url = "https://api.namecheap.com/xml.response?ApiUser={}&ApiKey={}&" \
          "UserName={}&ClientIP={}&Command=namecheap.users.getPricing&ProductType=DOMAIN&" \
          "ActionName=REGISTER".format(configuration.USERNAME, configuration.API_KEY, configuration.USERNAME,
                                       configuration.IP_ADDRESS)
    logger.info('Starting to get prices')
    # domain_prices = urlopen(url).read() # is better if it is cached
    soup = BeautifulSoup(open('prices.xml', 'r'), 'lxml')
    logger.info('Prices stored.')

    domains_to_check = 50

    function_requests_file = 0

    def check_domains_bulk(self, domains_list_found):
        """ Check domains generated by 'domains' and if there is any error for over-checking it will decrease the
        domains_to_check variable """

        CheckDomain.domains_to_check = 50

        if len(domains_list_found) <= CheckDomain.domains_to_check:
            CheckDomain.domains_to_check = len(domains_list_found)

        while True:
            try:
                logger.info(
                    'Requesting domain(s) availability. Currently data in VAR domains_to_check: {}'
                    .format(CheckDomain.domains_to_check))

                if CheckDomain.domains_to_check < 0:
                    return False

                return CheckDomain.api.domains_check(
                    domains_list_found[:CheckDomain.domains_to_check])

            except namecheap.ApiError:

                logger.info('Error handled - namecheap.ApiError')

                CheckDomain.domains_to_check -= 10

    def add_domain_price(self, domains_dict_available):
        """  Gets dictionary of domain names looked in check_domains_bulk and check if they are available so further
         steps are proceeded, like getting price, if it is premium and so on."""

        domain_product_prices = CheckDomain.soup.find(
            'product', {"name": configuration.tld[1:]})

        if domain_product_prices is not None:

            domain_price = domain_product_prices.findChildren()[0].attrs['price'] + \
                           domain_product_prices.findChildren()[0].attrs['currency']

            for domain, domain_info in domains_dict_available.items():

                if domains_dict_available[domain]['Premium'] is False:
                    domains_dict_available[domain]['Price'] = domain_price
                elif domains_dict_available[domain]['Premium'] is True:
                    logger.info('{} is premium'.format(domain))
                else:
                    logger.info('{} is not available'.format(domain))

            return domains_dict_available

        else:

            for domain, domain_info in domains_dict_available.items():

                if domains_dict_available[domain]['Premium'] is False:
                    domains_dict_available[domain]['Price'] = ''
                elif domains_dict_available[domain]['Premium'] is True:
                    logger.info('{} is premium'.format(domain))
                else:
                    logger.info('{} is not available'.format(domain))

            return domains_dict_available

    def remove_not_available(self, domains_dict_available):

        for domain, domain_info in list(domains_dict_available.items()):
            CheckDomain.checked += 1
            if domain_info['Available'] is False:
                del domains_dict_available[domain]

        return domains_dict_available

    def transfer_into_file(self, domains_dict_available):

        CheckDomain.function_requests_file += 1

        if CheckDomain.function_requests_file == 1:
            file = open(configuration.filename, 'w')
            logger.info('Writing headers into file')
            file.write('Domain,Premium,Price,Appraisal Value\n')
        else:
            file = open(configuration.filename, 'a')
            logger.info('Writing content into file')

        for domain, domain_info in domains_dict_available.items():

            file.write(
                domain + ',' + str(domain_info.get('Premium')) + ',' +
                domain_info.get('Price', 'Not found') + ',' +
                domain_info.get('Appraisal', 'Not found').replace(',', '') +
                '\n')
            logger.info('{} domain info has been written!'.format(domain))

        file.close()

        logger.info('Finished writing')
Example #4
0
 def __init__(self, username, api_key, ip_address):
     self.nc = namecheap.Api(username, api_key, username, ip_address, sandbox=False)