본문 바로가기

카테고리 없음

로또 API를 이용하여 이전에 당첨된 적 없는 번호 추천해주는 서비스

def get_lotto_nums(drwno):
    
    url = f'https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={drwno}'
    response = requests.get(url)
    output = response.json()
    result = []
    result = [output[f'drwtNo{i+1}'] for i in range (6)]
    # result.append(output['bnusNo'])
    return tuple(result)

저 위에 url로 숫자를 넣어 들어가면 해당 회차 로또 정보를 얻을 수 있다. 

결과값은 튜플로 넣어서 변하지 않도록 해주자.

output = get_lotto_nums(1100)
output
(17, 26, 29, 30, 31, 43)

결과가 잘 나오는 것을 확인할 수 있다.

 

from tqdm.auto import tqdm			#코드 진행상황 알려줌
# 당첨 번호 싸그리 모아오기

numbers = []

for drwno in tqdm(range(1, 1108+1)):
    result = get_lotto_nums(drwno)
    numbers.append(result)

16분에 걸쳐 다 받았다. 

위 함수는 결과값으로 (숫자6개) 튜플을 계속 반환해 주니, 이것을 모두 result라는 리스트에 담아주는 것.

 

len(numbers)

확인해 보니 1108로 잘 들어왔다. 

 

nums = [i for i in range(1, 46)]

#nums는 1부터 45까지의 숫자를 담은 리스트

#랜덤 번호 생성기
def generate_nums():
    return tuple(sorted(random.sample(nums, 6)))

generate_nums()

#튜플안에 있는 애를 설명해보면, random.sample(nums, 6) < 
#이 코드는 nums 리스트에서 중복되지 않는 6개의 숫자를 무작위로 선택하여 리스트로 반환하라는 의미.

 

def final11(numbers):
    while True:
        lotto_nums = generate_nums()

        if lotto_nums in set(numbers):
            continue
        else:
            break
    return lotto_nums
    
#final11 함수는 numbers라는 1108개의 번호집합과 중복되지 않는 로또 번호를 생성한다. 

#먼저 lotto_nums는 방금 만든 함수의 결과값이므로 임의로 생성한 6개의 숫자 튜플이다.
#만약 이 튜플이 1108개의 numbers 안에 있는 번호들의 집합들 중 겹치지 않는지 확인을 하는데,
#안겹치는 경우 결과값을 반환해준다.

 

lotto_num = final11(numbers)

lotto_nums

이렇게 하면 추천번호가 나온다.

[1, 6, 11, 16, 22, 28]

결과는 이렇게 나왔다.