import requests
from bs4 import BeautifulSoup
import gradio as gr
def get_lottery_numbers(round_no: int):
"""
주어진 회차(round_no)에 대한 로또 당첨번호와 보너스 번호를 조회한 뒤
(당첨번호 리스트, 보너스 번호)를 반환하는 함수
"""
# 회차에 맞춰 URL 생성
url = "https://dhlottery.co.kr/gameResult.do?method=byWin&drwNo={}".format(round_no)
response = requests.get(url)
if response.status_code != 200:
return f"웹페이지 응답 에러: 상태코드 {response.status_code}", None
html = response.text
soup = BeautifulSoup(html, "html.parser")
# 당첨번호가 들어있는 태그 찾기
# 예)
...
과 1 등
# 실제 DOM 구조 확인 후 아래 코드를 적절히 수정하세요.
win_numbers = []
# 일단 클래스명이 "ball_645"인 모든 span 태그를 찾고,
# 보너스 공을 따로 구분하기 위해 마지막 공은 보너스라고 가정
number_spans = soup.select(".ball_645")
if not number_spans:
return f"{round_no}회차 당첨번호를 찾지 못했습니다. 사이트 구조가 바뀌었는지 확인해보세요.", None
# 당첨번호(6개) + 보너스번호(1개) = 7개가 정상적으로 있는지 확인
if len(number_spans) < 7:
return f"{round_no}회차 당첨번호가 비정상적으로 추출되었습니다. 추출 개수: {len(number_spans)}", None
# 앞의 6개는 당첨번호, 마지막 1개는 보너스번호
for i in range(6):
win_numbers.append(number_spans[i].text.strip())
bonus_number = number_spans[6].text.strip()
return win_numbers, bonus_number
def search_lottery_numbers(round_no_str):
"""
그레이디오에서 입력받은 '회차 번호'를 받아서
get_lottery_numbers 함수를 호출 후 문자열로 포매팅하여 반환
"""
# 입력값이 정수인지 체크
try:
round_no = int(round_no_str)
except ValueError:
return "정확한 숫자를 입력해 주세요."
result = get_lottery_numbers(round_no)
if isinstance(result[0], str):
# 에러 메시지 처리 (ex: "XXX회차 당첨번호를 찾지 못했습니다...")
return result[0]
win_nums, bonus = result
# 사용자가 보기 좋게 결과 표시
# 예) "당첨번호: 1 2 3 4 5 6 / 보너스번호: 7"
result_text = f"""
{round_no}회차 당첨번호
당첨번호: {', '.join(win_nums)}
보너스번호: {bonus}
"""
return result_text
# Gradio 인터페이스 설정
with gr.Blocks() as demo:
gr.Markdown("## 로또 당첨번호 조회기")
round_input = gr.Textbox(label="회차 번호 입력", value="1050")
search_button = gr.Button("조회")
result_output = gr.HTML()
search_button.click(fn=search_lottery_numbers,
inputs=round_input,
outputs=result_output)
# 로컬에서 실행을 원한다면 아래 코드 사용
if __name__ == "__main__":
demo.launch()