Created
January 30, 2025 13:59
-
-
Save junho85/2be4e358c69c1b94f1bae9ad8ceda053 to your computer and use it in GitHub Desktop.
차니차니님의 로또 번호 생성기 개선 버전
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
AI의 힘을 빌려 서버 호출량을 줄이도록 개선 (했지만 본래의 기능에 문제가 생겼는지 여부는 확인하지는 않았음)