first commit
commit
390a8ba2d3
@ -0,0 +1,63 @@
|
||||
# DOMAPI - Domain API, basic management
|
||||
|
||||
DOMAPI is a quick and simple API to get properties of a domain name.
|
||||
|
||||
## Key features
|
||||
|
||||
* Purely Python
|
||||
* It's an API with 5 endpoints
|
||||
* Needs flask library
|
||||
* Needs wordsegment library
|
||||
* Needs python-whois library
|
||||
* Needs tldextract library
|
||||
|
||||
## Requirements
|
||||
|
||||
DOMAPI requires install next Python libraries with pip:
|
||||
|
||||
* pip install flask
|
||||
* pip install wordsegment
|
||||
* pip install python-whois
|
||||
* pip install tldextract
|
||||
|
||||
## Usage
|
||||
|
||||
- Run: python .\wodapi.py
|
||||
- Then, a server is deploy on http://127.0.0.1:5000
|
||||
- Use GET with endpoints
|
||||
- An error will occur if your parameter is not a well-formed domain.
|
||||
|
||||
## Endpoints
|
||||
|
||||
- words :: split a domain name in words. Only in English languaje, next versions will be available in other languages. Example: http://127.0.0.1:5000/words/hereyourdomainname.com
|
||||
- whois :: return full whois info from domain. It works with many extensions, although some have limitations in use, such as the .NET extension. Example: http://127.0.0.1:5000/whois/hereyourdomainname.com
|
||||
- tld :: return TLD or ccTLD or a domain. Example: http://127.0.0.1:5000/tld/hereyourdomainname.com
|
||||
- domain :: return only domain of a full domain. Example: http://127.0.0.1:5000/domain/hereyourdomainname.com
|
||||
- size :: returns the size of a domain, not counting its extension. Example: http://127.0.0.1:5000/size/hereyourdomainname.com
|
||||
|
||||
## TO-DO
|
||||
|
||||
- words in Italian and Spanish
|
||||
- test if a domain is IDN
|
||||
- conver between ascii-punycode-idn
|
||||
|
||||
## Documentation
|
||||
|
||||
This is the README file
|
||||
|
||||
## Authors
|
||||
|
||||
* Bichi - José Mª Ávila
|
||||
* Antonio Villamarin
|
||||
|
||||
## License
|
||||
|
||||
This is a NIDOMA development
|
||||
|
||||
## Links
|
||||
|
||||
- https://grantjenks.com/docs/wordsegment/
|
||||
- https://pypi.org/project/wordsegment/
|
||||
- https://blog.stoplight.io/python-rest-api
|
||||
- https://github.com/richardpenman/whois
|
||||
- https://pypi.org/project/tldextract/
|
@ -0,0 +1,78 @@
|
||||
import wordsegment
|
||||
import re
|
||||
import tldextract
|
||||
from wordsegment import load, segment
|
||||
from flask import Flask, json
|
||||
load()
|
||||
|
||||
api = Flask(__name__)
|
||||
|
||||
NOTVALIDDOMAIN={"error":{"code":400,"message":"Bad Request. Not valid domain."}}
|
||||
|
||||
def is_domain(value: str):
|
||||
pattern = re.compile(
|
||||
r'^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|'
|
||||
r'([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|'
|
||||
r'([a-zA-Z0-9][-_.a-zA-Z0-9]{0,61}[a-zA-Z0-9]))\.'
|
||||
r'([a-zA-Z]{2,13}|[a-zA-Z0-9-]{2,30}.[a-zA-Z]{2,3})$'
|
||||
)
|
||||
"""
|
||||
Return whether or not given value is a valid domain.
|
||||
If the value is valid domain name this function returns ``True``
|
||||
:param value: domain string to validate
|
||||
"""
|
||||
return pattern.match(value)
|
||||
|
||||
def get_domain(value: str):
|
||||
if(is_domain(value)):
|
||||
ext = tldextract.extract(value)
|
||||
return ext.domain
|
||||
|
||||
@api.route('/words/<string:name>', methods=['GET'])
|
||||
def get_words(name: str):
|
||||
if(is_domain(name)):
|
||||
data = {}
|
||||
data['words'] = segment(get_domain(name))
|
||||
return json.dumps(data)
|
||||
else:
|
||||
return json.dumps(NOTVALIDDOMAIN)
|
||||
|
||||
@api.route('/whois/<string:name>', methods=['GET'])
|
||||
def get_whois(name: str):
|
||||
if(is_domain(name)):
|
||||
import whois
|
||||
who_var = whois.whois(name)
|
||||
return json.dumps(who_var)
|
||||
else:
|
||||
return json.dumps(NOTVALIDDOMAIN)
|
||||
|
||||
@api.route('/tld/<string:name>', methods=['GET'])
|
||||
def get_tld(name: str):
|
||||
if(is_domain(name)):
|
||||
ext = tldextract.extract(name)
|
||||
data = {}
|
||||
data['tld'] = ext.suffix
|
||||
return json.dumps(data)
|
||||
else:
|
||||
return json.dumps(NOTVALIDDOMAIN)
|
||||
|
||||
@api.route('/domain/<string:name>', methods=['GET'])
|
||||
def get_onlydomain(name: str):
|
||||
if(is_domain(name)):
|
||||
data = {}
|
||||
data['domain'] = get_domain(name)
|
||||
return json.dumps(data)
|
||||
else:
|
||||
return json.dumps(NOTVALIDDOMAIN)
|
||||
|
||||
@api.route('/size/<string:name>', methods=['GET'])
|
||||
def get_size(name: str):
|
||||
if(is_domain(name)):
|
||||
data = {}
|
||||
data['size'] = len(get_domain(name))
|
||||
return json.dumps(data)
|
||||
else:
|
||||
return json.dumps(NOTVALIDDOMAIN)
|
||||
|
||||
if __name__ == '__main__':
|
||||
api.run()
|
Loading…
Reference in New Issue