티스토리 뷰
1) 공공데이터 오픈API를 신청해서 데이터 얻기 https://jusths.tistory.com/199
2) 데이터를 먹기좋게 요리하기 https://jusths.tistory.com/200
3) 데이터를 차트로 만들어서 웹서비스 하기 https://jusths.tistory.com/201
4) Heroku 에 올려서 서비스하기 https://jusths.tistory.com/202
GitHub: https://github.com/nicewook/corona-visual-server
Heroku app: https://corona-weeks.herokuapp.com/
데이터를 먹기좋게 요리하기
다음과 같은 프로세스로 원하는 데이터를 만들어보았다.
1. 먼저 오픈API로 요청을 보내는 날짜를 기준으로 23일치를 요청한다. 전날 집계가 미처 안되었을 경우를 감안해서 조금 넉넉히 요청했다.
2. Response 로 들어오는 xml 정보를 Go struct 로 unmarshal 한다
3. Unmarshal 한 정보에서 원하는 데이터를 얻어낸다
response 정보에서 Go struct 만들어내기
지난번 포스팅대로 오픈API 요청을 보내면 아래와 같은 response를 받는다.
온라인을 검색해보면 xml을 Go struct 로 변환해주는 사이트들이 많다.
그 중 하나에서 Go struct 를 생성했다. https://www.onlinetool.io/xmltogo/
여기에 더해서 우리가 필요로하는 정보인 Item, 그리고 최종적으로 차트 만드는데 쓸 CoronaDailyData 구조체를 선언해두었다.
오픈API로 요청 보내기
너무 상세한 설명은 생략하겠다. 세부사항은 GitHub을 참고하면 되겠다.
1) request를 만들고, 필요한 다섯가지 항목의 query를 만들었다.
- serviceKey는 go 1.16 버전에 추가된 embed를 이용해 로컬의 파일에서 읽도록 구현하였다. 이때 공공데이터포털에서 제공한 URL encoding 된 문자열을 다시 decoding 해서 저장해뒀다. (즉, %3D 를 = 으로 변경해서 저장해뒀다)
- startCreatedDt, endCreatedDt 는 오늘 날짜를 기준으로 23일 전부터 오늘까지의 날짜로 요청하도록 해두었다. 자세한 것은 get3@eeksRange() 함수 구현을 찾아보자
- q.Encode() 함수에서 다시 URL encoding이 일어난다.
2) response body 를 추출해서 리턴해준다.
xml 을 파싱하기
파싱은 간단하다. 위에서 만들어둔 Response 구조체로 Unmarshal 해주기만 하면 된다.
원하는 데이터 추출하기
우리가 원하는 데이터는 결국 resp.Body,Items.Item 에 들어있다.
1) StateDt 날짜정보에서 하루를 뺀 날짜를 구해서 CoronaDailyData 의 Date에 넣어준다.
2) 제공되는 데이터에 그 날의 확진자 정보는 없다. 그래서 사망자, 격리해제자, 치료중 환자의 정보 변동을 이용해서 알아낸다.
- getAddCount() 함수를 참고하면 된다.
조금만 더 다듬어서 순서를 정렬하고, 원하는 21일만을 추출해내었다.
이렇게 우리가 원하는 데이터인 data []CoronaDailyData 를 만들어내었다.
다음 포스팅에서는 이걸 바탕으로 차트를 만들어보자
'golang' 카테고리의 다른 글
코로나 바이러스 확진자 동향 3주간 비교 - Heroku로 서비스하기 (0) | 2021.03.03 |
---|---|
코로나 바이러스 확진자 동향 3주간 비교 - 차트 만들기 (0) | 2021.03.03 |
코로나 바이러스 확진자 동향 3주간 비교 - 공공데이터 오픈API (0) | 2021.03.02 |
exec.Command() 간단 활용 (0) | 2021.02.18 |
Go 슬라이스 가지고 놀아보자 (0) | 2020.10.21 |
- Total
- Today
- Yesterday
- Gin
- 체호프
- 2023
- ChatGPT
- OpenAI
- clean agile
- go
- 독서
- 제이펍
- intellij
- agile
- 티스토리챌린지
- Shortcut
- websocket
- bun
- 영화
- 노션
- API
- solid
- folklore
- github
- Bug
- 클린 애자일
- golang
- 오블완
- 인텔리제이
- 잡학툰
- notion
- 독서후기
- strange
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |