apiempresas 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- apiempresas/__init__.py +4 -0
- apiempresas/client.py +69 -0
- apiempresas/exceptions.py +9 -0
- apiempresas/resources/__init__.py +1 -0
- apiempresas/resources/companies.py +47 -0
- apiempresas-1.0.0.dist-info/METADATA +18 -0
- apiempresas-1.0.0.dist-info/RECORD +9 -0
- apiempresas-1.0.0.dist-info/WHEEL +5 -0
- apiempresas-1.0.0.dist-info/top_level.txt +1 -0
apiempresas/__init__.py
ADDED
apiempresas/client.py
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import requests
|
|
2
|
+
from .exceptions import ApiError
|
|
3
|
+
from .resources.companies import Companies
|
|
4
|
+
|
|
5
|
+
class ApiEmpresas:
|
|
6
|
+
"""
|
|
7
|
+
Cliente principal para interactuar con la API de APIEmpresas.es
|
|
8
|
+
"""
|
|
9
|
+
def __init__(self, api_key: str, base_url: str = 'https://apiempresas.es/api/v1', timeout: int = 30):
|
|
10
|
+
if not api_key or not api_key.strip():
|
|
11
|
+
raise ApiError("La propiedad 'api_key' es obligatoria para inicializar ApiEmpresas.", status=401)
|
|
12
|
+
|
|
13
|
+
self.api_key = api_key
|
|
14
|
+
self.base_url = base_url.rstrip('/')
|
|
15
|
+
self.timeout = timeout
|
|
16
|
+
|
|
17
|
+
# Iniciar sesión de requests para reutilizar conexiones
|
|
18
|
+
self.session = requests.Session()
|
|
19
|
+
self.session.headers.update({
|
|
20
|
+
'X-API-KEY': self.api_key,
|
|
21
|
+
'Accept': 'application/json',
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
# Inicializar recursos
|
|
25
|
+
self.companies = Companies(self)
|
|
26
|
+
|
|
27
|
+
def request(self, method: str, endpoint: str, params: dict = None, json_data: dict = None) -> dict:
|
|
28
|
+
"""
|
|
29
|
+
Método interno genérico para lanzar las peticiones HTTP.
|
|
30
|
+
"""
|
|
31
|
+
url = f"{self.base_url}{endpoint}"
|
|
32
|
+
|
|
33
|
+
try:
|
|
34
|
+
response = self.session.request(
|
|
35
|
+
method=method,
|
|
36
|
+
url=url,
|
|
37
|
+
params=params,
|
|
38
|
+
json=json_data,
|
|
39
|
+
timeout=self.timeout
|
|
40
|
+
)
|
|
41
|
+
except requests.exceptions.RequestException as e:
|
|
42
|
+
raise ApiError(f"Error de red al conectar con APIEmpresas: {str(e)}", status=500)
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
decoded_data = response.json()
|
|
46
|
+
except ValueError:
|
|
47
|
+
decoded_data = None
|
|
48
|
+
|
|
49
|
+
if not response.ok:
|
|
50
|
+
status = response.status_code
|
|
51
|
+
message = f"{status} Error desconocido en la API"
|
|
52
|
+
error_code = None
|
|
53
|
+
|
|
54
|
+
if decoded_data and isinstance(decoded_data, dict):
|
|
55
|
+
message = decoded_data.get('message', message)
|
|
56
|
+
error_code = decoded_data.get('error')
|
|
57
|
+
else:
|
|
58
|
+
message = response.text
|
|
59
|
+
|
|
60
|
+
raise ApiError(message, status=status, error_code=error_code, raw_data=decoded_data)
|
|
61
|
+
|
|
62
|
+
if decoded_data and 'data' in decoded_data:
|
|
63
|
+
# Para el endpoint /batch, se suele devolver meta y data
|
|
64
|
+
if 'meta' in decoded_data:
|
|
65
|
+
return decoded_data
|
|
66
|
+
return decoded_data['data']
|
|
67
|
+
|
|
68
|
+
return decoded_data
|
|
69
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
class ApiError(Exception):
|
|
2
|
+
"""
|
|
3
|
+
Excepción lanzada cuando la API de APIEmpresas devuelve un error.
|
|
4
|
+
"""
|
|
5
|
+
def __init__(self, message: str, status: int = 500, error_code: str = None, raw_data: dict = None):
|
|
6
|
+
super().__init__(message)
|
|
7
|
+
self.status = status
|
|
8
|
+
self.error_code = error_code
|
|
9
|
+
self.raw_data = raw_data
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# vacio
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
class Companies:
|
|
2
|
+
def __init__(self, client):
|
|
3
|
+
self._client = client
|
|
4
|
+
|
|
5
|
+
def get(self, cif: str) -> dict:
|
|
6
|
+
"""Obtiene los datos básicos de una empresa por su CIF."""
|
|
7
|
+
return self._client.request('GET', '/companies', params={'cif': cif})
|
|
8
|
+
|
|
9
|
+
def search(self, q: str) -> dict:
|
|
10
|
+
"""Busca empresas por nombre o razón social."""
|
|
11
|
+
return self._client.request('GET', '/companies/search', params={'q': q})
|
|
12
|
+
|
|
13
|
+
def batch(self, cifs: list) -> dict:
|
|
14
|
+
"""Consulta múltiple de CIFs en una sola petición."""
|
|
15
|
+
return self._client.request('POST', '/companies/batch', json_data={'cifs': cifs})
|
|
16
|
+
|
|
17
|
+
def score(self, cif: str) -> dict:
|
|
18
|
+
"""(Pro) Obtiene el Scoring Comercial de una empresa."""
|
|
19
|
+
return self._client.request('GET', '/companies/score', params={'cif': cif})
|
|
20
|
+
|
|
21
|
+
def borme(self, cif: str) -> dict:
|
|
22
|
+
"""(Pro) Obtiene el historial de actos del BORME de una empresa."""
|
|
23
|
+
return self._client.request('GET', '/companies/borme', params={'cif': cif})
|
|
24
|
+
|
|
25
|
+
def signals(self, cif: str) -> dict:
|
|
26
|
+
"""(Pro) Obtiene las señales societarias recientes de una empresa."""
|
|
27
|
+
return self._client.request('GET', '/companies/signals', params={'cif': cif})
|
|
28
|
+
|
|
29
|
+
def insights(self, cif: str) -> dict:
|
|
30
|
+
"""(Business) Obtiene Insights IA de una empresa."""
|
|
31
|
+
return self._client.request('GET', '/companies/insights', params={'cif': cif})
|
|
32
|
+
|
|
33
|
+
def contact_prep(self, cif: str) -> dict:
|
|
34
|
+
"""(Pro) Obtiene datos de contacto y preparación de la empresa."""
|
|
35
|
+
return self._client.request('GET', '/companies/contact-prep', params={'cif': cif})
|
|
36
|
+
|
|
37
|
+
def radar(self, cif: str) -> dict:
|
|
38
|
+
"""(Business) Obtiene la información del Radar de empresas."""
|
|
39
|
+
return self._client.request('GET', '/companies/radar', params={'cif': cif})
|
|
40
|
+
|
|
41
|
+
def match(self, cif: str) -> dict:
|
|
42
|
+
"""(Business) Realiza un match avanzado con los datos de una empresa."""
|
|
43
|
+
return self._client.request('GET', '/companies/match', params={'cif': cif})
|
|
44
|
+
|
|
45
|
+
def network(self, cif: str) -> dict:
|
|
46
|
+
"""(Business) Obtiene la red o entramado societario (Network) de una empresa."""
|
|
47
|
+
return self._client.request('GET', '/companies/network', params={'cif': cif})
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: apiempresas
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: SDK oficial de APIEmpresas.es para Python
|
|
5
|
+
Home-page: https://apiempresas.es
|
|
6
|
+
Author: APIEmpresas
|
|
7
|
+
Author-email: soporte@apiempresas.es
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Requires-Python: >=3.7
|
|
11
|
+
Requires-Dist: requests>=2.0.0
|
|
12
|
+
Dynamic: author
|
|
13
|
+
Dynamic: author-email
|
|
14
|
+
Dynamic: classifier
|
|
15
|
+
Dynamic: home-page
|
|
16
|
+
Dynamic: requires-dist
|
|
17
|
+
Dynamic: requires-python
|
|
18
|
+
Dynamic: summary
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
apiempresas/__init__.py,sha256=FRGZfphzOM68kEBzWBWjnQIK1WyPefMwtHi66k2liiE,104
|
|
2
|
+
apiempresas/client.py,sha256=0WvalOppdYqqOKNlH97da-TL0vtTd7d5SRsR_gk6ESU,2491
|
|
3
|
+
apiempresas/exceptions.py,sha256=5Fu-Gks5cYk66lHgrn3-oPxt1pjM3ncf7Jl7kMth91o,351
|
|
4
|
+
apiempresas/resources/__init__.py,sha256=MEWW1A8fXVWgfx-5IJpuOc0AxIlloO1V-sRQayCX5WM,8
|
|
5
|
+
apiempresas/resources/companies.py,sha256=-y-GCXqI7q7vqhU77ug6x0AhPyYFHOTTFA08GxMIISk,2255
|
|
6
|
+
apiempresas-1.0.0.dist-info/METADATA,sha256=rQThCw8mORoPmMnGAnsNsWd5PaYNNf6WynyFzm-NNAM,506
|
|
7
|
+
apiempresas-1.0.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
8
|
+
apiempresas-1.0.0.dist-info/top_level.txt,sha256=Gu0FWbneYrHgJwbSD0oBINxXyENpr9z50eSNLMam9Is,12
|
|
9
|
+
apiempresas-1.0.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
apiempresas
|