whois.nim/src/whois.nim

85 lines
1.6 KiB
Nim

##[
:Author: Thiago Navarro
:Email: thiago@oxyoy.com
**Created at:** 06/06/2021 23:24:50 Sunday
**Modified at:** 06/09/2021 11:02:10 PM Wednesday
------------------------------------------------------------------------------
whois
------------------------------------------------------------------------------
Whois free client
]##
from std/strutils import split, strip
import whois/core; export core
# API selection
from whois/api_doyosi import nil
proc toDomain*(fullDomain: string): Domain {.noSideEffect.} =
## Convert a full domain string in a `Domain` instance
let splitted = fullDomain.split "."
if splitted.len != 2:
result.error = DomainError.invalidDomain
return
result.name = splitted[0]
result.tld = splitted[1]
proc update*(self: var Domain, noCache = false) =
## Updates the domain with api data
if self.error != DomainError.none: return
if api_doyosi.apiFetch(self, noCache): return # If any error, try next API
proc whois*(domain: string, noCache = false): Domain {.inline.} =
## A alias for:
## .. code-block:: nim
## var domain = "duckduckgo.com".toDomain
## domain.update()
result = domain.toDomain()
result.update(noCache)
when isMainModule:
import times
echo cputime()
var domain = "google.co".toDomain
var a: DomainData
echo domain
domain.update()
echo cputime()
echo domain
echo "update again"
domain.update()
echo cputime()
echo domain
echo "update again"
domain.update()
echo cputime()
echo domain
echo "update again"
domain.update(noCache = true)
echo cputime()
echo domain