Skip to content

Instantly share code, notes, and snippets.

@junho85
Created January 30, 2025 13:59
Show Gist options
  • Save junho85/2be4e358c69c1b94f1bae9ad8ceda053 to your computer and use it in GitHub Desktop.
Save junho85/2be4e358c69c1b94f1bae9ad8ceda053 to your computer and use it in GitHub Desktop.
차니차니님의 로또 번호 생성기 개선 버전
import requests
import csv
import os
import random
from collections import Counter
# CSV 파일 경로
CSV_FILE_PATH = "lotto_numbers.csv"
# 최근 로또 데이터 가져오기
def get_lotto_numbers(draw_no):
url = f"https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={draw_no}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
if data["returnValue"] == "success":
return [draw_no] + [data[f"drwtNo{i}"] for i in range(1, 7)]
return None
# CSV 파일 초기화 (없는 경우 생성)
def initialize_csv(file_path):
if not os.path.exists(file_path):
with open(file_path, mode="w", newline="") as file:
writer = csv.writer(file)
# 헤더 작성
writer.writerow(["DrawNo", "Number1", "Number2", "Number3", "Number4", "Number5", "Number6"])
# 기존에 저장된 회차 번호 가져오기
def get_saved_draw_numbers(file_path):
saved_draw_numbers = set()
if os.path.exists(file_path):
with open(file_path, mode="r") as file:
reader = csv.reader(file)
next(reader) # 헤더 건너뛰기
for row in reader:
if row:
saved_draw_numbers.add(int(row[0]))
return saved_draw_numbers
# 저장된 로또 데이터 가져오기
def load_lotto_numbers(file_path):
lotto_numbers = []
if os.path.exists(file_path):
with open(file_path, mode="r") as file:
reader = csv.reader(file)
next(reader) # 헤더 건너뛰기
for row in reader:
if row:
# CSV에서 번호 부분만 가져오기
lotto_numbers.extend(map(int, row[1:]))
return lotto_numbers
# 로또 데이터 수집 및 저장
def save_lotto_numbers(file_path, latest_draw_no, draw_count):
initialize_csv(file_path)
saved_numbers = get_saved_draw_numbers(file_path)
new_data = []
for draw_no in range(latest_draw_no, latest_draw_no - draw_count, -1):
if draw_no in saved_numbers:
print(f"DrawNo {draw_no} is already saved. Skipping...")
continue
numbers = get_lotto_numbers(draw_no)
if numbers:
print(f"Fetched numbers for DrawNo {draw_no}: {numbers[1:]}")
new_data.append(numbers)
else:
print(f"Failed to fetch numbers for DrawNo {draw_no}.")
# 새 데이터를 CSV 파일에 추가 저장
if new_data:
with open(file_path, mode="a", newline="") as file:
writer = csv.writer(file)
writer.writerows(new_data)
print(f"{len(new_data)} new records were saved to {file_path}.")
else:
print("No new data to save.")
# 추천 로또 번호 생성
def generate_recommended_numbers(file_path):
# 저장된 번호 모두 불러오기
lotto_numbers = load_lotto_numbers(file_path)
if not lotto_numbers:
print("No lotto data available to generate recommendations.")
return None
# 번호 출현 빈도 계산
number_counts = Counter(lotto_numbers)
print("Top numbers by frequency: ", number_counts.most_common(12))
# 상위 12개 번호 선택
top_numbers = [num for num, _ in number_counts.most_common(12)]
# 상위 번호 중 6개 랜덤 선택
recommended_numbers = sorted(random.sample(top_numbers, 6))
return recommended_numbers
# 실행: 최신 회차 정보와 원하는 저장 개수 설정
latest_draw_no = 1156 # 최신 회차
draw_count = 200 # 최근 200회차를 처리
save_lotto_numbers(CSV_FILE_PATH, latest_draw_no, draw_count)
# 당첨 번호 추천
recommended_numbers = generate_recommended_numbers(CSV_FILE_PATH)
if recommended_numbers:
print(f"Recommended Lotto Numbers: {recommended_numbers}")
@junho85
Copy link
Author

junho85 commented Jan 30, 2025

AI의 힘을 빌려 서버 호출량을 줄이도록 개선 (했지만 본래의 기능에 문제가 생겼는지 여부는 확인하지는 않았음)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment