38545-vm/restore_app.py
Flatlogic Bot fe37996f7b heathaet
2026-04-02 00:51:01 +00:00

108 lines
3.9 KiB
Python

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()