[스파르타 코딩클럽] 개인 프로젝트 개발일지 #3

seungmi lee·2020년 8월 18일
3

Sparta Coding Club

목록 보기
3/5
post-thumbnail

🏃‍♀️ 스파르타 코딩클럽 6주차 - 2

ovenapp에서 만들었던 레이아웃을 토대로 프론트 화면을 구성 중인데... 대부분이 테이블 형식으로 되어있어서 디자인적으로 이뻐보이지는 않는다ㅎㅎ 테이블을 좀 다른 형식으로도 풀어서 작업하고싶었는데 이렇게 프론트 화면 구성에 욕심을 내다보면 다음 작업을 할 시간이 부족할거같아서 여기까지만ㅠ 일단 이렇게 최대한 심플한 레이아웃으로 진행을 하고 혹시! 시간이 남는다면 그때 디자인적으로 욕심을 좀 더 내볼 생각이다.



프론트 화면 그리기

부트스트랩을 사용하지않고 직접 HTML과 CSS 코드를 작성했다. 화면이 거의 타이틀과 테이블 형식으로 간단하게 구성되어있어 프론트 화면을 그리는데에 긴 시간이 소요되지않았다. 공통으로 사용되는 부분(Title, Description, Disclaimer, Table, Button...)을 파악 후 먼저 작업하여 어느 섹션에서도 사용할 수 있도록 공통화 작업을 해놓으면 작업 소요시간을 단축할 수 있다.


API 가져오기

https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=회차번호

나눔로또에서 제공하는 로또 당첨번호 API는 url 끝 부분에 회차번호를 입력하면 각 회차별 API를 가지고 올 수가 있다! API를 호출하면 아래와 같은 결과를 받을 수가 있다.👇

{
  totSellamnt: 87708256000,        // 누적금
  returnValue: "success",          // 실행결과
  drwNoDate: "2020-08-15",         // 추첨날짜
  firstWinamnt: 2382430667,        // 1등 당첨금
  drwtNo6: 44,                     // 당첨번호 6
  drwtNo4: 42,                     // 당첨번호 4
  firstPrzwnerCo: 9,               // 1등 당첨인원
  drwtNo5: 43,                     // 당첨번호 5
  bnusNo: 13,                      // 보너스 당첨번호
  firstAccumamnt: 21441876003,     // 1등 당첨금 총액
  drwNo: 924,                      // 회차번호
  drwtNo2: 11,                     // 당첨번호 2
  drwtNo3: 34,                     // 당첨번호 3
  drwtNo1: 3                       // 당첨번호 1
}

나는 위의 결과 중에서 아래 항목들만 사용할 예정이다!

  • drwNoDate : 추첨날짜
  • drwtNo1~6 : 당첨번호 순서
  • bnusNo : 보너스 당첨번호
  • drwNo : 회차번호

로또 API는 db에 한 번만 저장해두고 사용하면 되기 때문에 init_db.py에 따로 작성해주었다. 음... 문제는 1회부터 최신회차까지 주르륵 가져와야하는데 최신회차는 앞으로 계속 업데이트가 될테고 가장 최신회차까지만 반복문이 돌아야하는데 어떻게 예외처리를 해야할지 고민이다. 일단은 가장 최신회차로만 해서 API를 가져와보는건 테스트했고 이제 좀 전에 말한대로 반복과 예외처리에 대해 좀 더 생각해봐야할 것 같다.🤔

👏튜터님의 도움을 받아 while문을 사용하여 무한루프 처리를 할 수 있었다! while True : while문을 무한루프로 만들기 위해서 조건문에 True를 입력해줬다. 그리고 무한루프에서 빠져나오기 위해서 break를 사용하였다.
또한, 저장한 많은 db 중에서 가장 최신회차 데이터만 가져와서 뿌려줘야하기 때문에 .sort('drwNo', -1).limit(1)) sort를 사용하여 내림차순으로 정렬한 뒤 limit을 사용하여 출력할 데이터 갯수를 지정해줬다.


크롤링 및 DB 저장하기

동행복권 사이트에서 이번주 로또 당첨정보랑 역대 최다 판매점 정보를 크롤링 해서 db에 저장해뒀다. 이것도 위에 API 가져온거처럼 한 번만 저장해두면 되게 때문에 init_db.py에서 작업했다. 한 번 크롤링해서 db에 저장해보니 두번째는 수월하게 할 수 있었다.


회사에서 작업할 때 TIP📌

내가 회사에서 스파르타 개인 프로젝트 작업을 하려 했을 때 사내 proxy 때문에 패키지 다운로드부터 requests 연결까지 제대로 되지 않아서 직접 구글링을 하면서 해결 방법을 찾았다. 까먹지 않기 위해 또는 나와 같은 경험을 할 수 있는 사람들을 위해 기록해놔야겠다고 생각했다!

  1. 회사 proxy 때문에 pip 패키지 다운로드가 안된다면👇
    • pip --proxy [회사 프록시 url] --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org install 패키지명
  2. 마찬가지로 회사 proxy 때문에 requests 연결 오류가 뜬다면👇
    • proxies = { 'http': None, 'https': None }
      data = requests.get('https://dhlottery.co.kr/gameResult.do?method=byWin', headers=headers, proxies=proxies)

ToDo List

✔ 6주차

  • ✅ 프론트 화면 그리기
  • ✅ 각 회차별 타이틀 및 날짜 크롤링 및 db 저장 뿌려주기
  • ✅ 해당차 당첨내역 크롤링 및 db 저장 및 뿌려주기
profile
👩‍💻

0개의 댓글