[STEP 1 ]우선 공공 api에 회원가입 후 선거 공약 정보를 활용 신청한다.

그다음 스크롤을 내리면 필수적으로 얻어야 하는 정보들을 볼 수 있다.
추가로 얻어야 하는 params 정보는 선거ID, 선거 종류 코드 후보자 ID

[STEP : 2] 중앙선거 관리위원회 코드정보 데이터를 받아온다.


[STEP : 3]api를 통해 내용을 읽어오는 코드를 확인한다.
나는 dotenv를 통해서 .env에 인증키를 넣고 load_dotenv()로 읽어오는 방식을 사용해서 데이터를 숨겨서 가져왔다.
params에 들어가는 데이터는 decoding된 암호키를 읽어와야 request를 받을 수 있다.
이를 통해서 json 키를 읽어올 수 있다.
이걸 통해 print를 확인하면
b'{"response":{"header":{"resultCode":"INFO-00","resultMsg":"NORMAL SERVICE"},"body":{"items":{"item":[{"num":"1","sgId":"19920324","sgName":"\xec\xa0\x9c14\xeb\x8c\x80 \xea\xb5\xad\xed\x9a\x8c\xec\x9d\x98\xec\x9b\x90\xec\x84\xa0\xea\xb1\xb0","sgTypecode":"0","sgVotedate":"19920324"},{"num":"2","sgId":"19920324","sgName":"\xea\xb5\xad\xed\x9a\x8c\xec\x9d\x98\xec\x9b\x90\xec\x84\xa0\xea\xb1\xb0","sgTypecode":"2","sgVotedate":"19920324"},{"num":"3","sgId":"19921218","sgName":"\xec\xa0\x9c14\xeb\x8c\x80 \xeb\x8c\x80\xed\x86\xb5\xeb\xa0\xb9\xec\x84\xa0\xea\xb1\xb0","sgTypecode":"0","sgVotedate":"19921218"},{"num":"4","sgId":"19921218","sgName":"\xeb\x8c\x80\xed\x86\xb5\xeb\xa0\xb9\xec\x84\xa0\xea\xb1\xb0","sgTypecode":"1","sgVotedate":"19921218"},{"num":"5","sgId":"19960411","sgName":"\xec\xa0\x9c15\xeb\x8c\x80 \xea\xb5\xad\xed\x9a\x8c\xec\x9d\x98\xec\x9b\x90\xec\x84\xa0\xea\xb1\xb0","sgTypecode":"0","sgVotedate":"19960411"},{"num":"6","sgId":"19960411","sgName":"\xea\xb5\xad\xed\x9a\x8c\xec\x9d\x98\xec\x9b\x90\xec\x84\xa0\xea\xb1\xb0","sgTypecode":"2","sgVotedate":"19960411"},{"num":"7","sgId":"19971218","sgName":"\xec\xa0\x9c15\xeb\x8c\x80 \xeb\x8c\x80\xed\x86\xb5\xeb\xa0\xb9\xec\x84\xa0\xea\xb1\xb0","sgTypecode":"0","sgVotedate":"19971218"},{"num":"8","sgId":"19971218","sgName":"\xeb\x8c\x80\xed\x86\xb5\xeb\xa0\xb9\xec\x84\xa0\xea\xb1\xb0","sgTypecode":"1","sgVotedate":"19971218"},{"num":"9","sgId":"20000413","sgName":"\xec\xa0\x9c16\xeb\x8c\x80 \xea\xb5\xad\xed\x9a\x8c\xec\x9d\x98\xec\x9b\x90\xec\x84\xa0\xea\xb1\xb0","sgTypecode":"0","sgVotedate":"20000413"},{"num":"10","sgId":"20000413","sgName":"\xea\xb5\xad\xed\x9a\x8c\xec\x9d\x98\xec\x9b\x90\xec\x84\xa0\xea\xb1\xb0","sgTypecode":"2","sgVotedate":"20000413"}]},"numOfRows":10,"pageNo":1,"totalCount":179}}}'
위와 같은 읽을 수 없는 b로 시작하는 바이너리 코드를 만날 수 있다. 이를 UTF-8로 디코딩 하거나 JSON으로 파싱하면 확인할 수 있다.
[STEP : 4] request한 데이터를 json 형태의 양식으로 확인하게 하는 코드를 작성한다.
{'response': {'header': {'resultCode': 'INFO-00', 'resultMsg': 'NORMAL SERVICE'}, 'body': {'items': {'item': [{'num': '1', 'sgId': '19920324', 'sgName': '제14대 국회의원선거', 'sgTypecode': '0', 'sgVotedate': '19920324'}, {'num': '2', 'sgId': '19920324', 'sgName': '국회의원선거', 'sgTypecode': '2', 'sgVotedate': '19920324'}, {'num': '3', 'sgId': '19921218', 'sgName': '제14대 대통령선거', 'sgTypecode': '0', 'sgVotedate': '19921218'}, {'num': '4', 'sgId': '19921218', 'sgName': '대통령선거', 'sgTypecode': '1', 'sgVotedate': '19921218'}, {'num': '5', 'sgId': '19960411', 'sgName': '제15대 국회의원선거', 'sgTypecode': '0', 'sgVotedate': '19960411'}, {'num': '6', 'sgId': '19960411', 'sgName': '국회의원선거', 'sgTypecode': '2', 'sgVotedate': '19960411'}, {'num': '7', 'sgId': '19971218', 'sgName': '제15대 대통령선거', 'sgTypecode': '0', 'sgVotedate': '19971218'}, {'num': '8', 'sgId': '19971218', 'sgName': '대통령선거', 'sgTypecode': '1', 'sgVotedate': '19971218'}, {'num': '9', 'sgId': '20000413', 'sgName': '제16대 국회의원선거', 'sgTypecode': '0', 'sgVotedate': '20000413'}, {'num': '10', 'sgId': '20000413', 'sgName': '국회의원선거', 'sgTypecode': '2', 'sgVotedate': '20000413'}]}, 'numOfRows': 10, 'pageNo': 1, 'totalCount': 179}}}
원하는 결과가 나왔다.
이제 이 코드를 확인해서 데이터를 전처리 하고 당선인 정보를 확인한 뒤 선거 공약 정보를 추가할 수 있게 되었다.
결론
공공 api를 request 하기 위해서는 params의 값을 추가해줘야 한다.
그 때 공공키는 디코딩된 암호를 추가해야 하고 받은 request는 바이너리 형태로 오기 때문에 json.load를 하거나 utf-8로 디코딩 해야 되는데 json 형식으로 저장하기 위해 json.load로 데이터를 저장하면 된다.
추가로 json으로 저장하는 코드를 작성하고 데이터를 확인해서 다른 api에 어떤 param으로 들어가야 하는지 추가 작업을 하면 될 거 같다.
'Personal Project > 국회의원 분석 프로젝트' 카테고리의 다른 글
| 국회의원 회의록 정규식으로 구분하기, docker를 이용해 elastic search로 설치, 저장하기, 오류 해결하기 (0) | 2025.02.02 |
|---|---|
| 국회의원 회의록 데이터 가져오는 법 with Python (0) | 2025.01.31 |
| 국회의원 공약 가져오기 api 에러 - "resultMsg": "데이터 정보가 없습니다. 입력 파라미터값을 확인해주시기 바랍니다." (0) | 2025.01.25 |
| 공공 api 읽어온 후 json 파일 csv로 전환한 후 저장하기 - python (0) | 2025.01.22 |
| 네이버 api로 뉴스 읽어오기 - python (0) | 2025.01.19 |