๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โ–ช Research

Guide: Converting KOICA OpenAPI Data to Files Using Python (2)

by soychoi 2024. 8. 8.
728x90
๋ฐ˜์‘ํ˜•
This guide explains how to fetch data from KOICA OpenAPI and convert it into Excel files using Python code. It includes the process of saving data to files and provides concrete code examples

 

Guide: Python Code for Converting KOICA OpenAPI Data to Files | Excels
KOICA ์˜คํ”ˆAPI๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํŒŒ์ด์ฌ ์ฝ”๋“œ ๊ฐ€์ด๋“œ

2. Name of data used: KOICA Local Safety Information
(ํ•œ๊ตญ๊ตญ์ œํ˜‘๋ ฅ๋‹จ_ํ˜„์ง€ ์•ˆ์ „์ •๋ณด)

Google Colab: https://colab.research.google.com/drive/10BISX58wfqgf2dZSR-izYJjzB1XIpEyU?usp=sharing

 

 

1. API ํ˜ธ์ถœ URL ์ฃผ์†Œ ํ™•์ธ

  • ์š”์ฒญ์ฃผ์†Œ http://apis.data.go.kr/B260003/LocalSafetyInformationService/getLocalSafetyInformationList

2. ์ผ๋ฐ˜ ์ธ์ฆํ‚ค(Decoding) ํ™•์ธ

 

3. ํŒŒ์ผ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ 

* ํ•ญ๋ชฉ๋ช…(๊ตญ๋ฌธ)์ด ์ถœ๋ ฅ๋˜๋„๋ก ์ฝ”๋“œ ์ถ”๊ฐ€ํ•จ

 

์ „์ฒด ์ฝ”๋“œ

# 2. ํ•œ๊ตญ๊ตญ์ œํ˜‘๋ ฅ๋‹จ_ํ˜„์ง€ ์•ˆ์ „์ •๋ณด

import requests
import pandas as pd
from google.colab import files

# API ์š”์ฒญ URL ๋ฐ ๊ธฐ๋ณธ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •

# ์•„๋ž˜ serviceKey์—๋Š” ์š”์ฒญํ•ด์„œ ๋ถ€์—ฌ ๋ฐ›์€ "์ผ๋ฐ˜ ์ธ์ฆํ‚ค(Decoding)"๋กœ ๋Œ€์ฒดํ•˜์—ฌ ๊ธฐ์ž…ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค!
service_key = '์ผ๋ฐ˜ ์ธ์ฆํ‚ค(Decoding)'

# ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ํ•จ์ˆ˜
def fetch_all_data(url, service_key):
all_data = []
page_no = 1

while True:
params = {
'serviceKey': service_key,
'numOfRows': '1000',
'pageNo': page_no
}

response = requests.get(url, params=params)
if response.status_code == 200:
items = response.json().get('data', [])
if not items:
break
all_data.extend(items)
page_no += 1
else:
print(f"API ์š”์ฒญ ์‹คํŒจ: {response.status_code}")
break

return all_data

# ์ „์ฒด ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ
all_items = fetch_all_data(url, service_key)

# ํ•ญ๋ชฉ๋ช…(์˜๋ฌธ)๊ณผ ํ•ญ๋ชฉ๋ช…(๊ตญ๋ฌธ)์˜ ๋งคํ•‘
column_mapping = {
"country_nm": "ํ•œ๊ธ€ ๊ตญ๊ฐ€๋ช…",
"country_eng_nm": "์˜๋ฌธ ๊ตญ๊ฐ€๋ช…",
"country_iso_alp2": "ISO 2์ž๋ฆฌ์ฝ”๋“œ",
"continent_nm": "๋Œ€๋ฅ™๋ช…",
"business_type_cd": "์‚ฌ์—…์œ ํ˜•์ฝ”๋“œ",
"business_type_cd_nm": "์‚ฌ์—…์œ ํ˜•๋ช…",
"kor_business_nm": "์‚ฌ์—…๋ช…(๊ตญ๋ฌธ)",
"eng_business_nm": "์‚ฌ์—…๋ช…(์˜๋ฌธ)",
"business_start_dt": "์‚ฌ์—…์‹œ์ž‘์ผ",
"business_end_dt": "์‚ฌ์—…์ข…๋ฃŒ์ผ",
"multi_year_type_cd": "๋‹ค๋…„๊ตฌ๋ถ„์ฝ”๋“œ",
"multi_year_type_cd_nm": "๋‹ค๋…„๊ตฌ๋ถ„์ฝ”๋“œ๋ช…",
"bnft_org_nm": "์ˆ˜ํ˜œ๊ธฐ๊ด€๋ช…",
"business_year": "์‚ฌ์—…๋…„๋„"
}

# ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ๋ณ€ํ™˜ ๋ฐ ์—‘์…€ ํŒŒ์ผ ์ €์žฅ
if all_items:
df = pd.DataFrame(all_items)
df.rename(columns=column_mapping, inplace=True)
file_path = 'LocalSafetyInformation_All_Kor.xlsx'
df.to_excel(file_path, index=False)
print(f"์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ '{file_path}' ํŒŒ์ผ๋กœ ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
files.download(file_path)
else:
print("์‘๋‹ต ๋ฐ์ดํ„ฐ์— ํ•ญ๋ชฉ์ด ์—†์Šต๋‹ˆ๋‹ค.")

 

 

 

Guide: Python Code for Converting KOICA OpenAPI Data to Files | Excels
KOICA ์˜คํ”ˆAPI๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํŒŒ์ด์ฌ ์ฝ”๋“œ ๊ฐ€์ด๋“œ

3. Name of data used: KOICA Local Activity Information
(ํ•œ๊ตญ๊ตญ์ œํ˜‘๋ ฅ๋‹จ_ํ˜„์ง€ ํ™œ๋™์ •๋ณด)

Google Colab: https://colab.research.google.com/drive/10BISX58wfqgf2dZSR-izYJjzB1XIpEyU?usp=sharing

 

1. API ํ˜ธ์ถœ URL ์ฃผ์†Œ ํ™•์ธ

2. ์ผ๋ฐ˜ ์ธ์ฆํ‚ค(Decoding) ํ™•์ธ


3. ํŒŒ์ผ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ 

* ํ•ญ๋ชฉ๋ช…(๊ตญ๋ฌธ)์ด ์ถœ๋ ฅ๋˜๋„๋ก ์ฝ”๋“œ ์ถ”๊ฐ€ํ•จ

 

์ „์ฒด ์ฝ”๋“œ

# 3. ํ•œ๊ตญ๊ตญ์ œํ˜‘๋ ฅ๋‹จ_ํ˜„์ง€ ํ™œ๋™์ •๋ณด

import requests
import pandas as pd
from google.colab import files

# API ์š”์ฒญ URL ๋ฐ ๊ธฐ๋ณธ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •

# ์•„๋ž˜ serviceKey์—๋Š” ์š”์ฒญํ•ด์„œ ๋ถ€์—ฌ ๋ฐ›์€ "์ผ๋ฐ˜ ์ธ์ฆํ‚ค(Decoding)"๋กœ ๋Œ€์ฒดํ•˜์—ฌ ๊ธฐ์ž…ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค!
service_key = '์ผ๋ฐ˜ ์ธ์ฆํ‚ค(Decoding)'

# ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ํ•จ์ˆ˜
def fetch_all_data(url, service_key):
all_data = []
page_no = 1

while True:
params = {
'serviceKey': service_key,
'numOfRows': '1000',
'pageNo': page_no
}

response = requests.get(url, params=params)
if response.status_code == 200:
items = response.json().get('data', [])
if not items:
break
all_data.extend(items)
page_no += 1
else:
print(f"API ์š”์ฒญ ์‹คํŒจ: {response.status_code}")
break

return all_data

# ์ „์ฒด ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ
all_items = fetch_all_data(url, service_key)

# ํ•ญ๋ชฉ๋ช…(์˜๋ฌธ)๊ณผ ํ•ญ๋ชฉ๋ช…(๊ตญ๋ฌธ)์˜ ๋งคํ•‘
column_mapping = {
"country_nm": "ํ•œ๊ธ€ ๊ตญ๊ฐ€๋ช…",
"country_eng_nm": "์˜๋ฌธ ๊ตญ๊ฐ€๋ช…",
"country_iso_alp2": "ISO 2์ž๋ฆฌ์ฝ”๋“œ",
"continent_nm": "๋Œ€๋ฅ™๋ช…",
"business_type_cd": "์‚ฌ์—…์œ ํ˜•์ฝ”๋“œ",
"business_type_cd_nm": "์‚ฌ์—…์œ ํ˜•๋ช…",
"kor_business_nm": "์‚ฌ์—…๋ช…(๊ตญ๋ฌธ)",
"eng_business_nm": "์‚ฌ์—…๋ช…(์˜๋ฌธ)",
"business_start_dt": "์‚ฌ์—…์‹œ์ž‘์ผ",
"business_end_dt": "์‚ฌ์—…์ข…๋ฃŒ์ผ",
"multi_year_type_cd": "๋‹ค๋…„๊ตฌ๋ถ„์ฝ”๋“œ",
"multi_year_type_cd_nm": "๋‹ค๋…„๊ตฌ๋ถ„์ฝ”๋“œ๋ช…",
"bnft_org_nm": "์ˆ˜ํ˜œ๊ธฐ๊ด€๋ช…",
"business_year": "์‚ฌ์—…๋…„๋„"
}

# ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ๋ณ€ํ™˜ ๋ฐ ์—‘์…€ ํŒŒ์ผ ์ €์žฅ
if all_items:
df = pd.DataFrame(all_items)
df.rename(columns=column_mapping, inplace=True)
file_path = 'KOICA_localactivity_kor.xlsx'
df.to_excel(file_path, index=False)
print(f"์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ '{file_path}' ํŒŒ์ผ๋กœ ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
files.download(file_path)
else:
print("์‘๋‹ต ๋ฐ์ดํ„ฐ์— ํ•ญ๋ชฉ์ด ์—†์Šต๋‹ˆ๋‹ค.")

 

 

728x90
๋ฐ˜์‘ํ˜•