์ง๊ตฌ๊ฐ ํ์ํ ๋ฌผ๊ฑด์ด ์์ด์ ํด์ธ์ฌ์ดํธ์ ํ์๊ฐ์ ์ ์งํํ์ต๋๋ค. ๊ฐ์ ์งํ ์ ์ฐจ์ ๊ตญ๊ฐ๋ฅผ ์ ๋ ฅํ๋ ๋ถ๋ถ์ด ์์๋๋ฐ, ๋ฌธ๋ ๊ฐ๋ฐ์๋ค์ ์ด๋ฐ ์ ๋ณด๋ฅผ ์ด๋์ ๊ฐ์ ธ์ค๋์ง๊ฐ ๊ถ๊ธํด์ก์ต๋๋ค. ์ ๊ฐ ๋ ๊ถ๊ธํ ๊ฒ์ ๋ชป ์ฐธ๋ ์ฑ๊ฒฉ์ด๋ผ ๋ฐ๋ก ๊ตฌ๊ธ๋ง์ ํ๊ณ , restcountries๋ผ๋ API๋ฅผ ์ ๊ณตํ๋ ๋ฌด๋ฃ ์ฌ์ดํธ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค:
https://restcountries.com/#api-endpoints-v2-list-of-codes
๊ฐ๊ตญ์ ๋ช ์นญ, ๊ตญ๊ฐ์ฝ๋, ํตํ, ์์ฑ์ขํ, ์ฌ์ฉ ์ธ์ด ๋ฑ์ ๊ตญ๊ฐ์ ๋ํ ๊ธฐ๋ณธ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ API๋ฅผ ์ ๊ณตํ๋ ์ฌ์ดํธ์ ๋๋ค. ๊ทธ๋์ ํ๋ฒ ํ์์ ํด๋ณด๊ธฐ๋ก ํ์ต๋๋ค. (๋ณ๋์ API Key๋ฅผ ๋ฐ๊ธํ ํ์๊ฐ ์์ต๋๋ค)
๋ํ๋ฏผ๊ตญ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
์๋์ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ฉด ํ๊ตญ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๋ํ๋ฏผ๊ตญ๊ณผ ๋ถํ์ ์ ๋ณด๋ฅผ ๋๋ค ๊ฐ์ ธ์์ 'South Korea' ํน์ 'Republic of Korea'๋ผ๊ณ ๊ฒ์์ ํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. Native name๋ ์ง์์ ํ๋ค๊ณ ํด์ '๋ํ๋ฏผ๊ตญ', 'ํ๊ตญ'์ผ๋ก ๊ฒ์๋ ํด๋ดค๋๋ฐ 404 ์๋ฌ๊ฐ ๋จ๋ ๊ฑธ ๋ณด๋ ๊ฒ์์ด ์๋ฒฝํ์ง๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค ใ ใ
import requests
country = 'korea'
url = f'https://restcountries.com/v3.1/name/{country}'
req = requests.get(url)
json_data = req.json()
๊ฐ์ ธ์จ ์ ๋ณด๊ฐ ์๊ฐ๋ณด๋ค ๋ฐฉ๋ํด์ ๋๋์ต๋๋ค. ์ฐ์ ์ ๊ณตํ๋ ํญ๋ชฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
dict_keys(['name', 'tld', 'cca2', 'ccn3', 'cca3', 'cioc', 'independent', 'status', 'unMember', 'currencies', 'idd', 'capital', 'altSpellings', 'region', 'subregion', 'languages', 'translations', 'latlng', 'landlocked', 'borders', 'area', 'demonyms', 'flag', 'maps', 'population', 'gini', 'fifa', 'car', 'timezones', 'continents', 'flags', 'coatOfArms', 'startOfWeek', 'capitalInfo', 'postalCode'])
์ธ๊ตฌ, ์๋, ํตํ, ๊ตญ๊ฐ ์ฝ๋, ๊ตญ๊ธฐ ์ด๋ฏธ์ง ๋ฑ ๋ค์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ ์์ด์ ๊ตญ์ ์ฌํ ์ฐ๊ตฌ๋ฅผ ํ๋ ๋ถ๋ค์๊ฒ๋ ์์ฃผ ์ ์ฉํ ๊ฒ ๊ฐ์ต๋๋ค.
250๊ฐ๊ตญ์ ์๋ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
ํด์ฆํ๋ฉด ๋น ์ง ์ ์๋ ๊ฒ์ด ๊ตญ๊ฐ์ ์๋์ ๋ํ ์ง๋ฌธ์ ๋๋ค. ์ด๋ฒ์๋ restcountries์ API๋ฅผ ํ์ฉํ์ฌ ๊ฐ๊ตญ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์๋ณด๊ฒ ์ต๋๋ค.
import requests
import pandas as pd
url = f'https://restcountries.com/v3.1/all'
req = requests.get(url)
json_data = req.json()
def extract_capital(x):
if x:
return x[0]
else:
return None
def extract_coord(x):
if x.keys():
return x['latlng']
else:
return [None,None]
# json ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
capital_df = pd.DataFrame(json_data)[['name','capital','capitalInfo']]
capital_df = capital_df.fillna("")
capital_df['country'] = capital_df['name'].apply(lambda x: x['common'])
capital_df['capital'] = capital_df['capital'].apply(lambda x: extract_capital(x))
capital_df['coord'] = capital_df['capitalInfo'].apply(lambda x: extract_coord(x))
capital_df = capital_df[['country','capital','coord']]
capital_df
๊ฐ ๊ตญ๊ฐ์ ์๋ ์ด๋ฆ๊ณผ ์ขํ๊น์ง ์ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์ํด ๊ตฌ๊ธ ๋งต์ ์ด์ฉ ํ์ฌ ์ขํ๋ฅผ ์ฐ์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋งจ ๋ง์ง๋ง์ ์กฐํ๋๋ ์๋ฉ์ด์นด์ ์๋์ ๊ฒฝ๋ ์ ๋ณด๋ฅผ ๊ตฌ๊ธ๋งต์ ์ ๋ ฅ์ ํ๊ณ , ํน์คํด์ ์์น๊ฐ ์ ๋์ค๋ ๊ฒ์ ํ์ธํ์ต๋๋ค:
250๊ฐ๊ตญ์ ๊ตญ๊ธฐ ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ
๋ฐ์ดํฐ๋ฅผ ์ดํด๋ณธ ๊ฒฐ๊ณผ ์ด 250๊ฐ์ ๊ตญ๊ฐ์ ๋ํ ์ ๋ณด๊ฐ ์๋ ๊ฒ์ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฒ์๋ ๊ฐ ๊ตญ๊ฐ์ ๊ตญ๊ธฐ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
import requests
import os
from PIL import Image
from io import BytesIO
url = f'https://restcountries.com/v3.1/all'
req = requests.get(url)
json_data = req.json()
# ๊ตญ๊ฐ ์ด๋ฆ ๊ฐ์ ธ์ค๊ธฐ
country_data = [c['name']['common'] for c in json_data]
# ๊ตญ๊ธฐ ์ด๋ฏธ์ง ํ์ผ URL ๊ฐ์ ธ์ค๊ธฐ
flag_png_url_data = [c['flags']['png'] for c in json_data]
# ๊ตญ๊ธฐ ์ด๋ฏธ์ง ํ์ผ ์ ์ฅ ๋๋ ํ ๋ฆฌ ์ง์
save_dir = '/Users/jake1/Desktop/flag_imgs/'
# ๊ตญ๊ธฐ ์ด๋ฏธ์ง ํ์ผ ๋ค์ด๋ก๋
def get_png_files(country,url, save_dir):
png_file = requests.get(url).content
im = Image.open(BytesIO(png_file))
im.save(save_dir + country + '.png')
return
# 250๊ฐ ๊ตญ๊ฐ์ ๊ตญ๊ธฐ ์ด๋ฏธ์ง ํ์ผ ๋ค์ด๋ก๋ ์คํ
for country, url in zip(country_data, flag_png_url_data):
get_png_files(country,url,save_dir)
# ์ ์ฅ๋ ์ด๋ฏธ์ง ํ์ผ ๊ฐ์ ํ์ธ
print(len([f for f in os.listdir(save_dir) if f.endswith('.png')]))
# ์บ๋๋ค ๊ตญ๊ธฐ ๊ฐ์ ธ์ค๊ธฐ (Ipynb ๋
ธํธ๋ถ์์๋ง ์๋)
canada_flag = save_dir + 'Canada.png'
im = Image.open(canada_flag)
display(im)
์บ๋๋ค ๊ตญ๊ธฐ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋ถ๋ฌ์์ก์ต๋๋ค. ๋ํ save_dir๋ก ์ง์ ํ ํด๋ ๋ด ์ด๋ฏธ์ง๋ค์ด ์๋์ ๊ฐ์ด ์ ์ฅ์ด ์ ๋์ด์์ต๋๋ค. ์ด๋ก์จ ์ผ์ผ์ด ๊ตฌ๊ธ์ ๊ฐ ๊ตญ๊ฐ๋ณ๋ก ๊ตญ๊ธฐ ์ด๋ฏธ์ง๋ฅผ ์์งํ ํ์๊ฐ ์์ด์ก์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
์ด๋ฒ ํฌ์คํ ์์๋ ๊ฐ ๊ตญ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ rest countries์ API๋ฅผ ํ์ฉํด ๋ดค์ต๋๋ค. ๋ฌด๋ฃ๋ก ์ด์์ ํ๊ณ ์์ผ๋ฉฐ ๋ง์ ํธ๋ํฝ ์์ฒญ์ ๋ณ๋ค๋ฅธ ์์ต ์์ด ์ฒ๋ฆฌํ๊ณ ์์ผ๋ ๋๋ ๋น์ฉ์ด ์๋นํ ๊ฒ์ผ๋ก ์ถ์ ๋ฉ๋๋ค. ์ฌ์ ๊ฐ ์์ผ์ ๋ถ๋ค์ ์ปคํผ ํ์ ๊ฐ์ด๋ผ๋ ๋ณด๋ด์ฃผ์๋ฉด ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ์ ํฐ ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
IT ์ ๊ณ๊ฐ ๋น ๋ฅธ ์๋๋ก ๋ฐ์ ์ ํ ๊ฒ๋ ์คํ์์ค์ ๋ฌด๋ฃ API๋ฅผ ์ ๊ณตํ๋ ์ฌ๋๋ค์ด ์์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ต๋๋ค. ํ๋ ์ ๋ ์๋ฒ๋ฅผ ํ๋ ์ด์ํด์ ์ ์ฉํ ์ ๋ณด๋ฅผ API๋ก ์ ๊ณตํด๋ณด๊ณ ์ถ์ด ์ก์ต๋๋ค. ๊ทธ๋ผ ์ค๋์ ์ฌ๊ธฐ์ ๋ง๋ฌด๋ฆฌํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ ๋ณด์ จ๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๊พน~ ๋๋ฌ์ฃผ์๊ธธ ๋ฐ๋๋๋ค!
'๐ป ITยท๊ธฐ์ ยทํต๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Image to Textโฆ? ์ด๋ฏธ์ง๋ก ์์คํค ์ํธ ์์ฑํ๊ธฐ (2) | 2023.02.11 |
---|---|
[Snippet] ์์ฃผ ์ฌ์ฉํ๋ List, Dictionary ๊ธฐ๋ฅ (0) | 2023.02.09 |
[API] ๋ฆฌ๊ทธ์ค๋ธ๋ ์ ๋: ์ฑํผ์ธ ๋ง๊ณ API๋ฅผ ๊ฐ์ง๊ณ ๋์๋ณด์ (2) | 2023.02.05 |
[API] OpenAI API ๊ฐ์ง๊ณ ๋๊ธฐ 2ํ: ๊ฐ์ฒด๋ช ์ธ์ (NER) (0) | 2023.02.04 |
[API] OpenAI API ๊ฐ์ง๊ณ ๋๊ธฐ 1ํ: TL;DR (๊ธด๊ธ ์์ฝ) (0) | 2023.02.03 |
๋๊ธ