From 516cd95d87296a94f5af57b936eec52735b2eed2 Mon Sep 17 00:00:00 2001 From: "daniel.rodrigues" Date: Fri, 31 Oct 2025 15:00:27 -0300 Subject: [PATCH] att --- Extrair_draft.py | 198 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 Extrair_draft.py diff --git a/Extrair_draft.py b/Extrair_draft.py new file mode 100644 index 0000000..02c8459 --- /dev/null +++ b/Extrair_draft.py @@ -0,0 +1,198 @@ +# -*- coding: utf-8 -*- + +import requests +import json +import socket +import os +import shutil +from requests.exceptions import RequestException +import subprocess +import time + +# URL da API +url = "https://mar-orders-bff-api.demanda-abastecimento.grupoboticario.digital/api/orderdraft/order-building-data?draftType=SEM" + +# Cabeçalhos da requisição +headers = { + "accept": "*/*", + "accept-language": "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7", + "authorization": "Basic b2NVc2VySW50ZXJuYWw6Nk5RV0BOU2M1anpEUy1oeg==", + "content-type": "application/json", + "origin": "https://extranet.grupoboticario.com.br", + "priority": "u=1, i", + "referer": "https://extranet.grupoboticario.com.br/", + "sec-ch-ua": '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"', + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": '"Windows"', + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36" +} + +# Lista de códigos das lojas +store_codes = [ + "12522", "12817", "12818", "12820", "12823", "12824", "12826", "12828", "12829", + "12830", "12838", "13427", "14617", "19103", "20005", "20006", "20009", "20056", + "20057", "20441", "20858", "20968", "20969", "20970", "20986", "20988", "20989", + "20991", "20992", "20993", "20994", "20995", "20996", "20997", "20998", "20999", + "21000", "21001", "21068", "21277", "21278", "21296", "21375", "21381", "21383", + "21495", "21624", "21647", "22541", "3546", "4560", "5699", "910173", "910291", + "21007", "23665", "23712", "23705", "23711", "23704", "23707", "23702", "23703", + "23713", "23708", "23706", "23701", "23709","23475","23156","14668", "24253", + "24254", "24255", "24258", "24257", "24268", "24269", "24293", "910291", "910173", + "23813" +] + +def check_internet_connection(): + try: + # Tenta resolver o endereço para verificar a conectividade + socket.gethostbyname("google.com") + return True + except socket.error: + return False + +def fetch_data_from_api(store_code, index, total, retry_count=1): + attempt = 0 + while attempt < retry_count: + try: + # Definindo storeType com base no código da loja + if store_code == "21007": + store_type = "TQT" + elif store_code in ["910173", "910291"]: + store_type = "QDB" + else: + store_type = "BOT" + + # Dados da requisição com o código da loja + data = { + "storeCode": store_code, + "useId": 163165, + "storeType": store_type, + "generateNew": False + } + + # Fazendo a requisição POST + response = requests.post(url, headers=headers, json=data) + response.raise_for_status() # Levanta um erro para códigos de status HTTP 4xx/5xx + + # Requisição bem-sucedida + response_data = response.json() + + # Nome do arquivo com base no código da loja + json_filename = f"{store_code}.json" + + # Salva os dados em um arquivo JSON com o nome do código da loja + with open(json_filename, "w") as file: + json.dump(response_data, file, indent=4) + + print(f"{index}/{total}: Dados recebidos da API para a loja {store_code} e salvos em '{json_filename}'.") + + # Caminho da nova pasta de destino + destination_folder = "/home/danielrodrigues/Scripts/Draft/Arquivos/" + + # Cria a pasta de destino se não existir + if not os.path.exists(destination_folder): + os.makedirs(destination_folder) + + # Caminho completo do novo local do arquivo + new_file_path = os.path.join(destination_folder, json_filename) + + # Move o arquivo JSON para a pasta de destino, substituindo se necessário + if os.path.exists(new_file_path): + os.remove(new_file_path) + + shutil.move(json_filename, new_file_path) + print(f"{index}/{total}: Arquivo movido para '{new_file_path}'.") + return True # Retorna True para indicar sucesso + + except RequestException as e: + print(f"{index}/{total}: Erro na requisição para a loja {store_code}: {e}") + except Exception as e: + print(f"{index}/{total}: Erro inesperado para a loja {store_code}: {e}") + + attempt += 1 + print(f"{index}/{total}: Tentativa {attempt} de {retry_count} para a loja {store_code}.") + time.sleep(5) # Espera antes de tentar novamente + + print(f"{index}/{total}: Falha ao processar a loja {store_code} após {retry_count} tentativas.") + return False # Retorna False para indicar falha + +def update_api_status(status): + import requests + from datetime import datetime, timezone, timedelta + + # URL do endpoint + url = "https://api.grupoginseng.com.br/api/status/1" + + # Definir fuso horário de São Paulo (UTC-3) + sao_paulo_offset = timedelta(hours=-3) + + # Gerar data/hora atual no formato YYYY-MM-DD HH:MM:SS com UTC-3 + current_datetime = datetime.now(timezone(sao_paulo_offset)).strftime("%Y-%m-%d %H:%M:%S") + + # Montar o payload + payload = { + "STATUS": status, + "DATA": current_datetime + } + + # Cabeçalhos + headers = { + "Content-Type": "application/json" + } + + # Enviar PUT request + response = requests.put(url, json=payload, headers=headers) + + # Mostrar resposta + print("Hora enviada:", current_datetime) + print("Status Code:", response.status_code) + print("Response Body:", response.text) + +def main(): + if check_internet_connection(): + failed_stores = [] + total = len(store_codes) + + # Processa todas as lojas + for index, store_code in enumerate(store_codes, start=1): + success = fetch_data_from_api(store_code, index, total) + if not success: + failed_stores.append(store_code) + + # Tenta novamente as lojas que falharam + if failed_stores: + print("Tentando novamente as lojas que falharam.") + retry_count = 1 + for attempt in range(1, retry_count + 1): + retry_failed_stores = [] + for store_code in failed_stores: + index = store_codes.index(store_code) + 1 + success = fetch_data_from_api(store_code, index, total) + if not success: + retry_failed_stores.append(store_code) + + failed_stores = retry_failed_stores + if not failed_stores: + print("Todos os arquivos foram processados com sucesso.") + update_api_status("OK") + break + + if failed_stores: + print(f"Tentativa {attempt} de {retry_count} para as lojas que falharam.") + time.sleep(10) # Espera antes de tentar novamente + + # Se ainda houver lojas com falha após todas as tentativas + if failed_stores: + print(f"Não foi possível processar algumas lojas: {failed_stores}") + update_api_status("FAIL") + else: + print("Todos os arquivos foram processados com sucesso.") + update_api_status("OK") + else: + print("Sem conexão com a internet. Verifique sua conexão e tente novamente.") + update_api_status("FAIL") + +if __name__ == "__main__": + main()