์๊ฐ
ํ์ฌ์์ ๋งค๋ถ๊ธฐ๋ง๋ค ๋์ ๊ณ 10๊ฐ์ฌ์ ์ฌ๋ฌด์ ํ๋ฅผ ํ์ฉํด์ ๋ณด๊ณ ์๋ฅผ ์์ฑํด์ผ ํ๋ค.
๊ฐ ์ซ์๋ง๋ค ์ด๋ฐ ์ ๋ณด์ ํจ๊ป ์ด์ ๋ง๋ค๊ณ ์ถ๋ค.
'์ข ๊ทผ๋น / 2024๋ 1๋ถ๊ธฐ / ์์ต๊ณ์ฐ์ / ๋งค์ถ / 100,000'
์ด๋ ๊ฒ ์ ๋ณด๋ฅผ ๋ง๋ค์ด์ผ ์์ ๋ณด๊ณ ์ ๋ง๋ค ๋ ์์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ, ์์ผ๋ก ์ผ์ผํ ํ๋ ๊ฑด ๋ง์ด ์๋๊ณ ์์ ํจ์๋ฅผ ์ ์ฌ์ฉํ๋ค๊ณ ํด๋ ๋ ธ๊ฐ๋ค๊ฐ ๋๋ฌด ์ฌํ๋ค.
๊ทธ๋์ ์ด๋ฅผ ์๋ํํ๊ธฐ๋ก ํ๋ค.
์ด๋ฒ ์๊ฐ์๋ ํ ๊ฐ ํ์ฌ์ ํ ๊ฐ ๊ธฐ๊ฐ์ ๋ํด์ ์์ ์ ๋ค์ด ๋ฐ๋ ๊ฑธ ๋ชฉํ๋ก ํ๋ค.
ํ์ฅ์ฑ์ ๊ณ ๋ คํด N8N์์ ์์ ํ๋ค.
ํ์ฌ ๋งค๋ถ๊ธฐ ๋ง๋ค, ๊ทธ ์ค๊ฐ์ ๋์ ๊ณ 10๊ฐ์ฌ์ ์ฌ๋ฌด์ ํ๋ฅผ ๋ฐ์์ ๊ฐ๊ณตํ์ฌ ๋ณด๊ณ ์๋ฅผ ์์ฑํด์ผ ํ๋ค.
์งํ ๋ฐฉ๋ฒ
๋จผ์ง colab์์ ์ด๋ฏธ ์ง๋ DART API ์ฝ๋๊ฐ ์์๋ค.
!pip install dart-fss
import dart_fss as dart
# Open DART API KEY ์ค์
api_key='USER_API_KEY'
dart.set_api_key(api_key=api_key)
# DART ์ ๊ณต์๋ ํ์ฌ ๋ฆฌ์คํธ ๋ถ๋ฌ์ค๊ธฐ
corp_list = dart.get_corp_list()
ckd = corp_list.find_by_corp_name('์ข
๊ทผ๋น', exactly=True)[0]
# 2023๋
๋ถํฐ ์ฐ๊ฐ ์ฐ๊ฒฐ์ฌ๋ฌด์ ํ ๋ถ๋ฌ์ค๊ธฐ
ckd_fs = ckd.extract_fs(bgn_de='20240101',separate=True,report_tp=['annual'])
# ์ฌ๋ฌด์ ํ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์์
ํ์ผ๋ก ์ ์ฅ ( ๊ธฐ๋ณธ์ ์ฅ์์น: ์คํํด๋/fsdata )
ckd_fs.save('ckd1.xlsx')
์ด๋๋ก ํด๋ ๋์ง๋ง, n8n์ ์ฒ์ ์จ๋ณด๊ธฐ๋ ํ๊ณ ๊ณต๋ถํ ๊ฒธ n8n์์ ํ์ฌ๋ช , ๊ธฐ๊ฐ, ์ ๋ณด๋ฑ์ ๋ถ๋ฌ์๋ณด์. ๊ทธ๋ฐ๋ฐ ์ฒ์๋ถํฐ ๊ธฐ์ ์ ๋ณด ๋ง๊ณ ๊ฐ์ฅ ์์ ๋จ์๋ก ๋๋ ์ ํ ์คํธ ํ๋ฉด์ ๊ธฐ๋ฅ์ด ์๋ํ๋์ง ํ์ธํ๋ค.
Google Docs์์ ๋ฌธ์๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ๋ณด์ฌ์ฃผ๋ ๋ค์ด์ด๊ทธ๋จ
edit fields์๋ a=1, b=2 ๊ฐ์ ๋ณด๋ด์ค๋ค.
์์ธ์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ google drive๋ก ์ฌ๋ฆฌ๋ ค๋ฉด Convert to File๋ก json ํ์์ binary๋ก ๋ฐ๊ฟ์ค์ผ ํ๋ค. ์ดํ google drive์ jsonํ์ผ์ ์ฌ๋ฆฐ๋ค.
from google.colab import drive
import os
import time
import json
# Google Drive ๋ง์ดํธ
drive.mount('/content/drive')
# ํธ๋ฆฌ๊ฑฐ ํ์ผ๊ณผ Colab ํ์ผ์ด ์๋ Google Drive ํด๋ ๊ฒฝ๋ก ์ค์
folder_path = '/content/drive/My Drive/colab_folder_test' # ์ค์ ํด๋ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝ
trigger_file = os.path.join(folder_path, 'trigger.json')
# ํธ๋ฆฌ๊ฑฐ ํ์ผ ๊ฐ์ง ๋ฐ ์คํ ๋ฃจํ
while True:
if os.path.exists(trigger_file): # trigger.json ํ์ผ ์กด์ฌ ์ฌ๋ถ ํ์ธ
print("Trigger file detected!")
# trigger.json ํ์ผ ์ฝ๊ธฐ
with open(trigger_file, 'r') as f:
data = json.load(f)
print(f"Trigger data: {data}")
# ํธ๋ฆฌ๊ฑฐ ๋ฐ์ดํฐ๊ฐ ๋ฆฌ์คํธ์ธ์ง ํ์ธํ๊ณ ์ฒ๋ฆฌ
if isinstance(data, list) and len(data) > 0:
data = data[0] # ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ์์ ๊ฐ์ ธ์ค๊ธฐ
# Colab ์์
์ํ
a = data.get('a')
b = data.get('b')
print(f"Executing script with a={a} and b={b}")
# ์ํ๋ ์์
์ํ
# ์: ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋ชจ๋ธ ํ์ต ๋ฑ
print(f"The sum of a and b is {a + b}")
# ํธ๋ฆฌ๊ฑฐ ํ์ผ ์ญ์
os.remove(trigger_file)
print("Trigger file processed and deleted.")
else:
print("Waiting for trigger file...")
time.sleep(5) # 5์ด ๋๊ธฐ ํ ๋ค์ ํ์ธcolab์์ ์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด google drive์์ colab์ผ๋ก ์ ๊ทผํ ์ ์๋(mount) ๋์๋ฅผ ํด์ค์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ n8n์ ์คํํ๋ฉด trigger ํ์ผ์ด ๋๋ผ์ด๋ธ์ ๋ค์ด๊ฐ๊ณ ,
์ฝ๋ฉ์ด ์คํ๋ผ์ a, b๊ฐ์ด ์ ๋ค์ด์จ๊ฒ ํ์ธ๋๋ค.
๊ทธ๋ฌ๋ฉด a, b๋ฅผ ํ์ฌ ์ ๋ณด๋ก๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
# Colab ์์
์ํ
CORP_NAME = data.get('CORP_NAME')
BGN_DE = data.get('BGN_DE')
REPORT_TP = data.get('REPORT_TP')๊ทธ๋ฆฌ๊ณ colab์์ DART API ์ฌ์ฉํ๋ ๋ถ๋ถ ๋ณ์๋ช ์ ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
ckd = corp_list.find_by_corp_name('์ข
๊ทผ๋น', exactly=True)[0]
# 2023๋
๋ถํฐ ์ฐ๊ฐ ์ฐ๊ฒฐ์ฌ๋ฌด์ ํ ๋ถ๋ฌ์ค๊ธฐ
ckd_fs = ckd.extract_fs(bgn_de='20240101',separate=True,report_tp=['annual'])
# ์ฌ๋ฌด์ ํ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์์
ํ์ผ๋ก ์ ์ฅ ( ๊ธฐ๋ณธ์ ์ฅ์์น: ์คํํด๋/fsdata )
ckd_fs.save('ckd2.xlsx')์์ฐ
๊ฒฐ๊ณผ์ ๋ฐฐ์ด ์
N8N๋ ์ญ์ ์ฒ์ ์ฐ๋ฉด ์ด๋ ต๋ค. ๊ทธ๋ฆฌ๊ณ ์๊ฐ๋ณด๋ค ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ์๊ฐํํด์ ํ๋จ๊ณ์ฉ ํด๋๊ฐ๋ ๊ฒ ๋ณด์ด๋๊น ์ข๋ค.
๋ฐฐ์ด ์ ๊ณผ ๋๋ง์ ๊ฟํ์ ์๋ ค์ฃผ์ธ์.
ํ ์คํธํ๋ฉด์ ๋ธ๋ก ํ๋์ฉ ๋ง๋ค์ด๊ฐ์.
๊ณผ์ ์ค์ ์ด๋ค ์ํ์ฐฉ์ค๋ฅผ ๊ฒช์๋์?
Convert to JSON์ ์ฐ๋๋ฐ Convert JSON to binary์ธ๋ฐ, ์ ์ด๋ฆ์ด ๋ค๋ฅธ์ง ๋ชจ๋ฅด๊ฒ ๋ค. ์ฌ์ค ์์ง๋ binary๋ก ๋ฐ๋๊ฒ ๋ง๋์ง ๋ชจ๋ฅด๊ฒ ๋ค.
์์ ์ด ํ์ํ ์ฌํญ์ด ์๋์?
ํธ๋ฆฌ๊ฑฐ ํ์ผ ์ธ์ํ๋๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ๋๋ผ์ด๋ธ์ ํ์ผ ์ฌ๋ผ์ค๋๋ฐ colab์ด ์๊ฐ์ด ํ์ํ ๊ฒ ๊ฐ๋ค. ์ด ์๊ฐ๋ ์ค์ด๊ณ ์ถ๋ค.
Colab์ ์คํ์ํค๊ณ ๋์ n8n์ ๋๋ ค์ผ ๋๋ ๊ณผ์ ์ ๋ฐ๊พธ๊ณ ์ถ๋ค. Webhook์ ์ฐ๊ฑฐ๋ flask์๋ฒ๋ฅผ colab์ ๋์ฐ๋ฉด ๋๋ค๊ณ ํ๋๋ฐ, ๋ค์๋ฒ์ ์ ๋๋ก ์๋ํด๋ณด๊ณ ์ ๊ธฐ๋๊ป ์ง๋ฌธํด์ผ ๊ฒ ๋ค.
์์ผ๋ก์ ๊ณํ์ด ์๋ค๋ฉด ๋ค๋ ค์ฃผ์ธ์.
์ฌ๊ธฐ์ ๋ฐ์ ์์ raw ๋ฐ์ดํฐ๋ฅผ ์ํ๋ ํํ๋ก ๊ฐ๊ณตํ๋ค.