import os from datetime import datetime import django import requests os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") django.setup() from core.models import AdminAccess, DrawResult, Lottery LOTTERIES = [ {"name": "mega_sena", "api_name": "megasena", "min": 1, "max": 60, "draw": 6}, {"name": "quina", "api_name": "quina", "min": 1, "max": 80, "draw": 5}, {"name": "dupla_sena", "api_name": "duplasena", "min": 1, "max": 50, "draw": 6}, {"name": "lotomania", "api_name": "lotomania", "min": 0, "max": 99, "draw": 50}, {"name": "lotofacil", "api_name": "lotofacil", "min": 1, "max": 25, "draw": 15}, {"name": "timemania", "api_name": "timemania", "min": 1, "max": 80, "draw": 7}, {"name": "dia_de_sorte", "api_name": "diadesorte", "min": 1, "max": 31, "draw": 7}, {"name": "federal", "api_name": "federal", "min": 0, "max": 99999, "draw": 5}, {"name": "super_sete", "api_name": "supersete", "min": 0, "max": 9, "draw": 7}, {"name": "maismilionaria", "api_name": "maismilionaria", "min": 1, "max": 50, "draw": 6}, ] def restore_lotteries(): created = 0 for item in LOTTERIES: lottery, was_created = Lottery.objects.get_or_create( name=item["name"], defaults={ "min_number": item["min"], "max_number": item["max"], "numbers_to_draw": item["draw"], }, ) if not was_created: changed = False for field, value in { "min_number": item["min"], "max_number": item["max"], "numbers_to_draw": item["draw"], }.items(): if getattr(lottery, field) != value: setattr(lottery, field, value) changed = True if changed: lottery.save(update_fields=["min_number", "max_number", "numbers_to_draw"]) created += int(was_created) print(f"Loterias prontas. Novas criadas: {created}") def restore_admin(): admin, created = AdminAccess.objects.get_or_create(private_key="admin123") print(f"Chave admin pronta: {admin.private_key} ({'nova' if created else 'existente'})") def sync_history(draws_per_lottery=40): session = requests.Session() inserted = 0 for item in LOTTERIES: lottery = Lottery.objects.get(name=item["name"]) latest_url = f"https://loteriascaixa-api.herokuapp.com/api/{item['api_name']}/latest" latest_response = session.get(latest_url, timeout=15) latest_response.raise_for_status() latest_data = latest_response.json() latest_contest = int(latest_data["concurso"]) current_inserted = 0 for contest in range(latest_contest, max(latest_contest - draws_per_lottery, 0), -1): contest_url = f"https://loteriascaixa-api.herokuapp.com/api/{item['api_name']}/{contest}" response = session.get(contest_url, timeout=15) if response.status_code != 200: continue data = response.json() dezenas = data.get("dezenas") or [] if not dezenas: continue draw_date = datetime.strptime(data["data"], "%d/%m/%Y").date() numbers_str = ",".join(str(int(number)) for number in dezenas) _, created = DrawResult.objects.get_or_create( lottery=lottery, draw_number=int(data["concurso"]), defaults={"draw_date": draw_date, "numbers": numbers_str}, ) inserted += int(created) current_inserted += int(created) print(f"{item['name']}: ultimo={latest_contest}, novos={current_inserted}") print(f"Total de resultados inseridos agora: {inserted}") def main(): restore_lotteries() restore_admin() sync_history(draws_per_lottery=40) print("Restauração concluída com sucesso.") if __name__ == "__main__": main()