๐ ์๋ํํฐ API (Third-Party API): ์ ์, ํ์์ฑ, ๊ทธ๋ฆฌ๊ณ ํตํฉ ๊ฐ์ด๋
์๋ํํฐ API(Third-Party API)๋ ํ ํ์ฌ(ํผ์คํธํํฐ)๊ฐ ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ ๊ธฐ๋ฅ์ ๋ค๋ฅธ ํ์ฌ(์๋ํํฐ)๊ฐ ๊ฐ๋ฐํ ์์คํ ์ ํตํด ์ ๊ทผํ๊ณ ํ์ฉํ ์ ์๋๋ก ๋ง๋ ์ํํธ์จ์ด ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฝ๊ฒ ๋งํด, ํน์ ์๋น์ค์ ๊ธฐ๋ฅ์ ์ค๊ฐ์(์๋ํํฐ)๋ฅผ ํตํด ๊ฐ์ ธ์ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉํ๋ ๋ฐฉ์์ ๋๋ค.
์๋ฅผ ๋ค์ด, Google(ํผ์คํธํํฐ)์ Google Trends ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ธ ๋, SerpApi๋ SearchApi.io(์๋ํํฐ)๋ฅผ ํตํด ์ ๋ฃ๋ก ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์๋ณด๋ ๊ฒฝ์ฐ๊ฐ ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค.
1. ์๋ํํฐ API์ ์ ์์ ํ์์ฑ
๐ก ์ ์: ์ค๊ฐ์์ ํ์ฅ์ฑ
| ์์ | ์ค๋ช |
| ํผ์คํธํํฐ (First-Party) | ๋ฐ์ดํฐ๋ ๊ธฐ๋ฅ์ ์์ฒ ์ ๊ณต์ (์: Google, Twitter, PayPal). |
| ์ธ์ปจ๋ํํฐ (Second-Party) | ์์ฒ ์ ๊ณต์์ ์ง์ ์ ์ธ ํํธ๋ (์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฐ์์๋ ์ด ์ฉ์ด ๋์ "ํํธ๋ API"๋ก ํต์นญ). |
| ์๋ํํฐ (Third-Party) | ์์ฒ ์ ๊ณต์์ ๋ฌด๊ดํ๊ฒ ๊ทธ๋ค์ ์๋น์ค๋ฅผ ํ์ฉํด ์๋ก์ด ๊ฐ์น๋ฅผ ์ฐฝ์ถํ๋ ์ธ๋ถ ๊ฐ๋ฐ์๋ ๊ธฐ์ (์: SerpApi, Stripe, Twilio). |
์๋ํํฐ API๋ ์์ฒ ์ ๊ณต์๊ฐ ์ง์ ๊ณต๊ฐํ์ง ์๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ฑฐ๋, ๋ณต์กํ ์ธ์ฆ/์ธํ๋ผ ๊ตฌ์ถ ์์ด ๊ธฐ๋ฅ์ ์ฝ๊ฒ ํตํฉํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
๐ ์ ์๋ํํฐ API๊ฐ ํ์ํ ๊น์?
์ ๊ทผ์ฑ ํ๋ณด (Access):
๊ณต์ API ๋ถ์ฌ/์ ํ: Google Trends์ฒ๋ผ ๊ณต์ API๊ฐ ์๊ฑฐ๋, ์ ๊ทผ์ด ๋งค์ฐ ์ ํ์ ์ผ ๋, ์๋ํํฐ๋ ์น ์คํฌ๋ํ(Web Scraping) ๋ฑ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์งํ ํ ์์ ์ ์ธ API ํํ๋ก ์ ๊ณตํฉ๋๋ค.
Alpha/๋ฒ ํ ๋จ๊ณ ๊ทน๋ณต: ๊ณต์ API๊ฐ ์ด๊ธฐ ๊ฐ๋ฐ ๋จ๊ณ(Alpha/Beta)์ ๋จธ๋ฌผ๋ฌ ์ผ๋ฐ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ธ ๋, ์๋ํํฐ๋ ์ฆ๊ฐ์ ์ธ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค.
๊ฐ๋ฐ ํธ์์ฑ ๋ฐ ์๊ฐ ์ ์ฝ (Efficiency):
๋ณต์ก์ฑ ํด์: ๊ฒฐ์ ์์คํ (Stripe)์ด๋ ๋ฌธ์ ๋ฉ์์ง ๋ฐ์ก(Twilio) ๋ฑ ๋ณต์กํ ๊ธฐ๋ฅ์ ์ง์ ๊ฐ๋ฐํ ํ์ ์์ด, ์๋ํํฐ API๋ฅผ ํธ์ถํ๋ ๋จ ํ ์ค์ ์ฝ๋๋ก ํด๋น ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๋ค.
์ธํ๋ผ/์ ์ง๋ณด์ ๋ถ๋ด ๊ฐ์: ์๋ํํฐ๊ฐ ๋ฐ์ดํฐ ์์ง, ์๋ฒ ํ์ฅ, ์ค๋ฅ ์ฒ๋ฆฌ ๋ฑ์ ์ธํ๋ผ์ ์ ์ง๋ณด์๋ฅผ ์ ๋ดํ๋ฏ๋ก, ๊ฐ๋ฐ์๋ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์์ต๋๋ค.
์์ ์ฑ๊ณผ ์ ๋ขฐ์ฑ (Stability):
๋ฐ์ดํฐ ์์ ํ: ์คํฌ๋ํ ๊ธฐ๋ฐ์ API๋ผ๋, ์๋ํํฐ๊ฐ Google์ UI ๋ณ๊ฒฝ์ ๋ง์ถฐ ์ง์์ ์ผ๋ก ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ๊ด๋ฆฌํ๋ฏ๋ก, ๊ฐ๋ฐ์๊ฐ ์ง์ ์คํฌ๋ํผ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์์ ์ ์ ๋๋ค.
์๋ ๋ฐ ์ฑ๋ฅ: ๋๊ท๋ชจ ๋ฐ์ดํฐ ์์ง ๋ฐ ์บ์ฑ์ ์ ๋ฌธ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ, ๊ฐ์ธ์ด ์ง์ API๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฅธ ์๋ต ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
2. ํน์ ์๋ํํฐ ํตํฉ ๊ฐ์ด๋: SerpApi (Google Trends ๋ฐ์ดํฐ ํตํฉ ์์)
Google Trends ๋ฐ์ดํฐ๋ ๊ณต์ API๊ฐ ์ ํ์ ์ด๋ฏ๋ก, ์ด๋ฅผ ์ ๊ณตํ๋ ๋ํ์ ์ธ ์๋ํํฐ API์ธ SerpApi๋ฅผ ์ด์ฉํ์ฌ ํตํฉํ๋ ๊ณผ์ ์ ์์ธํ ์ค๋ช ํฉ๋๋ค.
๐ฏ ๋ชฉํ: SerpApi๋ฅผ ํตํด Google Trends ๋ฐ์ดํฐ (ํค์๋ ์ถ์ธ)๋ฅผ ๊ฐ์ ธ์ค๊ธฐ
A. ์ฌ์ ์ค๋น: API ํค ๋ฐ๊ธ ๋ฐ ํ๊ฒฝ ์ค์
SerpApi ๊ฐ์ : SerpApi ์น์ฌ์ดํธ์ ๊ฐ์ ํ๊ณ , ๊ณ์ ๋์๋ณด๋์์ API Key๋ฅผ ๋ฐ๊ธ๋ฐ์ต๋๋ค. (SerpApi๋ ํค์๋ ๊ฒ์ ์์ง ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ์ง๋ง, Google Trends ๋ฐ์ดํฐ๋ ์ด๋ค์ API๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.)
์ธ์ด ์ ํ: Python, JavaScript, Ruby ๋ฑ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง๋ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(SDK) ๋๋ ์์ HTTP ์์ฒญ ๋ฐฉ์์ ์ ํํฉ๋๋ค. (์ฌ๊ธฐ์๋ Python์ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํฉ๋๋ค.)
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น: ํฐ๋ฏธ๋์์ SerpApi Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค.
Bashpip install google-search-results
B. ํตํฉ ์ฝ๋ ์์ฑ ๋ฐ ์คํ (Python ์์)
SerpApi๋ ๋ค์ํ ๊ฒ์ ์์ง์ ์ง์ํ๋ฉฐ, Google Trends ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋๋ engine ํ๋ผ๋ฏธํฐ๋ฅผ google_trends๋ก ์ง์ ํด์ผ ํฉ๋๋ค.
from serpapi import GoogleSearch
import pandas as pd
# 1. API ํค ์ค์ (๋ณด์์ ์ํด ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ์ ๊ถ์ฅ)
API_KEY = "YOUR_SERPAPI_API_KEY"
def get_google_trends_data(keywords, timeframe, geo):
"""
SerpApi๋ฅผ ์ฌ์ฉํ์ฌ Google Trends์ 'Interest over time' ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ํจ์
:param keywords: ๋น๊ตํ ํค์๋ ๋ฆฌ์คํธ (์ต๋ 5๊ฐ), ์: ['๋นํธ์ฝ์ธ', '์ด๋๋ฆฌ์']
:param timeframe: ๊ฒ์ ๊ธฐ๊ฐ, ์: 'today 12-m' (์ต๊ทผ 12๊ฐ์)
:param geo: ์ง์ญ ์ฝ๋, ์: 'KR' (๋ํ๋ฏผ๊ตญ)
"""
try:
# 2. ๊ฒ์ ๋งค๊ฐ๋ณ์ ์ค์
params = {
"engine": "google_trends", # ํต์ฌ: Google Trends ์์ง ์ง์
"api_key": API_KEY, # ๋ฐ๊ธ๋ฐ์ API ํค
"data_type": "TIMESERIES", # ์๊ฐ ๊ฒฝ๊ณผ๋ณ ๊ด์ฌ๋ ๋ฐ์ดํฐ ์์ฒญ
"q": ",".join(keywords), # ํค์๋๋ค์ ์ฝค๋ง๋ก ์ฐ๊ฒฐ
"timeframe": timeframe, # ๊ธฐ๊ฐ ์ค์
"geo": geo # ์ง์ญ ์ค์
}
# 3. SerpApi ํธ์ถ
search = GoogleSearch(params)
results = search.get_dict()
# 4. ๊ฒฐ๊ณผ ํ์ฑ ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
if 'interest_over_time' in results:
# ๊ฒฐ๊ณผ ์ค 'interest_over_time' ์น์
์ถ์ถ
time_series_data = results['interest_over_time']['timeline_data']
# Pandas DataFrame์ผ๋ก ๋ณํํ์ฌ ๋ฐ์ดํฐ ๋ถ์ ์ฉ์ดํ๊ฒ ๋ง๋ฆ
df = pd.DataFrame(time_series_data)
df.set_index('date', inplace=True)
print(f"✅ Google Trends ๋ฐ์ดํฐ ๋ก๋ ์ฑ๊ณต. (ํค์๋: {keywords})")
print(df.head())
return df
else:
print("❌ Google Trends ๋ฐ์ดํฐ ์น์
์ ์ฐพ์ ์ ์์ต๋๋ค. ์๋ต ํ์ธ์ด ํ์ํฉ๋๋ค.")
return None
except Exception as e:
print(f"❌ SerpApi ํธ์ถ ์ค ์ค๋ฅ ๋ฐ์: {e}")
return None
# ํจ์ ์คํ ์์
keywords_to_track = ['์ฝ์คํผ', 'ํ์จ']
trends_df = get_google_trends_data(keywords_to_track, 'today 5-y', 'KR')
# ๊ฒฐ๊ณผ DataFrame์ ์๊ฐํ ๋๊ตฌ(Matplotlib ๋ฑ)์ ์ ๋ฌํ์ฌ ์ถ์ธ ๊ทธ๋ํ ์์ฑ ๊ฐ๋ฅ
C. ์ฌ์ฉ ํ ๋ฐ ์ฃผ์์ฌํญ
์ธ์ฆ ๋ฐ ์ฟผํฐ ๊ด๋ฆฌ: SerpApi๋ ์ ๋ฃ ์๋น์ค์ด๋ฏ๋ก, API ํธ์ถ ์ API ํค๊ฐ ๋ ธ์ถ๋์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. ๋ํ, ์๋ณ ๋ฌด๋ฃ ์ฟผ๋ฆฌ ์ ํ์ ํ์ธํ๊ณ , ์ฟผ๋ฆฌ ์ ํ ์ด๊ณผ ์ ๋ฐ์ํ๋ ์ถ๊ฐ ๋น์ฉ์ ๋๋นํด์ผ ํฉ๋๋ค.
์ค๋ฅ ์ฒ๋ฆฌ: ๋คํธ์ํฌ ๋ฌธ์ ๋ API ํค ๋ง๋ฃ ๋ฑ์ผ๋ก ์ธํด ํธ์ถ์ด ์คํจํ ์ ์์ผ๋ฏ๋ก, ํญ์
try...except๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.๋ฐ์ดํฐ ํ์ฑ: ์๋ต์ผ๋ก ๋ฐ์ JSON ๊ตฌ์กฐ๋ฅผ ์ ํํ ํ์ ํ์ฌ ํ์ํ ๋ฐ์ดํฐ(
timeline_data๋ฑ)๋ฅผ ์ถ์ถํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ๋ณํ(์: DataFrame, List)ํด์ผ ํฉ๋๋ค.
๐ ๊ฒฐ๋ก
์๋ํํฐ API๋ ๊ณต์ API์ ํ๊ณ๋ฅผ ๋ฐ์ด๋์ด ๊ฐ๋ฐ์๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ณ ์์ ์ ์ผ๋ก ํ๋ณดํ๊ฒ ํด์ฃผ๋ ํจ์จ์ ์ธ ํด๊ฒฐ์ฑ ์ ๋๋ค. Google Trends์ ๊ฐ์ด ์ ๊ทผ์ด ์ด๋ ค์ด ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, SerpApi์ ๊ฐ์ ์ ๋ฌธ ์ค๊ฐ์๋ฅผ ํ์ฉํ๋ฉด ๊ฐ๋ฐ ๋น์ฉ๊ณผ ์๊ฐ์ ํฌ๊ฒ ์ ๊ฐํ๊ณ , ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ํตํฉ์ ์ง์คํ ์ ์์ต๋๋ค.
#๊ฐ๋ ํฌ๋ฐ์ด #ganatoday
๊ทธ๋ฆฐ์ํ๋ก