API๋ก ํฌ๋กค๋ง
๐ชฃ
Bewareโ
์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธ์ ์ง์ ์ฌ์ฐ๊ถ์ ์นจํดํ์ง ๋ง์ญ์์ค. ์ด ์ฝ๋์ The Noun Project API๊ฐ ์์ ์ ์ฌ์ฉ ์ฉ๋์ ์ ํฉํ์ง ํ์ธํ ํ์ ์ฌ์ฉํ์ญ์์ค. ๋ํ ๋ผ์ด์ ์ค์ API ๋ฌธ์๋ฅผ ๊ผผ๊ผผํ๊ฒ ๊ฒํ ํ์ญ์์ค. The Noun Project์์ ํ๊ฐํ์ง ์๋ ์ฌ์ฉ ์ฉ๋๋ค์ ์ฌ๊ธฐ์์ ํ์ธํ์ค ์ ์์ต๋๋ค. ๋ํ ์ด ๊ธ๊ณผ ์ด ๊ธ์ ๋ชจ๋ ์ฝ๋๋ MIT ๋ผ์ด์ ์ค์์ ์๋ ค๋๋ฆฝ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐโ
import requests
import os
from tqdm import tqdm
from requests_oauthlib import OAuth1
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์๋ค๋ฉด pip3 download
ํ์ฌ ์ฌ์ฉํ๋ฉด ๋๋ค.
download
ํจ์โ
def download(url, pathname):
if not os.path.isdir(pathname):
os.makedirs(pathname)
response = requests.get(url, stream=True)
file_size = int(response.headers.get("Content-Length", 0))
filename = os.path.join(pathname, url.split("/")[-1])
if filename.find("?") > 0:
filename = filename.split("?")[0]
progress = tqdm(
response.iter_content(256),
f"Downloading {filename}",
total=file_size,
unit="B",
unit_scale=True,
unit_divisor=1024,
)
with open(filename, "wb") as f:
for data in progress:
f.write(data)
progress.update(len(data))
์ด ์ฝ๋๋ URL์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ pathname
์ ์ ์ฅํ๋ ์ญํ ์ ํ๋ค.
The Noun Project APIโ
# ---
DOWNLOAD_ITERATION = 3
# 1๋ฒ์ ์์ด์ฝ์ 50๊ฐ์ฉ ๋ถ๋ฌ์จ๋ค.
# 3๋ฒ ์คํํ๋ฉด ์์ด์ฝ 150๊ฐ๋ฅผ ๋ถ๋ฌ์จ๋ค.
SEARCH_KEY = "tree" # ๊ฒ์์ด
SAVE_LOCATION = "./icons" # ์ ์ฅํ ์์น
auth = OAuth1("API_KEY", "API_SECRET")
# ---
for iteration in range(DOWNLOAD_ITERATION):
endpoint = (
"http://api.thenounproject.com/icons/"
+ SEARCH_KEY
+ "?offset="
+ str(iteration * 50)
)
response = requests.get(endpoint, auth=auth).json()
for icon in response["icons"]:
download(icon["preview_url"], SAVE_LOCATION)
๋ณด๋ค ์ธ๋ถ์ ์ธ ๊ธฐ๋ฅ์ ์ด ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค. API Key์ API Secret์ ์ฌ๊ธฐ์์ App์ ๋ฑ๋กํ๋ฉด ๋ฐ๊ธํ ์ ์๋ค.
๊ฒฐ๊ณผโ
๋ค๋ง The Noun Project API๋ API ํธ์ถ ํ์์ ์ ํ์ด ์์ผ๋ ์ด๋ฅผ ์ผ๋์ ๋๊ณ ํ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.