본문 바로가기

짜투리

[API] 호오라~ openAPI 사용법 심화를 알고 싶으시다고요? with python

728x90

나~와~쨔~~~~

 

 

 

 

 

 

 


https://sogogi1000inbun.tistory.com/146

 

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

나1!!!! 와쪄 흥 Open API란? Open Application Programing Interface 누구나 사용할 수 있도록 공개된 API 컴공 관련 학생들은 대부분 데이터 처리를 해봤을 텐데, 오늘은 이 open api 사용법을 파보려고 한다. https

sogogi1000inbun.tistory.com

 

 지난 시간에는 농가 정보와 작기 정보를 크롤링하는 시간을 가졌다. 이번 시간에는 생육정보(딸기)를 크롤링 할 거다. 

 

 쟈아~ 가자!!!!!!!

 


1. 필요한 데이터 구조 생각해보기

설명은 생략

이라고 할뻔 하하하하하핳 장난이에요 ㅎㅎ

 

  • 농가 정보의 경우 일차원적인 리스트에 담겨서 오기 때문에 고려할 필요 없음
  • 작기 정보는 농가 ID를 바탕으로 수집됨
  • 농가마다 여러개의 리스트가 나올 수도 있고, 하나의 리스트만 나올 수도 있기 때문에 따로따로 수집해서 메모리 소비하는 것보다 그때그때 바로 받아오는 것이 베스트임

 

2. 코딩 시작

 

2-1. 농가 id 가져오기

# 농가 id 값 가져오기
import pandas as pd

farmInfo = pd.read_csv('farmInfo.csv', encoding="euc-kr")
userID = farmInfo['userId'].values # 넘파이 배열
userID = userID.tolist()  # 넘파이 배열=> 리스트

# nan 값 제외
def removeNan(L):
    newL = []
    for l in L:
        if str(l)!="nan": newL.append(l)
    return newL
    
userIDL = removeNan(userID)  # 농가 정보

 

2-2. 크롤링 메인

# 크롤링 메인
import requests
import json
from tqdm import tqdm

farm_url = "http://www.smartfarmkorea.net/Agree_WS/webservices/ProvideRestService/getCroppingSeasonDataList/{서비스키}/"   # 작기정보 url + 서비스키
ddargi_url = "http://www.smartfarmkorea.net/Agree_WS/webservices/ProvideRestService/getStrbCultivateDataList/{서비스키}/"    # 생육정보 url + 서비스키

for userID in tqdm(userIDL): # 총 892개
    crop_infoL = getCropNumber(userID) # 해당 농가의 작물 번호리스트 받아오기
    for cropNum in crop_infoL:
        # 링크 유효성 검증
        try:
            ddargi_info = requests.get(ddargi_url+userID+"/"+str(cropNum)+"/2015-09-05/2022-09-04").json()
        except:
            continue
        
        ddargi_df = getData(ddargi_info)  # 데이터 프레임 형식으로 받아옴
        saveData2(ddargi_df)  # 저장

 

2-3. 작물 번호 가져오기(함수)

# 작물 번호 가져오기
import requests
def getCropNumber(userID):
    crop_info_list = requests.get(farm_url+userID).json()  # 리스트로 저장 됨 - [{}]
    crop_infoL = []
    for i in crop_info_list: 
        # print(len(i))
        crop_infoL.append(i['croppingSerlNo'])

    return crop_infoL
 

 

 

2-4. 딸기 생육 정보 가져오기(한수)

# 딸기 생육정보 가져오기
import requests
import pandas as pd

def getData(ddargi_info):
    dic = dict()
    
    # 데이터 프레임으로 합치기
    for ddargi in ddargi_info: # ddargi_info = 리스트
        for d in ddargi: # ddargi = 딕셔너리, d=key값
            if d not in dic:  # 키값이 딕셔너리 안에 없으면
                dic[d]=[ddargi[d]]  
            else: 
                dic[d].append(ddargi[d])
    
    # 딕셔너리=> 데이터 프레임
    ddargi_df = pd.DataFrame(dic)
    
    return ddargi_df

 

2-5. 데이터 저장(두수)

# 데이터 저장2
import csv
import os.path

file_path = "딸기생육정보test1.csv"

def saveData2(ddargi_df):
    if os.path.isfile(file_path):  # 두번째 데이터프레임 저장
        with open(file_path, 'a', newline='') as myfile:
            wr = csv.writer(myfile)
            for i in range(len(ddargi_df)):
                wr.writerow(ddargi_df.iloc[i])
        
    else: # 처음으로 저장할 때  
        ddargi_df.to_csv(file_path, encoding="euc-kr", index=False)  # 데이터 프레임=> csv

 

3. 끝나고 감탄하기

이야양야야야약ㄱ!!!!!! 스게!!!! 오마에 스게1!!!!!!!!


꿋~