Spaces:
Sleeping
Sleeping
| import requests | |
| import datetime | |
| import logging | |
| from flask import Flask, jsonify | |
| import os | |
| from dotenv import load_dotenv | |
| # Carrega variáveis do .env | |
| load_dotenv() | |
| hf_token = os.getenv("HF_TOKEN") | |
| # Define headers com o token | |
| headers = { | |
| "Authorization": f"Bearer {hf_token}", | |
| "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0", | |
| "Accept": "application/json", | |
| "Accept-Language": "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7", | |
| "Connection": "keep-alive" | |
| } | |
| def ultima_segunda(): | |
| hoje = datetime.date.today() | |
| # weekday(): segunda=0, terça=1, ..., domingo=6 | |
| dias_para_subtrair = (hoje.weekday() - 0) % 7 | |
| ultima_segunda = hoje - datetime.timedelta(days=dias_para_subtrair) | |
| return ultima_segunda | |
| app = Flask(__name__) | |
| def get_materias_legislativa(tipo="", data=""): | |
| url_request = f"https://sapl.campinas.sp.leg.br/api/materia/materialegislativa/?tipo={tipo}&data_apresentacao__gte={data}" | |
| resposta = requests.get(url_request, headers=headers) | |
| dados = resposta.json() | |
| total_pages = (dados["pagination"]["total_pages"]) | |
| for page in range(2, total_pages + 1): | |
| url_request_page = f"{url_request}&page={page}" | |
| resposta_page = requests.get(url_request_page, headers=headers) | |
| dados_page = resposta_page.json() | |
| dados["results"].extend(dados_page["results"]) | |
| return jsonify(dados["results"]) | |
| def get_autores(autor=None): | |
| url_request = f"https://sapl.campinas.sp.leg.br/api/base/autor/{autor}/" | |
| resposta = requests.get(url_request, headers=headers) | |
| dados = resposta.json() | |
| return jsonify(dados) | |
| # 1 Projeto de Lei Ordinária | |
| # 3 Projeto de Resolução | |
| # 6 Projeto de Lei Complementar | |
| # 10 Proposta de Emenda à Lei Orgânica | |
| # 53 Substitutivo | |
| def test(): | |
| url = "https://sapl.campinas.sp.leg.br/api/materia/materialegislativa/" | |
| response = requests.get(url, headers=headers) | |
| print("Status:", response.status_code) | |
| print("Content-Type:", response.headers.get("Content-Type")) | |
| # print("Body:", response.text[:500]) | |
| try: | |
| data = response.json() | |
| # print("Dados:", data) | |
| logging.info("deu certo") | |
| return jsonify(data) | |
| except ValueError: | |
| print("Resposta não é JSON válido") | |
| print("Resposta bruta:", response.text) | |
| logging.error(response.text) | |
| return "API NÃO funcionando!" | |
| def get_todas_materias_legislativa(): | |
| tipos = [1,3,6,7,10,53] | |
| dados = {"results": []} | |
| for tipo in tipos: | |
| dados["results"].extend(get_materias_legislativa(tipo=tipo, data="2026-02-16").get_json()) | |
| for projeto in dados["results"]: | |
| for autor in projeto["autores"]: | |
| projeto["autores_detalhados"] = get_autores(autor=autor).get_json() | |
| # return render_template("projetos.html", projetos=dados["results"]) | |
| return jsonify(dados["results"]) | |
| # 22 Protocolo da Câmara Municipal de Campinas - CP | |
| def get_comissao_processante(): | |
| dados = {"results": get_materias_legislativa(tipo=22, data="2026-01-01").get_json()} | |
| for projeto in dados["results"]: | |
| for autor in projeto["autores"]: | |
| projeto["autores_detalhados"] = get_autores(autor=autor).get_json() | |
| # return render_template("projetos.html", projetos=dados["results"]) | |
| return jsonify(dados["results"]) | |
| # 7 Projeto de Decreto Legislativo | |
| def get_decreto_legislativo(): | |
| dados = {"results": get_materias_legislativa(tipo=7, data="2026-02-16").get_json()} | |
| for projeto in dados["results"]: | |
| for autor in projeto["autores"]: | |
| projeto["autores_detalhados"] = get_autores(autor=autor).get_json() | |
| # return render_template("projetos.html", projetos=dados["results"]) | |
| return jsonify(dados["results"]) | |
| if __name__ == "__main__": | |
| # Hugging Face Spaces espera que o app rode na porta 7860 | |
| app.run(host="0.0.0.0", port=7860) |