108 lines
3.9 KiB
Python
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()
|