반응형
로또번호를 분석하고 싶다는.. 와이프의 요청으로 만들어 본...;;
[로또복권 공식 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))
이렇게 로또를 계속 사다보면.....
....
'Python' 카테고리의 다른 글
ffmpeg - pcm확장자의 음성파일을 wav로 변환시키자. (0) | 2022.09.17 |
---|---|
pydub - wav를 추출하여 묵음 제거 후 시간을 잘라서 저장해보자. (0) | 2022.05.13 |
댓글