Programing/Java & Spring

공공데이터포털의 데이터를 이용하여 json 파일을 만들어보자! ver2 [Json 만들기]

세기루민 2020. 11. 17. 23:06
728x90

 

이 포스팅을 보기 전

 

공공데이터포털을 잘 모르신다면 포스팅을 보고 와주세요!

 

sg-moomin.tistory.com/26

 

공공데이터포털의 데이터를 이용하여 json 파일을 만들어보자! ver1 [공공데이터포털 이용하기]

어제 2차 컨펌 후 업무가 한개 추가되어서 고민과 걱정을 가지고 오랜만에 python을 켰습니다 ㅠㅠ 무튼 오늘 할 코딩은요?  공공데이터 포털에서 제공하는 api를 이용하여 데이터 추출! 그러면 천

sg-moomin.tistory.com

 

공공데이터에 대해 간단하게 요약해놨습니다!

 


이제 코딩을 시작해볼께요! 

 

import urllib.request 
import json
import matplotlib.pyplot as plt 

우선 필요로하는 라이센스들을 임폴트 해줍니다.

 

해당 url에 대한 데이터를 요청해서 json 파일로 변환해야 하기 때문에 그에 맞는 라이센스를 호출합니다.

 

def get_request_url(url):
    req=urllib.request.Request(url)
    try:
        response=urllib.request.urlopen(req)
        return response.read().decode('utf-8')
    except Exception as e:
        print(e)
        return None
    

가장 먼저 url을 완성했다는 가정으로 url에 대한 데이터를 호출할 수 있는 함수를 생성합니다.

 

def getContractinformationList16(inqryDiv,numOfRows,pageNo,ver):
    beginDataPoint = "201601010000"
    endDataPoint = "201612290000"

    access_key= 자신의 일반 인증키!
    end_point= 자신의 End Point 또는 서비스 요청 포인트!

    parameters="?serviceKey="+access_key
    parameters+="&numOfRows="+str(numOfRows)
    parameters+="&pageNo="+str(pageNo)
    parameters+="&inqryDiv="+str(inqryDiv)
    parameters+="&inqryBgnDt="+str(beginDataPoint)
    parameters+="&inqryEndDt="+str(endDataPoint)
    parameters+="&type="+str(ver)
    
    
    url=end_point+parameters  
    retData=get_request_url(url)
    
    print("parameters : " + parameters)
    
    if (retData==None): 
        return None 
    else: 
        return json.loads(retData) 
    

 

getContractinformationList16 함수를 만들어서 해당 url에 필요한 데이터들을 입력받아서 

 

하나의 url을 생성해줍니다.

 

생성한 url은 바로 위에 생성한 get_request_url 함수를 이용하여 데이터를 받아옵니다.

 

쉽게 말하면 url을 생성해서 해당 url에 대한 데이터를 호출하기 위해 사전 작업과 데이터를 받아오는 작업!

 

Parameter는 사용자의 End Point마다 다릅니다!

 

위의 코드로 예시를 들어보면 

 

http://apis.data.go.kr/1230000/CntrctInfoService/getCntrctInfoListThng
?serviceKey=해당서비스키
&numOfRows=100
&pageNo=31
&inqryDiv=1
&inqryBgnDt=201701010000
&inqryEndDt=201712300000
&type=json

이런 느낌으로 url에 입력했을 때 json 페이지가 나옵니다.

 

위에 url을 제작이나 파라미터들은 공공데이터 포털에 요청변수(Request Parameter)에 따라서 수정하시면 됩니다!

 

jsonResult=[] 
inqryDiv=1
numOfRows=100 
ver="json"

for i in range(1, 100):
    pageNo = i;
    jsonData = getContractinformationList17(inqryDiv,numOfRows,pageNo,ver)

    temp = (jsonData.get("response"))
    temp1 = (temp.get("body"))
    temp2 = (temp1.get("items"))
    jsonResult += temp2

with open('test11.json','w',encoding='utf-8') as outfile:
        retJson = json.dumps(jsonResult, indent=4,sort_keys=True,ensure_ascii=False)
        outfile.write(retJson)
    

위에서 만들었던 함수들을 이용해서 url에 알맞은 데이터를 호출하고

 

이 데이터를 json 파일로 변환합니다.

 

get을 이용하여 데이터를 쪼개서 추출해줍니다.

 

이걸 사용하는 이유를 설명해드리면 

 

Json도 결국 xml처럼 테그로 나눠지는데 

 

response -> body -> items를 확인할 수 있습니다.

 

여기서 get을 하지 않는다면?

 

json파일에는 response에 관련된 값들만 있겠죠?

 

결국 null 값이나 response 값들이 존재하게 됩니다.

 

따라서 items에 대한 값들만 불러와야 합니다. 

 

그리고 마지막에는 json 파일로 write 해주면 완성!

 

이번 포스팅은 url 데이터를 json으로 변환해봤습니다.

 

다음 포스팅에서는 DataFrame을 만들어 보도록 하겠습니다! 

 

 

 

 

 

728x90