본문 바로가기

짜투리

[API] 호오.... OpenAPI 사용법을 알고 싶으시다구요?? 잘 찾아오셨습니다 후후 with python

728x90

도죠!!!!

 

나1!!!! 와쪄 흥

 

 

 


Open API란?

  • Open Application Programing Interface
  • 누구나 사용할 수 있도록 공개된 API

 

 컴공 관련 학생들은 대부분 데이터 처리를 해봤을 텐데, 오늘은 이 open api 사용법을 파보려고 한다. 

 

https://www.data.go.kr/

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

 

 대부분 이 사이트를 사용하는데 나는 이번 학기 빅데이터 프젝에 사용할 스마트팜 api를 활용해보려고 한다. 

 

https://data.smartfarmkorea.net/openApi/openApiList.do?menuId=M060502#con 

 

타이틀

설명

data.smartfarmkorea.net

 


Open API 신청

 일단 들어가서 Open API 신청을 한다. 체감상 신청하고 일주일 정도 걸린 것 같다. 

 

 이렇게 하면, 서비스키가 문자로도 오고 신청확인에 정보 입력하고 들어가면 볼 수 있다

서비스키는 openAPI의 비밀번호 쯤 된다

 

 종류에 따라서 서비스키가 필수인데도 있고 그냥 풀린데도 잇음. 오픈API닫힘 푸히힣ㄱ

 


데이터 확인

 두가지 방법이 있다.

 

 

1. 기술 문서를 다운해서 보기

 

2. 그냥 메인 화면에 뜬 목록 보기

 개인적으로 기술문서를 더럽게 어렵게 써놔서(그리고 좀 꼴보기 싫음) 메인화면에 뜬 거 보고 해도 노상관일 듯하다. 

 


Open API 사용하기

 본인이 어떤 정보를 원하는지 확실하게 정하고 가야 한다. 

 

나는 전국의 딸기 생육 정보 데이터를 얻고 싶다

 

1. open API 요청인자를 본다.

  • 보면 serviceKeyuserId, croppingSerINO가 필수 키다. 
  • serviceKey는 api 신청했을 때 만든 거임

 

(+)

 참고로 저거 어디다 쓰냐면 링크에다가 붙여쓰면 된다.

  • 중괄호 된 부분 지우고 해당 값 넣으면 됨.
  • startDate랑 endDate는 필수 아니니까 안 넣어도 되겠쮸?

요즘 세상 좋아져서 한글파일로 안 보고 웹페이지에서도 볼 수 있음

 

2. 요청인자를 찾는다.

  • userId, croppingSerINO만 찾으면 됨
  • 대충 오페레이션 목록보면서 출력항목에서 뒤지면 됨

벌써 찾아버렸쥬?

 

  • 만약 저런거 없으면 기술문서에서 112 찾아야 됨ㅋ

 

3. userId 먼저 찾읍시다

  • userId SAMPLE URL에서 링크를 복사

  • 저기 서비스 키 부분만 받은 서비스키로 붙여넣기하면 됨

  • 그럼 이케 뜸

 

여.기.서!!!!!!!!!!!!! 딩동댕

이거 아는 사람 최소 틀니낌

 

 크롬 말고 파이어폭스에서 열면 대게 이쁘게 나옵니당

 

 그리고 별도의 코드 필요없이 바로 JSON파일로 저장가능 ㅇㅇㅇㅇ (이거 알려주신 IAM의 최오빠 감삽니당!!!)

 


(+) 코드로 JSON파일 다루기

  • JSON파일 열고 CSV로 저장하기
import json

file = open('tlqkf.json')
tlqkffile = json.load(file)
tlqkffile.to_csv('farmInfo.csv', columns=['statusCode', 'statusMessage', 'userId', 'facilityId', 'addressName', 'itemCode'], index=False)

 

  • JSON파일 열고 CSV로 저장하기2
### json 파일을 csv파일로 변환 후 내보내기
import pandas as pd

file = pd.read_json('tlqkf.json')
file.to_csv('farmInfo.csv', columns=['statusCode', 'statusMessage', 'userId', 'facilityId', 'addressName', 'itemCode'], index=False, encoding="euc=kr")

 

 

  • 코드에서 사용해보기
tlqkffile[125]

 

  • 코드에서 사용해보기2
tlqkffile.get("addressName")

 


 

4. croppingSerINO 찾기

  • croppingSerINO는 서비스키와 userId를 필수 요청인자로 받는다

 

  • 수많은 농가들의 userId를 수작업으로 수집하는 건 말이 안 되므로 코드를 짠다
import requests
import pandas as pd

url = "http://www.smartfarmkorea.net/Agree_WS/webservices/ProvideRestService/getCroppingSeasonDataList/"   # 작기정보 url
service_key = 여러분의 service key

# 농가 id 가져오기 
idInfo = pd.read_csv('farmInfo.csv', encoding="euc-kr")  
cropDF = pd.DataFrame()

for i in range(len(idDF)):   
    id = idInfo['userId'][i]  # userId만 필요하니까

    data = requests.get(url+service_key+id).json() # 웹페이지에서 json 데이터 가져오기
    dataToDF = pd.DataFrame(data)   # json을 데이터 프레임으로 변경
    cropDF = cropDF.append(dataToDF)  # cropDF에 추가
    
# 엑셀로 내보내기
cropDF.to_csv("cropInfo.csv", encoding="euc-kr")

 

  • 간단하쥬? 참고로 전 셀레니움으로 한다고 깝치다고 하루날림.. IAM의 최선배에 따르면 셀레니움은 더럽게 느리니까 항상 최후의 최후의 최후의 수단으로 쓰라고 하십니다. 메모장에 적으세요...ㅜㅜㅜ

 

  • 한 9분 정도 지나면 크롤링 끗~

  • 쨔잔~

 

 


 

자 이제 userId랑 croppingSerINO를 얻었으니 어케 데이터 수집해야하는지 감이 오시죵???

 

 

끗~