From 4b6d982d8da5d5d745f31889198d8511c84df258 Mon Sep 17 00:00:00 2001 From: Jonathan Henrique Date: Mon, 12 Aug 2024 22:01:16 -0300 Subject: [PATCH] fix: new version --- .gitignore | 3 + README | 72 ++-- README.md | 72 ++-- apigratis-sdk-python/Service.py | 56 --- apigratis/Service.py | 67 ++++ .../__init__.py | 0 apigratis_sdk_python.egg-info/PKG-INFO | 334 ++++++++++-------- apigratis_sdk_python.egg-info/SOURCES.txt | 6 +- .../entry_points.txt | 2 + apigratis_sdk_python.egg-info/requires.txt | 3 + apigratis_sdk_python.egg-info/top_level.txt | 2 +- build/lib/apigratis-sdk-python/Service.py | 56 --- build/lib/apigratis-sdk-python/__init__.py | 0 dist/apigratis-sdk-python-1.0.6.tar.gz | Bin 3920 -> 0 bytes ...pigratis_sdk_python-1.0.6-py3-none-any.whl | Bin 4242 -> 0 bytes pyproject.toml | 10 +- setup.py | 27 +- 17 files changed, 369 insertions(+), 341 deletions(-) create mode 100644 .gitignore delete mode 100644 apigratis-sdk-python/Service.py create mode 100644 apigratis/Service.py rename {apigratis-sdk-python => apigratis}/__init__.py (100%) create mode 100644 apigratis_sdk_python.egg-info/entry_points.txt delete mode 100644 build/lib/apigratis-sdk-python/Service.py delete mode 100644 build/lib/apigratis-sdk-python/__init__.py delete mode 100644 dist/apigratis-sdk-python-1.0.6.tar.gz delete mode 100644 dist/apigratis_sdk_python-1.0.6-py3-none-any.whl diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5bff665 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +build +dist +/.venv \ No newline at end of file diff --git a/README b/README index efc88f1..2ea45d5 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -# SDK Python - APIGratis by API BRASIL +# SDK Python - APIGratis by APIBrasil Conjunto de API, para desenvolvedores. @@ -12,7 +12,7 @@ _Transforme seus projetos em solucoes inteligentes com nossa API. Com recursos c [![Telegram Group](https://img.shields.io/badge/Telegram-Group-32AFED?logo=telegram)](https://t.me/apigratisoficial) ## Obtenha suas credenciais -https://apigratis.com.br +https://apibrasil.com.br ## Mais informacoes @@ -22,13 +22,14 @@ https://pypi.org/project/apigratis-sdk-python | Up | Services available | Description | Free | Beta | Stable | ------|-------------------------------|-------------------|---------| ------------------------- | ------------------------- | -| Yes | WhatsAppService | API do WhatsApp Gratuita. | Yes | Yes | Pending | -| Yes | Receita Data CNPJ | API Dados CNPJ Receita. | Yes | Yes | Pending | -| Yes | Receita Data CPF | API Dados de CPF Serasa. | Yes | Yes | Pending | -| Yes | CorreiosService | API Busca encomendas Correios Brazil. | Yes | Yes | Pending | -| Yes | CEPLocation | API CEP Geolocation + IBGE Brazil. | Yes | Yes | Pending | -| Yes | VehiclesService | API Placa Dados. | Yes | Yes | Pending | -| Yes | FipeService | API Placa FIPE. | Yes | Yes | Pending | +| Yes | WhatsAppService | API do WhatsApp | Yes | Yes | Yes | +| Yes | SMS | API de SMS . | Yes | Yes | Yes | +| Yes | Receita Data CNPJ | API Dados CNPJ Receita. | Yes | Yes | Yes | +| Yes | Receita Data CPF | API Dados de CPF Serasa. | Yes | Yes | Yes | +| Yes | CorreiosService | API Busca encomendas Correios Brazil. | Yes | Yes | Yes | +| Yes | CEPLocation | API CEP Geolocation + IBGE Brazil. | Yes | Yes | Yes | +| Yes | VehiclesService | API Placa Dados. | Yes | Yes | Yes | +| Yes | FipeService | API Placa FIPE. | Yes | Yes | Yes | ## Como utilizar @@ -45,22 +46,39 @@ import json def whatsapp(): - sendTePendingt = Service().whatsapp(json.dumps({ - "action": "sendTePendingt", + #sendText + sendText = Service().whatsapp(json.dumps({ + "action": "sendText", "credentials": { - "SecretKey": "SEU_SECRET_KEY", - "PublicToken": "SEU_PUBLIC_TOKEN", "DeviceToken": "SEU_DEVICE_TOKEN", "BearerToken": "SEU_BEARER_TOKEN", }, "body": { - "message": "Hello World for Python", - "phone": "5531994359434", + "text": "Hello World for Python", + "number": "5531994359434", "time_typing": 1 } })) - print(sendTePendingt) + #sendFile + sendFile = Service().whatsapp(json.dumps({ + "action": "sendFile", + "credentials": { + "DeviceToken": "SEU_DEVICE_TOKEN", + "BearerToken": "SEU_BEARER_TOKEN", + }, + "body": { + "number" : "5531994359434", + "path" : "https://assets.nagios.com/downloads/nagiosxi/docs/Installing_The_XI_Linux_Agent.pdf", + "options" : { + "caption": "texto do caption para arquivo", + "createChat": True, + "filename": "arquivo X" + } + } + })) + + print(sendFile) if __name__ == "__main__": whatsapp() @@ -74,20 +92,18 @@ import json def vehicles(): - vehicle = Service().vehicles(json.dumps({ + dados = Service().vehicles(json.dumps({ "action": "dados", "credentials": { - "SecretKey": "SEU_SECRET_KEY", - "PublicToken": "SEU_PUBLIC_TOKEN", "DeviceToken": "SEU_DEVICE_TOKEN", "BearerToken": "SEU_BEARER_TOKEN", }, - "body": { - "placa": "OQH3065", + "body": { + "placa": "OQH3A65" } })) - print(vehicle) + print(dados) if __name__ == "__main__": vehicles() @@ -104,8 +120,6 @@ def fipe(): vehicle = Service().vehicles(json.dumps({ "action": "fipe", "credentials": { - "SecretKey": "SEU_SECRET_KEY", - "PublicToken": "SEU_PUBLIC_TOKEN", "DeviceToken": "SEU_DEVICE_TOKEN", "BearerToken": "SEU_BEARER_TOKEN", }, @@ -128,20 +142,18 @@ import json def cnpj(): - vehicle = Service().cnpj(json.dumps({ - "action": "/", + dados = Service().cnpj(json.dumps({ + "action": "cnpj", "credentials": { - "SecretKey": "SEU_SECRET_KEY", - "PublicToken": "SEU_PUBLIC_TOKEN", "DeviceToken": "SEU_DEVICE_TOKEN", "BearerToken": "SEU_BEARER_TOKEN", }, "body": { - "placa": "OQH3065", + "cnpj": "44.959.669/0001-80", } })) - print(vehicle) + print(dados) if __name__ == "__main__": cnpj() diff --git a/README.md b/README.md index efc88f1..2ea45d5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# SDK Python - APIGratis by API BRASIL +# SDK Python - APIGratis by APIBrasil Conjunto de API, para desenvolvedores. @@ -12,7 +12,7 @@ _Transforme seus projetos em solucoes inteligentes com nossa API. Com recursos c [![Telegram Group](https://img.shields.io/badge/Telegram-Group-32AFED?logo=telegram)](https://t.me/apigratisoficial) ## Obtenha suas credenciais -https://apigratis.com.br +https://apibrasil.com.br ## Mais informacoes @@ -22,13 +22,14 @@ https://pypi.org/project/apigratis-sdk-python | Up | Services available | Description | Free | Beta | Stable | ------|-------------------------------|-------------------|---------| ------------------------- | ------------------------- | -| Yes | WhatsAppService | API do WhatsApp Gratuita. | Yes | Yes | Pending | -| Yes | Receita Data CNPJ | API Dados CNPJ Receita. | Yes | Yes | Pending | -| Yes | Receita Data CPF | API Dados de CPF Serasa. | Yes | Yes | Pending | -| Yes | CorreiosService | API Busca encomendas Correios Brazil. | Yes | Yes | Pending | -| Yes | CEPLocation | API CEP Geolocation + IBGE Brazil. | Yes | Yes | Pending | -| Yes | VehiclesService | API Placa Dados. | Yes | Yes | Pending | -| Yes | FipeService | API Placa FIPE. | Yes | Yes | Pending | +| Yes | WhatsAppService | API do WhatsApp | Yes | Yes | Yes | +| Yes | SMS | API de SMS . | Yes | Yes | Yes | +| Yes | Receita Data CNPJ | API Dados CNPJ Receita. | Yes | Yes | Yes | +| Yes | Receita Data CPF | API Dados de CPF Serasa. | Yes | Yes | Yes | +| Yes | CorreiosService | API Busca encomendas Correios Brazil. | Yes | Yes | Yes | +| Yes | CEPLocation | API CEP Geolocation + IBGE Brazil. | Yes | Yes | Yes | +| Yes | VehiclesService | API Placa Dados. | Yes | Yes | Yes | +| Yes | FipeService | API Placa FIPE. | Yes | Yes | Yes | ## Como utilizar @@ -45,22 +46,39 @@ import json def whatsapp(): - sendTePendingt = Service().whatsapp(json.dumps({ - "action": "sendTePendingt", + #sendText + sendText = Service().whatsapp(json.dumps({ + "action": "sendText", "credentials": { - "SecretKey": "SEU_SECRET_KEY", - "PublicToken": "SEU_PUBLIC_TOKEN", "DeviceToken": "SEU_DEVICE_TOKEN", "BearerToken": "SEU_BEARER_TOKEN", }, "body": { - "message": "Hello World for Python", - "phone": "5531994359434", + "text": "Hello World for Python", + "number": "5531994359434", "time_typing": 1 } })) - print(sendTePendingt) + #sendFile + sendFile = Service().whatsapp(json.dumps({ + "action": "sendFile", + "credentials": { + "DeviceToken": "SEU_DEVICE_TOKEN", + "BearerToken": "SEU_BEARER_TOKEN", + }, + "body": { + "number" : "5531994359434", + "path" : "https://assets.nagios.com/downloads/nagiosxi/docs/Installing_The_XI_Linux_Agent.pdf", + "options" : { + "caption": "texto do caption para arquivo", + "createChat": True, + "filename": "arquivo X" + } + } + })) + + print(sendFile) if __name__ == "__main__": whatsapp() @@ -74,20 +92,18 @@ import json def vehicles(): - vehicle = Service().vehicles(json.dumps({ + dados = Service().vehicles(json.dumps({ "action": "dados", "credentials": { - "SecretKey": "SEU_SECRET_KEY", - "PublicToken": "SEU_PUBLIC_TOKEN", "DeviceToken": "SEU_DEVICE_TOKEN", "BearerToken": "SEU_BEARER_TOKEN", }, - "body": { - "placa": "OQH3065", + "body": { + "placa": "OQH3A65" } })) - print(vehicle) + print(dados) if __name__ == "__main__": vehicles() @@ -104,8 +120,6 @@ def fipe(): vehicle = Service().vehicles(json.dumps({ "action": "fipe", "credentials": { - "SecretKey": "SEU_SECRET_KEY", - "PublicToken": "SEU_PUBLIC_TOKEN", "DeviceToken": "SEU_DEVICE_TOKEN", "BearerToken": "SEU_BEARER_TOKEN", }, @@ -128,20 +142,18 @@ import json def cnpj(): - vehicle = Service().cnpj(json.dumps({ - "action": "/", + dados = Service().cnpj(json.dumps({ + "action": "cnpj", "credentials": { - "SecretKey": "SEU_SECRET_KEY", - "PublicToken": "SEU_PUBLIC_TOKEN", "DeviceToken": "SEU_DEVICE_TOKEN", "BearerToken": "SEU_BEARER_TOKEN", }, "body": { - "placa": "OQH3065", + "cnpj": "44.959.669/0001-80", } })) - print(vehicle) + print(dados) if __name__ == "__main__": cnpj() diff --git a/apigratis-sdk-python/Service.py b/apigratis-sdk-python/Service.py deleted file mode 100644 index d7dbdd5..0000000 --- a/apigratis-sdk-python/Service.py +++ /dev/null @@ -1,56 +0,0 @@ -import requests -import json - -class Service: - - server = None - - def __init__(self, valor): - self.server = "https://cluster-01.apigratis.com/api/v1/" - - def request(self, service, dados): - try: - - action = data.get('action', '') - data = json.loads(dados) - - credentials = data['credentials'] - payload = json.dumps(data['body']) - - url = self.server + str(service) + str(action) - - headers = { - 'Content-Type': 'application/json', - 'SecretKey': credentials['SecretKey'], - 'PublicToken': credentials['PublicToken'], - 'Authorization': 'Bearer ' + credentials['BearerToken'], - 'DeviceToken': credentials['DeviceToken'] - } - - agent = 'APIBRASIL/PYTHON-SDK' - headers['User-Agent'] = agent - - response = requests.request("POST", url, headers=headers, data=payload, allow_redirects=False, stream=True, proxies=None) - - return json.loads(response.text.encode('utf8')) - - except Exception as e: - return {'error': str(e)} - - def whatsapp(self, dados): - return self.request('whatsapp', dados) - - def vehicles(self, dados): - return self.request('vehicles', dados) - - def correios(self, dados): - return self.request('correios', dados) - - def cep(self, dados): - return self.request('cep', dados) - - def cnpj(self, dados): - return self.request('dados/cnpj', dados) - - def cpf(self, dados): - return self.request('dados/cpf', dados) diff --git a/apigratis/Service.py b/apigratis/Service.py new file mode 100644 index 0000000..c3fbac4 --- /dev/null +++ b/apigratis/Service.py @@ -0,0 +1,67 @@ +import requests +import json + +class Service: + server = "https://gateway.apibrasil.io/api/v2/" + + def __init__(self): + pass + + def request(self, service, dados): + try: + # Carregar e validar dados + data = json.loads(dados) + + if 'credentials' not in data: + return {'error': 'Invalid request, missing credentials.'} + if 'body' not in data: + return {'error': 'Invalid request, missing body.'} + + if 'action' not in data: + return {'error': 'Invalid request, missing action necessary for this route.'} + + credentials = data['credentials'] + body = data['body'] + action = data['action'] if 'action' in data else None + payload = json.dumps(body) # Somente o corpo da requisição + + url = self.server + service + ('/' + action if action else '') # Montar URL + + headers = { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer ' + credentials['BearerToken'], + 'DeviceToken': credentials['DeviceToken'], + 'User-Agent': 'APIBrasil/Python-SDK' + } + + response = requests.post(url, headers=headers, data=payload, allow_redirects=False, stream=True) + + # Verificar se a resposta é JSON + try: + return response.json() + except json.JSONDecodeError: + return {'error': 'Failed to parse JSON response'} + + except Exception as e: + return {'error': str(e)} + + def whatsapp(self, dados): + return self.request('whatsapp', dados) + + def vehicles(self, dados): + return self.request('vehicles', dados) + + def correios(self, dados): + return self.request('correios', dados) + + def cep(self, dados): + return self.request('cep', dados) + + def cnpj(self, dados): + return self.request('dados', dados) + + def cpf(self, dados): + return self.request('dados/cpf', dados) + + def sms(self, dados): + return self.request('sms', dados) diff --git a/apigratis-sdk-python/__init__.py b/apigratis/__init__.py similarity index 100% rename from apigratis-sdk-python/__init__.py rename to apigratis/__init__.py diff --git a/apigratis_sdk_python.egg-info/PKG-INFO b/apigratis_sdk_python.egg-info/PKG-INFO index 144db39..85e825a 100644 --- a/apigratis_sdk_python.egg-info/PKG-INFO +++ b/apigratis_sdk_python.egg-info/PKG-INFO @@ -1,159 +1,189 @@ Metadata-Version: 2.1 Name: apigratis-sdk-python -Version: 1.0.6 -Summary: Transforme seus projetos em soluções inteligentes com nossa API. Com recursos como API do WhatsApp, geolocalização, rastreamento de encomendas, verificação de CPF/CNPJ e mais, você pode criar soluções eficientes e funcionais +Version: 1.1.7 +Summary: A ideia desse SDK é otimizar o tempo de código dos usuários auxiliando na integração com a plataforma. Home-page: https://github.com/APIBrasil/apigratis-sdk-python Author: APIBRASIL -Author-email: contato@apibrasil.com.br +Author-email: APIBRASIL License: MIT License -Description: # SDK Python - APIGratis by API BRASIL - Conjunto de API, para desenvolvedores. - - _Transforme seus projetos em solucoes inteligentes com nossa API. Com recursos como API do WhatsApp, geolocalizacao, rastreamento de encomendas, verificacao de CPF/CNPJ e mais, voce pode criar solucoes eficientes e funcionais._ - - ## Como instalar - - ```pip install apigratis-sdk-python``` - ## Canais de suporte (Comunidade) - [![WhatsApp Group](https://img.shields.io/badge/WhatsApp-Group-25D366?logo=whatsapp)](https://chat.whatsapp.com/KsPendingrUGIPWvUBYAjI1ogaGs) - [![Telegram Group](https://img.shields.io/badge/Telegram-Group-32AFED?logo=telegram)](https://t.me/apigratisoficial) - - ## Obtenha suas credenciais - https://apigratis.com.br - - ## Mais informacoes - - https://pypi.org/project/apigratis-sdk-python - - ## Servicos de API disponiveis - - | Up | Services available | Description | Free | Beta | Stable | - ------|-------------------------------|-------------------|---------| ------------------------- | ------------------------- | - | Yes | WhatsAppService | API do WhatsApp Gratuita. | Yes | Yes | Pending | - | Yes | Receita Data CNPJ | API Dados CNPJ Receita. | Yes | Yes | Pending | - | Yes | Receita Data CPF | API Dados de CPF Serasa. | Yes | Yes | Pending | - | Yes | CorreiosService | API Busca encomendas Correios Brazil. | Yes | Yes | Pending | - | Yes | CEPLocation | API CEP Geolocation + IBGE Brazil. | Yes | Yes | Pending | - | Yes | VehiclesService | API Placa Dados. | Yes | Yes | Pending | - | Yes | FipeService | API Placa FIPE. | Yes | Yes | Pending | - - ## Como utilizar - - _Voce pode utilizar todos os endpoints da API do WhatsApp, basta mudar o action e o body_ - - ## Documentacoes - https://apibrasil.com.br/documentacoes - - ## WhatsApp Service - - ```python - from apigratis.Service import Service - import json - - def whatsapp(): - - sendTePendingt = Service().whatsapp(json.dumps({ - "action": "sendTePendingt", - "credentials": { - "SecretKey": "SEU_SECRET_KEY", - "PublicToken": "SEU_PUBLIC_TOKEN", - "DeviceToken": "SEU_DEVICE_TOKEN", - "BearerToken": "SEU_BEARER_TOKEN", - }, - "body": { - "message": "Hello World for Python", - "phone": "5531994359434", - "time_typing": 1 - } - })) - - print(sendTePendingt) - - if __name__ == "__main__": - whatsapp() - ``` - - ## Vehicles Data Service - - ```python - from apigratis.Service import Service - import json - - def vehicles(): - - vehicle = Service().vehicles(json.dumps({ - "action": "dados", - "credentials": { - "SecretKey": "SEU_SECRET_KEY", - "PublicToken": "SEU_PUBLIC_TOKEN", - "DeviceToken": "SEU_DEVICE_TOKEN", - "BearerToken": "SEU_BEARER_TOKEN", - }, - "body": { - "placa": "OQH3065", - } - })) - - print(vehicle) - - if __name__ == "__main__": - vehicles() - ``` - - ## Vehicles FIPE Service - - ```python - from apigratis.Service import Service - import json - - def fipe(): - - vehicle = Service().vehicles(json.dumps({ - "action": "fipe", - "credentials": { - "SecretKey": "SEU_SECRET_KEY", - "PublicToken": "SEU_PUBLIC_TOKEN", - "DeviceToken": "SEU_DEVICE_TOKEN", - "BearerToken": "SEU_BEARER_TOKEN", - }, - "body": { - "placa": "OQH3065", - } - })) - - print(vehicle) - - if __name__ == "__main__": - fipe() - ``` - - ## Dados CNPJ Service - - ```python - from apigratis.Service import Service - import json - - def cnpj(): - - vehicle = Service().cnpj(json.dumps({ - "action": "/", - "credentials": { - "SecretKey": "SEU_SECRET_KEY", - "PublicToken": "SEU_PUBLIC_TOKEN", - "DeviceToken": "SEU_DEVICE_TOKEN", - "BearerToken": "SEU_BEARER_TOKEN", - }, - "body": { - "placa": "OQH3065", - } - })) - - print(vehicle) - - if __name__ == "__main__": - cnpj() - ``` -Keywords: whatsapp api,apibrasil,cnpj,sms,cep,consulta,api,brasil,gratis,free,whatsapp,apiwhatsapp,apigratis,apifree -Platform: UNKNOWN + Copyright (c) 2023 apigratis + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +Project-URL: Homepage, https://github.com/APIBrasil/apigratis-sdk-python +Project-URL: Repository, https://github.com/APIBrasil/apigratis-sdk-python.git +Project-URL: Bug Tracker, https://github.com/APIBrasil/apigratis-sdk-python/issues +Keywords: python,package,build,tutorial +Classifier: Intended Audience :: Developers +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Requires-Python: >=3.2 Description-Content-Type: text/markdown +Provides-Extra: dev +License-File: LICENSE + +# SDK Python - APIGratis by APIBrasil + +Conjunto de API, para desenvolvedores. + +_Transforme seus projetos em solucoes inteligentes com nossa API. Com recursos como API do WhatsApp, geolocalizacao, rastreamento de encomendas, verificacao de CPF/CNPJ e mais, voce pode criar solucoes eficientes e funcionais._ + +## Como instalar + +```pip install apigratis-sdk-python``` +## Canais de suporte (Comunidade) +[![WhatsApp Group](https://img.shields.io/badge/WhatsApp-Group-25D366?logo=whatsapp)](https://chat.whatsapp.com/KsPendingrUGIPWvUBYAjI1ogaGs) +[![Telegram Group](https://img.shields.io/badge/Telegram-Group-32AFED?logo=telegram)](https://t.me/apigratisoficial) + +## Obtenha suas credenciais +https://apibrasil.com.br + +## Mais informacoes + +https://pypi.org/project/apigratis-sdk-python + +## Servicos de API disponiveis + +| Up | Services available | Description | Free | Beta | Stable | +------|-------------------------------|-------------------|---------| ------------------------- | ------------------------- | +| Yes | WhatsAppService | API do WhatsApp | Yes | Yes | Yes | +| Yes | SMS | API de SMS . | Yes | Yes | Yes | +| Yes | Receita Data CNPJ | API Dados CNPJ Receita. | Yes | Yes | Yes | +| Yes | Receita Data CPF | API Dados de CPF Serasa. | Yes | Yes | Yes | +| Yes | CorreiosService | API Busca encomendas Correios Brazil. | Yes | Yes | Yes | +| Yes | CEPLocation | API CEP Geolocation + IBGE Brazil. | Yes | Yes | Yes | +| Yes | VehiclesService | API Placa Dados. | Yes | Yes | Yes | +| Yes | FipeService | API Placa FIPE. | Yes | Yes | Yes | + +## Como utilizar + +_Voce pode utilizar todos os endpoints da API do WhatsApp, basta mudar o action e o body_ + +## Documentacoes +https://apibrasil.com.br/documentacoes + +## WhatsApp Service + +```python +from apigratis.Service import Service +import json + +def whatsapp(): + + #sendText + sendText = Service().whatsapp(json.dumps({ + "action": "sendText", + "credentials": { + "DeviceToken": "SEU_DEVICE_TOKEN", + "BearerToken": "SEU_BEARER_TOKEN", + }, + "body": { + "text": "Hello World for Python", + "number": "5531994359434", + "time_typing": 1 + } + })) + + #sendFile + sendFile = Service().whatsapp(json.dumps({ + "action": "sendFile", + "credentials": { + "DeviceToken": "SEU_DEVICE_TOKEN", + "BearerToken": "SEU_BEARER_TOKEN", + }, + "body": { + "number" : "5531994359434", + "path" : "https://assets.nagios.com/downloads/nagiosxi/docs/Installing_The_XI_Linux_Agent.pdf", + "options" : { + "caption": "texto do caption para arquivo", + "createChat": True, + "filename": "arquivo X" + } + } + })) + + print(sendFile) + +if __name__ == "__main__": + whatsapp() +``` + +## Vehicles Data Service + +```python +from apigratis.Service import Service +import json + +def vehicles(): + + dados = Service().vehicles(json.dumps({ + "action": "dados", + "credentials": { + "DeviceToken": "SEU_DEVICE_TOKEN", + "BearerToken": "SEU_BEARER_TOKEN", + }, + "body": { + "placa": "OQH3A65" + } + })) + + print(dados) + +if __name__ == "__main__": + vehicles() +``` + +## Vehicles FIPE Service + +```python +from apigratis.Service import Service +import json + +def fipe(): + + vehicle = Service().vehicles(json.dumps({ + "action": "fipe", + "credentials": { + "DeviceToken": "SEU_DEVICE_TOKEN", + "BearerToken": "SEU_BEARER_TOKEN", + }, + "body": { + "placa": "OQH3065", + } + })) + + print(vehicle) + +if __name__ == "__main__": + fipe() +``` + +## Dados CNPJ Service + +```python +from apigratis.Service import Service +import json + +def cnpj(): + + dados = Service().cnpj(json.dumps({ + "action": "cnpj", + "credentials": { + "DeviceToken": "SEU_DEVICE_TOKEN", + "BearerToken": "SEU_BEARER_TOKEN", + }, + "body": { + "cnpj": "44.959.669/0001-80", + } + })) + + print(dados) + +if __name__ == "__main__": + cnpj() +``` diff --git a/apigratis_sdk_python.egg-info/SOURCES.txt b/apigratis_sdk_python.egg-info/SOURCES.txt index 6bf10dd..91960d4 100644 --- a/apigratis_sdk_python.egg-info/SOURCES.txt +++ b/apigratis_sdk_python.egg-info/SOURCES.txt @@ -1,10 +1,12 @@ +LICENSE README pyproject.toml setup.py -apigratis-sdk-python/Service.py -apigratis-sdk-python/__init__.py +apigratis/Service.py +apigratis/__init__.py apigratis_sdk_python.egg-info/PKG-INFO apigratis_sdk_python.egg-info/SOURCES.txt apigratis_sdk_python.egg-info/dependency_links.txt +apigratis_sdk_python.egg-info/entry_points.txt apigratis_sdk_python.egg-info/requires.txt apigratis_sdk_python.egg-info/top_level.txt \ No newline at end of file diff --git a/apigratis_sdk_python.egg-info/entry_points.txt b/apigratis_sdk_python.egg-info/entry_points.txt new file mode 100644 index 0000000..9f309ae --- /dev/null +++ b/apigratis_sdk_python.egg-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +apigratis = apigratis.__main__:main diff --git a/apigratis_sdk_python.egg-info/requires.txt b/apigratis_sdk_python.egg-info/requires.txt index f229360..0c147cb 100644 --- a/apigratis_sdk_python.egg-info/requires.txt +++ b/apigratis_sdk_python.egg-info/requires.txt @@ -1 +1,4 @@ requests + +[dev] +pytest diff --git a/apigratis_sdk_python.egg-info/top_level.txt b/apigratis_sdk_python.egg-info/top_level.txt index 00356b0..c39aa31 100644 --- a/apigratis_sdk_python.egg-info/top_level.txt +++ b/apigratis_sdk_python.egg-info/top_level.txt @@ -1 +1 @@ -apigratis-sdk-python +apigratis diff --git a/build/lib/apigratis-sdk-python/Service.py b/build/lib/apigratis-sdk-python/Service.py deleted file mode 100644 index dc92a65..0000000 --- a/build/lib/apigratis-sdk-python/Service.py +++ /dev/null @@ -1,56 +0,0 @@ -import requests -import json - -class Service: - - server = None - - def __init__(self): - self.server = "https://cluster-01.apigratis.com/api/v1/" - - def request(self, service, dados): - try: - - action = data.get('action', '') - data = json.loads(dados) - - credentials = data['credentials'] - payload = json.dumps(data['body']) - - url = self.server + str(service) + str(action) - - headers = { - 'Content-Type': 'application/json', - 'SecretKey': credentials['SecretKey'], - 'PublicToken': credentials['PublicToken'], - 'Authorization': 'Bearer ' + credentials['BearerToken'], - 'DeviceToken': credentials['DeviceToken'] - } - - agent = 'APIBRASIL/PYTHON-SDK' - headers['User-Agent'] = agent - - response = requests.request("POST", url, headers=headers, data=payload, allow_redirects=False, stream=True, proxies=None) - - return json.loads(response.text.encode('utf8')) - - except Exception as e: - return {'error': str(e)} - - def whatsapp(self, dados): - return self.request('whatsapp', dados) - - def vehicles(self, dados): - return self.request('vehicles', dados) - - def correios(self, dados): - return self.request('correios', dados) - - def cep(self, dados): - return self.request('cep', dados) - - def cnpj(self, dados): - return self.request('dados/cnpj', dados) - - def cpf(self, dados): - return self.request('dados/cpf', dados) diff --git a/build/lib/apigratis-sdk-python/__init__.py b/build/lib/apigratis-sdk-python/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/dist/apigratis-sdk-python-1.0.6.tar.gz b/dist/apigratis-sdk-python-1.0.6.tar.gz deleted file mode 100644 index 13405278ac992427d88f4d604f8185fa7b3180ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3920 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 Rr+)<~b8}KL6ay3#{{q3E&`AIQ diff --git a/dist/apigratis_sdk_python-1.0.6-py3-none-any.whl b/dist/apigratis_sdk_python-1.0.6-py3-none-any.whl deleted file mode 100644 index 911f8ea1db8c7e2b477fb547edf3c9859382cb1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4242 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 diff --git a/pyproject.toml b/pyproject.toml index 6c7b012..33187ec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta" [project] name = "apigratis-sdk-python" description = "A ideia desse SDK é otimizar o tempo de código dos usuários auxiliando na integração com a plataforma." -version = "1.0.6" +version = "1.1.7" authors = [ { name="APIBRASIL", email="contato@apibrasil.com.br" }, ] @@ -14,10 +14,10 @@ readme = "README.md" keywords = ["python", "package", "build", "tutorial"] requires-python = ">=3.7" classifiers = [ - "Programming Language :: Python :: 3", - "Intended Audience :: Technology/Science", - "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", - "Operating System :: OS Independent", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", ] [project.optional-dependencies] diff --git a/setup.py b/setup.py index e798371..6007a7b 100644 --- a/setup.py +++ b/setup.py @@ -1,17 +1,26 @@ -from setuptools import setup +from setuptools import setup, find_packages with open("README.md", "r") as fh: readme = fh.read() -setup(name='apigratis-sdk-python', - version='1.0.6', +setup( + name='apigratis-sdk-python', + version='1.1.7', + author='APIBRASIL', + author_email='contato@apibrasil.com.br', + description=u'Transforme seus projetos em soluções inteligentes com nossa API...', + long_description_content_type="text/markdown", url='https://github.com/APIBrasil/apigratis-sdk-python', + packages=find_packages(), license='MIT License', - author='APIBRASIL', + python_requires='>=3.2', long_description=readme, - long_description_content_type="text/markdown", - author_email='contato@apibrasil.com.br', keywords='whatsapp api, apibrasil, cnpj, sms, cep, consulta, api, brasil, gratis, free, whatsapp, apiwhatsapp, apigratis, apifree', - description=u'Transforme seus projetos em soluções inteligentes com nossa API. Com recursos como API do WhatsApp, geolocalização, rastreamento de encomendas, verificação de CPF/CNPJ e mais, você pode criar soluções eficientes e funcionais', - packages=['apigratis-sdk-python'], - install_requires=['requests']) \ No newline at end of file + install_requires=['requests'], + classifiers=[ + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + ], +)