본문 바로가기
Python

[Python 기초] 로또번호 API 사용하기.

by 모닝위즈 2023. 4. 28.
반응형

로또번호를 분석하고 싶다는.. 와이프의 요청으로 만들어 본...;;

 

[로또복권 공식 API URL]
https://www.dhlottery.co.kr/common.do

[파라미터]
method       getLottoNumber  컨텐츠타입
drwNo        1063            회차정보

[응답정보]
returnValue        success/fail        결과 성공/실패
drwNoDate          2023-04-15          추첨일자
totSellamnt        108347135000        총 상금(원)
firstWinamnt       3770311875          1등 상금(원)
firstPrzwnerCo     7                   1등 당첨자 수(명)
firstAccumamnt     26392183125         총 1등 상금(원)
drwNo              1063                추첨회차
drwtNo1            3                   첫번째 번호
drwtNo2            6                   두번째 번호
drwtNo3            22                  세번째 번호
drwtNo4            23                  네번째 번호
drwtNo5            24                  다섯번째 번호
drwtNo6            38                  여섯번째 번호
bnusNo             30                  보너스 번호

 

소스코드.

# IMPORT LIB #
import requests
import json
import csv

# CONFIG ####
# 로또 복권 API url
lotto_api_url = 'https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo='
# 가져올 (언젠가 내가 당첨될) 로또 추첨 회차 범위 설정 / 시작회차~끝회차
begin = 1
last = 1064
# 저장할 파일명 > 가져올 회차범위의 로또 당첨번호 및 가져올 회차범위에서 출현한 각 번호의 출현빈도
lotto_hist_file_name = "lotto_history_{0}_{1}.csv".format(str(begin), str(last))
lotto_numbycnt_file_name = "lotto_numbycnt_{0}_{1}.csv".format(str(begin), str(last))
# 인코딩 설정 (내 설정은 cp949에서 csv 파일 내의 한글이 안깨짐)
encoding = 'cp949'
# 파일 첫 줄 (헤더) 설정
title_data = ['회차','번호1','번호2','번호3','번호4','번호5','번호6']
# 각 번호의 출현빈도를 저장하기 위한 list 선언 및 저장할 dict 선언
numbers = [0] * 45
dict_ = dict()

# PROCESS ###
print('로또복권 당첨내역을 가져오는 프로세스를 시작합니다.')
f = open(lotto_hist_file_name, 'w', encoding=encoding)
writer = csv.writer(f)
# 파일 첫줄에 헤더 write
writer.writerow(title_data)

for i in range(begin, last+1):
    url = lotto_api_url + str(i)
    # 요청 결과 가져오기
    res_data = requests.get(url).text
    json_obj  = json.loads(res_data)
    # 결과 파싱
    drwNo       = json_obj.get('drwNo')
    drwtNo1     = json_obj.get('drwtNo1')
    drwtNo2     = json_obj.get('drwtNo2')
    drwtNo3     = json_obj.get('drwtNo3')
    drwtNo4     = json_obj.get('drwtNo4')
    drwtNo5     = json_obj.get('drwtNo5')
    drwtNo6     = json_obj.get('drwtNo6')

    # 각 회차별 결과를 csv 파일 내의 각 row에 저장
    data = [drwNo,drwtNo1,drwtNo2,drwtNo3,drwtNo4,drwtNo5,drwtNo6]
    writer.writerow(data)
    # 설정한 회차 결과 사이에서 각 번호별 출연 빈도를 나타내기 위한 프로세스 1
    num_data = [drwtNo1, drwtNo2, drwtNo3, drwtNo4, drwtNo5, drwtNo6]
    for num in num_data:
        numbers[num - 1] += 1

# 파일 저장 완료 후 close
f.close()
print("{0}회차부터 {1}회차까지의 당첨번호를 {2} 파일로 저장 완료!!".format(begin,last,lotto_hist_file_name))

# 설정한 회차 결과 사이에서 각 번호별 출연 빈도를 나타내기 위한 프로세스 2
for i in range(45):
    dict_[str(i + 1)] = numbers[i]

# 파일 생성
f = open(lotto_numbycnt_file_name, 'w', encoding=encoding)
writer = csv.writer(num_f)
writer.writerow(['번호','출현수'])
# 출현빈도가 낮은 순서 순으로 정렬
sorted_dict_  = sorted(dict_.items(), key = lambda item: item[1])
# 데이터 저장
for k, v in sorted_dict_:
    writer.writerow([k, v])

# 파일 저장 완료 후 close
f.close()
print("{0}회차부터 {1}회차까지의 당첨번호 중 각 번호별 출현 빈도를 {2} 파일로 저장 완료!!"
      .format(begin,last,lotto_numbycnt_file_name))

 

이렇게 로또를 계속 사다보면.....

 

....

댓글