티스토리 뷰

 

Photo by CDC on Unsplash

 

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 만들어내었다.

다음 포스팅에서는 이걸 바탕으로 차트를 만들어보자

반응형
반응형
잡학툰 뱃지
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
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
글 보관함