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