├── .gitattributes ├── .gitignore ├── LICENSE ├── c99api ├── __init__.py ├── api_handler.py └── methods.py ├── example_usage.py ├── install.bat ├── readme.md ├── requirements.txt └── setup.py /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Haste171 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /c99api/__init__.py: -------------------------------------------------------------------------------- 1 | from c99api.api_handler import EndpointClient 2 | -------------------------------------------------------------------------------- /c99api/api_handler.py: -------------------------------------------------------------------------------- 1 | # Client for handling responses from API and outputting in desired format 2 | 3 | import requests 4 | from .methods import register_methods 5 | 6 | @register_methods 7 | 8 | class EndpointClient: 9 | 10 | key = None 11 | base_url = 'https://api.c99.nl' 12 | 13 | @classmethod 14 | def fetch_endpoint(cls, endpoint_name, json=True, **kwargs): 15 | if not cls.key: 16 | raise ValueError("API key not set. Use c99_api.key = 'your_api_key'") 17 | 18 | json_query = '&json' if json else '' 19 | 20 | endpoint_list = { 21 | 'phonelookup': cls.base_url + f'/phonelookup?key={cls.key}&number={kwargs.get("number")}{json_query}', 22 | 'emailvalidator': cls.base_url + f'/emailvalidator?key={cls.key}&email={kwargs.get("email")}{json_query}', 23 | 'disposablemailchecker': cls.base_url + f'/disposablemailchecker?key={cls.key}&email={kwargs.get("email")}{json_query}', 24 | 'portscanner': cls.base_url + f'/portscanner?key={cls.key}&host={kwargs.get("host")}{json_query}', 25 | 'portscanner_port': cls.base_url + f'/portscanner?key={cls.key}&host={kwargs.get("host")}&port={kwargs.get("port")}{json_query}', 26 | 'ping': cls.base_url + f'/ping?key={cls.key}&host={kwargs.get("host")}{json_query}', 27 | 'gethostname': cls.base_url + f'/gethostname?key={cls.key}&host={kwargs.get("host")}{json_query}', 28 | 'dnschecker': cls.base_url + f'/dnschecker?key={cls.key}&url={kwargs.get("url")}&type={kwargs.get("type")}{json_query}', 29 | 'dnsresolver': cls.base_url + f'/dnsresolver?key={cls.key}&host={kwargs.get("host")}&server={kwargs.get("server")}{json_query}', 30 | 'ipvalidator': cls.base_url + f'/ipvalidator?key={cls.key}&ip={kwargs.get("ip")}{json_query}', 31 | 'torchecker': cls.base_url + f'/torchecker?key={cls.key}&ip={kwargs.get("ip")}{json_query}', 32 | 'iplogger': cls.base_url + f'/iplogger?key={cls.key}&action={kwargs.get("action")}{json_query}', 33 | 'proxydetector': cls.base_url + f'/proxydetector?key={cls.key}&ip={kwargs.get("ip")}{json_query}', 34 | 'subdomainfinder': cls.base_url + f'/subdomainfinder?key={cls.key}&domain={kwargs.get("domain")}{json_query}', 35 | 'firewalldetector': cls.base_url + f'/firewalldetector?key={cls.key}&url={kwargs.get("url")}{json_query}', 36 | 'ip2domains': cls.base_url + f'/ip2domains?key={cls.key}&ip={kwargs.get("ip")}{json_query}', 37 | 'alexarank': cls.base_url + f'/alexarank?key={cls.key}&url={kwargs.get("url")}{json_query}', 38 | 'whois': cls.base_url + f'/whois?key={cls.key}&domain={kwargs.get("domain")}{json_query}', 39 | 'createscreenshot': cls.base_url + f'/createscreenshot?key={cls.key}&url={kwargs.get("url")}{json_query}', 40 | 'geoip': cls.base_url + f'/geoip?key={cls.key}&host={kwargs.get("host")}{json_query}', 41 | 'upordown': cls.base_url + f'/upordown?key={cls.key}&host={kwargs.get("host")}{json_query}', 42 | 'reputationchecker': cls.base_url + f'/reputationchecker?key={cls.key}&url={kwargs.get("url")}{json_query}', 43 | 'getheaders': cls.base_url + f'/getheaders?key={cls.key}&host={kwargs.get("host")}{json_query}', 44 | 'linkbackup': cls.base_url + f'/linkbackup?key={cls.key}&url={kwargs.get("url")}{json_query}', 45 | 'urlshortener': cls.base_url + f'/urlshortener?key={cls.key}&url={kwargs.get("url")}{json_query}', 46 | 'bitcoinbalance': cls.base_url + f'/bitcoinbalance?key={cls.key}&address={kwargs.get("address")}{json_query}', 47 | 'ethereumbalance': cls.base_url + f'/ethereumbalance?key={cls.key}&address={kwargs.get("address")}{json_query}', 48 | 'currency': cls.base_url + f'/currency?key={cls.key}&amount={kwargs.get("amount")}&from={kwargs.get("from")}&to={kwargs.get("to")}{json_query}', 49 | 'currencyrates': cls.base_url + f'/currencyrates?key={cls.key}&source={kwargs.get("source")}{json_query}', 50 | 'randomstringpicker': cls.base_url + f'/randomstringpicker?key={cls.key}&textfile={kwargs.get("textfile")}{json_query}', 51 | 'dictionary': cls.base_url + f'/dictionary?key={cls.key}&word={kwargs.get("word")}{json_query}', 52 | 'definepicture': cls.base_url + f'/definepicture?key={cls.key}&url={kwargs.get("url")}{json_query}', 53 | 'synonym': cls.base_url + f'/synonym?key={cls.key}&word={kwargs.get("word")}{json_query}', 54 | 'translate': cls.base_url + f'/translate?key={cls.key}&text={kwargs.get("text")}&tolanguage={kwargs.get("tolanguage")}{json_query}', 55 | 'randomperson': cls.base_url + f'/randomperson?key={cls.key}&gender={kwargs.get("gender")}{json_query}', 56 | 'youtubedetails': cls.base_url + f'/youtubedetails?key={cls.key}&videoid={kwargs.get("videoid")}{json_query}', 57 | 'youtubemp3': cls.base_url + f'/youtubemp3?key={cls.key}&videoid={kwargs.get("videoid")}{json_query}', 58 | 'weather': cls.base_url + f'/weather?key={cls.key}&location={kwargs.get("location")}{json_query}', 59 | 'qrgenerator': cls.base_url + f'/qrgenerator?key={cls.key}&string={kwargs.get("string")}&size={kwargs.get("size")}{json_query}', 60 | 'textparser': cls.base_url + f'/textparser?key={cls.key}&url={kwargs.get("url")}{json_query}', 61 | 'passwordgenerator': cls.base_url + f'/passwordgenerator?key={cls.key}&length={kwargs.get("length")}&include={kwargs.get("include")}&customlist={kwargs.get("customlist")}{json_query}', 62 | 'randomnumber': cls.base_url + f'/randomnumber?key={cls.key}&length={kwargs.get("length")}&between={kwargs.get("between")}{json_query}', 63 | 'licensekeygenerator': cls.base_url + f'/licensekeygenerator?key={cls.key}&template={kwargs.get("template")}&amount={kwargs.get("amount")}{json_query}', 64 | 'eitheror': cls.base_url + f'/eitheror?key={cls.key}{json_query}', 65 | 'gif': cls.base_url + f'/gif?key={cls.key}&keyword={kwargs.get("keyword")}{json_query}' 66 | } 67 | 68 | url_template = endpoint_list[endpoint_name] 69 | result_endpoint = url_template.format(**kwargs) 70 | return result_endpoint 71 | 72 | @classmethod 73 | def perform_request(cls, endpoint_name, json=True, **kwargs): 74 | url = cls.fetch_endpoint(endpoint_name=endpoint_name, json=json, **kwargs) 75 | response = requests.get(url) 76 | return response.json() if json else response.text 77 | 78 | @classmethod 79 | def list_methods(cls): 80 | 81 | methods_list = [ 82 | 'phonelookup', 83 | 'emailvalidator', 84 | 'disposablemailchecker', 85 | 'portscanner', 86 | 'portscanner_port', 87 | 'ping', 88 | 'gethostname', 89 | 'dnschecker', 90 | 'dnsresolver', 91 | 'ipvalidator', 92 | 'torchecker', 93 | 'iplogger', 94 | 'proxydetector', 95 | 'subdomainfinder', 96 | 'firewalldetector', 97 | 'ip2domains', 98 | 'alexarank', 99 | 'whois', 100 | 'createscreenshot', 101 | 'geoip', 102 | 'upordown', 103 | 'reputationchecker', 104 | 'getheaders', 105 | 'linkbackup', 106 | 'urlshortener', 107 | 'bitcoinbalance', 108 | 'ethereumbalance', 109 | 'currency', 110 | 'currencyrates', 111 | 'randomstringpicker', 112 | 'dictionary', 113 | 'definepicture', 114 | 'synonym', 115 | 'translate', 116 | 'randomperson', 117 | 'youtubedetails', 118 | 'youtubemp3', 119 | 'weather', 120 | 'qrgenerator', 121 | 'textparser', 122 | 'passwordgenerator', 123 | 'randomnumber', 124 | 'licensekeygenerator', 125 | 'eitheror', 126 | 'gif' 127 | ] 128 | 129 | return methods_list 130 | 131 | -------------------------------------------------------------------------------- /c99api/methods.py: -------------------------------------------------------------------------------- 1 | def register_methods(cls): 2 | method_names = [func.__name__ for func in globals().values() if callable(func) and func.__name__ != 'register_methods'] 3 | for method_name in method_names: 4 | method_func = globals()[method_name] 5 | setattr(cls, method_name, classmethod(method_func)) 6 | return cls 7 | 8 | """ 9 | Communication Tools 10 | """ 11 | def phonelookup(cls, number, json=True): 12 | return cls.perform_request(endpoint_name='phonelookup', number=number, json=json) 13 | 14 | def emailvalidator(cls, email, json=True): 15 | return cls.perform_request(endpoint_name='emailvalidator', email=email, json=json) 16 | 17 | def disposablemailchecker(cls, email, json=True): 18 | return cls.perform_request(endpoint_name='disposablemailchecker', email=email, json=json) 19 | 20 | 21 | """ 22 | Network Tools 23 | """ 24 | def portscanner(cls, host, json=True): 25 | return cls.perform_request(endpoint_name='portscanner', host=host, json=json) 26 | 27 | def portscanner_port(cls, host, port, json=True): 28 | return cls.perform_request(endpoint_name='portscanner_port', host=host, port=port, json=json) 29 | 30 | def ping(cls, host, json=True): 31 | return cls.perform_request(endpoint_name='ping', host=host, json=json) 32 | 33 | def gethostname(cls, host, json=True): 34 | return cls.perform_request(endpoint_name='gethostname', host=host, json=json) 35 | 36 | def dnschecker(cls, url, type, json=True): 37 | return cls.perform_request(endpoint_name='dnschecker', url=url, type=type, json=json) 38 | 39 | def dnsresolver(cls, host, server, json=True): 40 | return cls.perform_request(endpoint_name='dnsresolver', host=host, server=server, json=json) 41 | 42 | def ipvalidator(cls, ip, json=True): 43 | return cls.perform_request(endpoint_name='ipvalidator', ip=ip, json=json) 44 | 45 | def torchecker(cls, ip, json=True): 46 | return cls.perform_request(endpoint_name='torchecker', ip=ip, json=json) 47 | 48 | def iplogger(cls, action, json=True): 49 | return cls.perform_request(endpoint_name='iplogger', action=action, json=json) 50 | 51 | def proxydetector(cls, ip, json=True): 52 | return cls.perform_request(endpoint_name='proxydetector', ip=ip, json=json) 53 | 54 | 55 | """ 56 | Web Tools 57 | """ 58 | def subdomainfinder(cls, domain, json=True): 59 | return cls.perform_request(endpoint_name='subdomainfinder', domain=domain, json=json) 60 | 61 | def firewalldetector(cls, url, json=True): 62 | return cls.perform_request(endpoint_name='firewalldetector', url=url, json=json) 63 | 64 | def ip2domains(cls, ip, json=True): 65 | return cls.perform_request(endpoint_name='ip2domains', ip=ip, json=json) 66 | 67 | def alexarank(cls, url, json=True): 68 | return cls.perform_request(endpoint_name='alexarank', url=url, json=json) 69 | 70 | def whois(cls, domain, json=True): 71 | return cls.perform_request(endpoint_name='whois', domain=domain, json=json) 72 | 73 | def createscreenshot(cls, url, json=True): 74 | return cls.perform_request(endpoint_name='createscreenshot', url=url, json=json) 75 | 76 | def geoip(cls, host, json=True): 77 | return cls.perform_request(endpoint_name='geoip', host=host, json=json) 78 | 79 | def upordown(cls, host, json=True): 80 | return cls.perform_request(endpoint_name='upordown', host=host, json=json) 81 | 82 | def reputationchecker(cls, url, json=True): 83 | return cls.perform_request(endpoint_name='reputationchecker', url=url, json=json) 84 | 85 | def getheaders(cls, host, json=True): 86 | return cls.perform_request(endpoint_name='getheaders', host=host, json=json) 87 | 88 | def linkbackup(cls, url, json=True): 89 | return cls.perform_request(endpoint_name='linkbackup', url=url, json=json) 90 | 91 | def urlshortener(cls, url, json=True): 92 | return cls.perform_request(endpoint_name='urlshortener', url=url, json=json) 93 | 94 | 95 | """ 96 | Finance Tools 97 | """ 98 | def bitcoinbalance(cls, address, json=True): 99 | return cls.perform_request(endpoint_name='bitcoinbalance', address=address, json=json) 100 | 101 | def ethereumbalance(cls, address, json=True): 102 | return cls.perform_request(endpoint_name='ethereumbalance', address=address, json=json) 103 | 104 | def currency(cls, amount, from_currency, to_currency, json=True): 105 | return cls.perform_request(endpoint_name='currency', amount=amount, from_currency=from_currency, to_currency=to_currency, json=json) 106 | 107 | def currencyrates(cls, source, json=True): 108 | return cls.perform_request(endpoint_name='currencyrates', source=source, json=json) 109 | 110 | 111 | """ 112 | Miscellaneous 113 | """ 114 | def randomstringpicker(cls, textfile, json=True): 115 | return cls.perform_request(endpoint_name='randomstringpicker', textfile=textfile, json=json) 116 | 117 | def dictionary(cls, word, json=True): 118 | return cls.perform_request(endpoint_name='dictionary', word=word, json=json) 119 | 120 | def definepicture(cls, url, json=True): 121 | return cls.perform_request(endpoint_name='definepicture', url=url, json=json) 122 | 123 | def synonym(cls, word, json=True): 124 | return cls.perform_request(endpoint_name='synonym', word=word, json=json) 125 | 126 | def translate(cls, text, tolanguage, json=True): 127 | return cls.perform_request(endpoint_name='translate', text=text, tolanguage=tolanguage, json=json) 128 | 129 | def randomperson(cls, gender, json=True): 130 | return cls.perform_request(endpoint_name='randomperson', gender=gender, json=json) 131 | 132 | def youtubedetails(cls, videoid, json=True): 133 | return cls.perform_request(endpoint_name='youtubedetails', videoid=videoid, json=json) 134 | 135 | def youtubemp3(cls, videoid, json=True): 136 | return cls.perform_request(endpoint_name='youtubemp3', videoid=videoid, json=json) 137 | 138 | def weather(cls, location, json=True): 139 | return cls.perform_request(endpoint_name='weather', location=location, json=json) 140 | 141 | def qrgenerator(cls, string, size, json=True): 142 | return cls.perform_request(endpoint_name='qrgenerator', string=string, size=size, json=json) 143 | 144 | def textparser(cls, url, json=True): 145 | return cls.perform_request(endpoint_name='textparser', url=url, json=json) 146 | 147 | def passwordgenerator(cls, length, include, customlist, json=True): 148 | return cls.perform_request(endpoint_name='passwordgenerator', length=length, include=include, customlist=customlist, json=json) 149 | 150 | def randomnumber(cls, length, between, json=True): 151 | return cls.perform_request(endpoint_name='randomnumber', length=length, between=between, json=json) 152 | 153 | def licensekeygenerator(cls, template, amount, json=True): 154 | return cls.perform_request(endpoint_name='licensekeygenerator', template=template, amount=amount, json=json) 155 | 156 | 157 | """ 158 | Fun and Games 159 | """ 160 | def eitheror(cls, json=True): 161 | return cls.perform_request(endpoint_name='eitheror', json=json) 162 | 163 | def gif(cls, keyword, json=True): 164 | return cls.perform_request(endpoint_name='gif', keyword=keyword, json=json) 165 | 166 | -------------------------------------------------------------------------------- /example_usage.py: -------------------------------------------------------------------------------- 1 | from c99api import EndpointClient 2 | 3 | api = EndpointClient 4 | 5 | api.key = 'your_api_key' 6 | 7 | response = api.emailvalidator(email='test@c99.nl', json=False) 8 | print(response) -------------------------------------------------------------------------------- /install.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | pip install -r requirements.txt 4 | 5 | pause 6 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 |
6 | 7 |8 | Seamlessly integrate the c99.nl API into your Python projects 9 |
10 | 11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | # Installation
21 |
22 | ```
23 | pip install c99api
24 | ```
25 |
26 | **Initiator**
27 | ```python
28 | # Import the package
29 | from c99api import EndpointClient
30 |
31 | api = EndpointClient
32 |
33 | # Define your API key
34 | api.key = 'your_key'
35 | ```
36 |
37 | # Usage
38 |
39 | ```python
40 | # Access list of different methods available
41 | response = api.list_methods()
42 | print(response)
43 | ```
44 | ```python
45 | [
46 | 'phonelookup',
47 | 'emailvalidator',
48 | 'disposablemailchecker',
49 | 'portscanner',
50 | 'portscanner_port',
51 | 'ping',
52 | 'gethostname',
53 | 'dnschecker',
54 | 'dnsresolver',
55 | 'ipvalidator',
56 | 'torchecker',
57 | 'iplogger',
58 | 'proxydetector',
59 | 'subdomainfinder',
60 | 'firewalldetector',
61 | 'ip2domains',
62 | 'alexarank',
63 | 'whois',
64 | 'createscreenshot',
65 | 'geoip',
66 | 'upordown',
67 | 'reputationchecker',
68 | 'getheaders',
69 | 'linkbackup',
70 | 'urlshortener',
71 | 'bitcoinbalance',
72 | 'ethereumbalance',
73 | 'currency',
74 | 'currencyrates',
75 | 'randomstringpicker',
76 | 'dictionary',
77 | 'definepicture',
78 | 'synonym',
79 | 'translate',
80 | 'randomperson',
81 | 'youtubedetails',
82 | 'youtubemp3',
83 | 'weather',
84 | 'qrgenerator',
85 | 'textparser',
86 | 'passwordgenerator',
87 | 'randomnumber',
88 | 'licensekeygenerator',
89 | 'eitheror',
90 | 'gif'
91 | ]
92 | ```
93 |
94 | ## Use Cases
95 | ```python
96 | # With JSON
97 | response = api.emailvalidator(email='example@example.com', json=True)
98 | print(response)
99 | ```
100 | ```json
101 | {
102 | "success": True,
103 | "exists": False,
104 | "error": "E-mail doesn't exist."
105 | }
106 | ```
107 |
108 |
109 | ```python
110 | # Without JSON
111 | response = api.emailvalidator(email='example@example.com', json=False)
112 | print(response)
113 | ```
114 | ```md
115 | Email doesn't exist
116 | ```
117 |
118 | # Other
119 |
120 | ## To-Do
121 | Add dynamic parser for JSON responses
122 |
123 |
124 | ## Docs
125 |
126 | [API Overview](https://api.c99.nl/dashboard/api_overview)
127 |
128 | ## Warning
129 |
130 | **To use the c99.nl API you need to [purchase](https://api.c99.nl/dashboard/shop) an API key**
131 |
132 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | requests
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup, find_packages
2 |
3 | # Setting up
4 | setup(
5 | name="c99api",
6 | version='1.0',
7 | license='MIT',
8 | description='A Python wrapper and handler for the c99.nl API',
9 | author="David Peterson",
10 | author_email="dapanon@proton.me",
11 | url='https://github.com/Haste171/c99-api',
12 | packages=find_packages(),
13 | install_requires=['requests'],
14 | classifiers=[
15 | 'Development Status :: 3 - Alpha',
16 | 'Intended Audience :: Developers',
17 | 'License :: OSI Approved :: MIT License',
18 | 'Programming Language :: Python :: 3',
19 | 'Programming Language :: Python :: 3.6',
20 | 'Programming Language :: Python :: 3.7',
21 | 'Programming Language :: Python :: 3.8',
22 | 'Programming Language :: Python :: 3.9',
23 | 'Programming Language :: Python :: 3.10',
24 | ],
25 | long_description=open('README.md').read(),
26 | long_description_content_type='text/markdown',
27 | )
--------------------------------------------------------------------------------