상세 컨텐츠

본문 제목

[파이썬] 가락 공판장 OPEN API 신청 방법 및 개발방법

IT/파이썬

by SageIN 2021. 5. 11. 16:07

본문

반응형

 

 

 

아래 홈페이지로 들어가 사용하고자하는 API를 찾아본다.

www.garak.co.kr/cntnts/selectContents.do?cntnts_id=EC020000

 

서울시농수산식품공사

 

www.garak.co.kr

 

신청전에 api 정보를 보면 넣어야 하는 파라미터와

GET 형태로 보낼수 있는 쿼리가 아래에 잘 나와있다.

 

경매결과 신청을 예로 들어보면

신청하기 버튼을 클릭한다.

 

개인 수집및 이용 동의서를 동의하고 확인을 클릭한다.

 

휴대폰 인증화면이 뜨고 인증후 

간단하게 왜 API를 사용하는지에 대한 정보를 넣고

신청하면 끝이다.

 

보통 하루에서 이틀정도 시간이 지나면

문제가 될만한 사항을 내용을 넣지 않았다면 

승인이 난다.

 

여기까지는 API 신청방법이고 승인이 난다음

프로그램 만드는 법은 간단하다.

 

승인후 알려주는 API ID 와 PASSWORD 

서비스 ID 등을 넣고 조회 쿼리만 보내면 끝이다.

 

간단하게 조회하는 코드만 작성한 것인데

필요에 따라 알고리즘을 달리하여 만들면 된다.

다른 api도 아래와 비슷한 방법으로 작성하면 된다.

import time
import requests
import xml.etree.ElementTree as ET
import math

# 쿼리보내는 속도 조절을 위한 time 라이브러리 사용
# 통신을 위한 requests 라이브러리 사용
# 결과를 xml로 돌려주기 때문에 xml 라이브러리 사용

# 통신하기
def garak_xml(page,s_date,s_bubin,s_pummok,s_sangi):
	
    # 주소
    url = "http://www.garak.co.kr/publicdata/dataOpen.do?"
	
    # 파라미터
    params = (
        ('id', '필수입력'), # 필수입력
        ('passwd', '필수입력'), # 패스워드 필수입력
        ('dataid', '필수입력'),  # 서비스ID
        ('pagesize', '10'),  # 1page 보이는 갯수 (변경안됨)
        ('pageidx', page),  # 페이지 번호
        ('portal.templet', 'false'),  # 페이지
        ('s_date', s_date), #조회날짜 필수입력, 오늘기준 5년전까지
        ('s_bubin', s_bubin), # 법인명
        ('s_pummok', s_pummok), # 폼목명
        ('s_sangi', s_sangi) # 산지명
    )
	
    # 통신요청
    response = requests.get(
        url,params=params
    )
	
    # 결과값 
    status = response.status_code
    
    # 통신이 성공하지 않았다면
    if(status!=200):
        raise Exception("Solr has a problem")

    text = response.text
	
    # 결과 텍스트 리턴
    return text

# xml 파싱
def garak(s_date,s_bubin,s_pummok,s_sangi):
    
    page = 1
    # 전체 페이지를 다 통신 할때까지 무한루프를 돈다.
    while True:
        text = garak_xml(page, s_date, s_bubin, s_pummok, s_sangi)
        root = ET.fromstring(text)
        list_total_count = root.find('list_total_count').text
        total_page = math.ceil(int(list_total_count) / 10)
        print(list_total_count, total_page,page)

        for item in root.findall('list'):
            PUMMOK = item.find('PUMMOK').text #품목명
            PUMJONG = item.find('PUMJONG').text #품종명
            PUM_NAME_IMSI  = item.find('PUM_NAME_IMSI').text #임시품목명
            UUN = item.find('UUN').text #거래단량
            DDD = item.find('DDD').text #등급단위
            PPRICE = item.find('PPRICE').text #경락가
            SSANGI = item.find('SSANGI').text #산지명
            CORP_NM = item.find('CORP_NM').text #품목명
            ADJ_DT = item.find('ADJ_DT').text #정산일자
            INJUNG_GUBUN = item.find('INJUNG_GUBUN').text #인증구분
            print(PUMMOK,PUMJONG,PUM_NAME_IMSI,UUN,DDD,PPRICE,SSANGI,CORP_NM,ADJ_DT,INJUNG_GUBUN)


        # 조회종료
        if (total_page == page or total_page == 0):
            break
        time.sleep(1)
        page+=1
     
     
 if __name__ == '__main__':
    '''
    서울청과 : 11000101
    농협(공) : 11000102
    중앙청과 : 11000103
    동부팜청과 : 11000104
    한국청과 : 11000105
    대아청과 : 11000106
    '''
    # 조회일, 경매처, 품목, 산지명 
    garak("20210114","11000102","사과","")

 

 

 

 

 

반응형

관련글 더보기

댓글 영역