|
import gradio as gr |
|
import requests |
|
from xml.etree import ElementTree |
|
import os |
|
import sys |
|
import json |
|
from datetime import datetime |
|
import pytz |
|
from zoneinfo import ZoneInfo |
|
|
|
|
|
API_KEY = os.getenv("API_KEY") |
|
|
|
TIMEZONE_CITIES = { |
|
|
|
"์์ธ, ๋์ฟ, ํ์ (UTC+9)": 9, |
|
"๋ฒ ์ด์ง, ํ์ฝฉ, ์ฑ๊ฐํฌ๋ฅด, ํ์ดํ์ด, ๋ง๋๋ผ (UTC+8)": 8, |
|
"๋ฐฉ์ฝ, ์์นด๋ฅดํ, ํ๋
ธ์ด, ํ๋ํ (UTC+7)": 7, |
|
"์๊ณค (UTC+6.5)": 6.5, |
|
"๋ค์นด, ์๋งํฐ (UTC+6)": 6, |
|
"๋ด๋ธ๋ฆฌ, ๋ญ๋ฐ์ด, ์ฝ๋กฌ๋ณด (UTC+5.5)": 5.5, |
|
"ํ์์ผํธ, ์ด์ฌ๋ผ๋ง๋ฐ๋, ์นด๋ผ์น (UTC+5)": 5, |
|
"์นด๋ถ (UTC+4.5)": 4.5, |
|
"๋๋ฐ์ด, ์๋ถ๋ค๋น, ๋ฌด์ค์นดํธ (UTC+4)": 4, |
|
"ํ
ํค๋ (UTC+3.5)": 3.5, |
|
"๋ชจ์คํฌ๋ฐ, ์ด์คํ๋ถ, ๋ฆฌ์ผ๋, ๋ฐ๊ทธ๋ค๋ (UTC+3)": 3, |
|
|
|
|
|
"์ํ
๋ค, ํฌ์ฑํค, ํค์ํ, ์นด์ด๋ก (UTC+2)": 2, |
|
"ํ๋ฆฌ, ๋ก๋ง, ๋ฒ ๋ฅผ๋ฆฐ, ๋ง๋๋ฆฌ๋, ์์คํ
๋ฅด๋ด (UTC+1)": 1, |
|
"๋ฐ๋, ๋ฆฌ์ค๋ณธ, ๋๋ธ๋ฆฐ (UTC+0)": 0, |
|
|
|
|
|
"์์กฐ๋ ์ค ์ ๋ (UTC-1)": -1, |
|
"ํ๋ฅด๋๋ ๋ฐ ๋
ธ๋ก๋ (UTC-2)": -2, |
|
"์ํ์ธ๋ฃจ, ๋ถ์๋
ธ์ค์์ด๋ ์ค, ๋ชฌํ
๋น๋ฐ์ค (UTC-3)": -3, |
|
"์ฐํฐ์๊ณ , ์์์์จ (UTC-4)": -4, |
|
"๋ด์, ๋ง์ด์ ๋ฏธ, ๋ณด์คํด, ํ ๋ก ํ (UTC-5)": -5, |
|
"์์นด๊ณ , ๋ฉ์์ฝ์ํฐ, ๋ฌ๋ผ์ค (UTC-6)": -6, |
|
"๋ด๋ฒ, ํผ๋์ค, ์ํธ๋ ์ดํฌ์ํฐ (UTC-7)": -7, |
|
"๋ก์ค์ค์ ค๋ ์ค, ์ํ๋์์ค์ฝ, ๋ผ์ค๋ฒ ๊ฐ์ค, ์์ ํ (UTC-8)": -8, |
|
"์ต์ปค๋ฆฌ์ง, ํ์ด๋ฑ
ํฌ์ค (UTC-9)": -9, |
|
"ํ์์ด, ํํํฐ (UTC-10)": -10, |
|
"์ฌ๋ชจ์ (UTC-11)": -11, |
|
"๋ฒ ์ด์ปค ์ฌ (UTC-12)": -12, |
|
|
|
|
|
"์คํด๋๋, ์ฐ๋งํด (UTC+12)": 12, |
|
"์๋๋, ๋ฉ๋ฒ๋ฅธ, ์บ๋ฒ๋ผ (UTC+10)": 10, |
|
"๋ค์ (UTC+9.5)": 9.5, |
|
"์ ๋ค๋ ์ด๋ (UTC+9.5)": 9.5, |
|
|
|
|
|
"์ํ๋ค์ค๋ฒ๊ทธ, ํ๋ผ๋ (UTC+2)": 2, |
|
"๋ผ๊ณ ์ค, ์์ (UTC+1)": 1, |
|
"๋ค์นด๋ฅด, ์นด์ฌ๋ธ๋์นด (UTC+0)": 0, |
|
} |
|
|
|
def convert_to_seoul_time(year, month, day, hour, minute, timezone_offset): |
|
""" |
|
์ ํ๋ ์๊ฐ๋์ ์๊ฐ์ ์์ธ ์๊ฐ์ผ๋ก ๋ณํ |
|
""" |
|
from datetime import datetime, timedelta |
|
|
|
|
|
time_difference = 9 - int(timezone_offset) |
|
|
|
|
|
local_time = datetime(int(year), int(month), int(day), int(hour), int(minute)) |
|
|
|
|
|
seoul_time = local_time + timedelta(hours=time_difference) |
|
|
|
return { |
|
'year': str(seoul_time.year), |
|
'month': f"{seoul_time.month:02d}", |
|
'day': f"{seoul_time.day:02d}", |
|
'hour': f"{seoul_time.hour:02d}{seoul_time.minute:02d}" |
|
} |
|
|
|
def exception_handler(exception_type, exception, traceback): |
|
print(f"{exception_type.__name__}: {exception}") |
|
|
|
sys.excepthook = exception_handler |
|
sys.tracebacklimit = 0 |
|
|
|
|
|
def get_chinese_hour(birth_hour): |
|
hour = int(birth_hour[:2]) |
|
chinese_hours = ['์', '์ถ', '์ธ', '๋ฌ', '์ง', '์ฌ', '์ค', '๋ฏธ', '์ ', '์ ', '์ ', 'ํด'] |
|
return chinese_hours[hour // 2 % 12] |
|
|
|
def calculate_siju(birth_hour, lunIljin): |
|
chinese_hour = get_chinese_hour(birth_hour) |
|
lunIljin_first = lunIljin[0] |
|
|
|
|
|
|
|
|
|
|
|
siju_mapping = { |
|
|
|
('๊ฐ', '์'): '๊ฐ์(็ฒๅญ)', ('๊ธฐ', '์'): '๊ฐ์(็ฒๅญ)', |
|
('์', '์'): '๋ณ์(ไธๅญ)', ('๊ฒฝ', '์'): '๋ณ์(ไธๅญ)', |
|
('๋ณ', '์'): '๋ฌด์(ๆๅญ)', ('์ ', '์'): '๋ฌด์(ๆๅญ)', |
|
('์ ', '์'): '๊ฒฝ์(ๅบๅญ)', ('์', '์'): '๊ฒฝ์(ๅบๅญ)', |
|
('๋ฌด', '์'): '์์(ๅฃฌๅญ)', ('๊ณ', '์'): '์์(ๅฃฌๅญ)', |
|
('๊ฐ', '์ถ'): '์์ถ(ไนไธ)', ('๊ธฐ', '์ถ'): '์์ถ(ไนไธ)', |
|
('์', '์ถ'): '์ ์ถ(ไธไธ)', ('๊ฒฝ', '์ถ'): '์ ์ถ(ไธไธ)', |
|
('๋ณ', '์ถ'): '๊ธฐ์ถ(ๅทฑไธ)', ('์ ', '์ถ'): '๊ธฐ์ถ(ๅทฑไธ)', |
|
('์ ', '์ถ'): '์ ์ถ(่พไธ)', ('์', '์ถ'): '์ ์ถ(่พไธ)', |
|
('๋ฌด', '์ถ'): '๊ณ์ถ(็ธไธ)', ('๊ณ', '์ถ'): '๊ณ์ถ(็ธไธ)', |
|
('๊ฐ', '์ธ'): '๋ณ์ธ(ไธๅฏ
)', ('๊ธฐ', '์ธ'): '๋ณ์ธ(ไธๅฏ
)', |
|
('์', '์ธ'): '๋ฌด์ธ(ๆๅฏ
)', ('๊ฒฝ', '์ธ'): '๋ฌด์ธ(ๆๅฏ
)', |
|
('๋ณ', '์ธ'): '๊ฒฝ์ธ(ๅบๅฏ
)', ('์ ', '์ธ'): '๊ฒฝ์ธ(ๅบๅฏ
)', |
|
('์ ', '์ธ'): '์์ธ(ๅฃฌๅฏ
)', ('์', '์ธ'): '์์ธ(ๅฃฌๅฏ
)', |
|
('๋ฌด', '์ธ'): '๊ฐ์ธ(็ฒๅฏ
)', ('๊ณ', '์ธ'): '๊ฐ์ธ(็ฒๅฏ
)', |
|
('๊ฐ', '๋ฌ'): '์ ๋ฌ(ไธๅฏ)', ('๊ธฐ', '๋ฌ'): '์ ๋ฌ(ไธๅฏ)', |
|
('์', '๋ฌ'): '๊ธฐ๋ฌ(ๅทฑๅฏ)', ('๊ฒฝ', '๋ฌ'): '๊ธฐ๋ฌ(ๅทฑๅฏ)', |
|
('๋ณ', '๋ฌ'): '์ ๋ฌ(่พๅฏ)', ('์ ', '๋ฌ'): '์ ๋ฌ(่พๅฏ)', |
|
('์ ', '๋ฌ'): '๊ณ๋ฌ(็ธๅฏ)', ('์', '๋ฌ'): '๊ณ๋ฌ(็ธๅฏ)', |
|
('๋ฌด', '๋ฌ'): '์๋ฌ(ไนๅฏ)', ('๊ณ', '๋ฌ'): '์๋ฌ(ไนๅฏ)', |
|
('๊ฐ', '์ง'): '๋ฌด์ง(ๆ่พฐ)', ('๊ธฐ', '์ง'): '๋ฌด์ง(ๆ่พฐ)', |
|
('์', '์ง'): '๊ฒฝ์ง(ๅบ่พฐ)', ('๊ฒฝ', '์ง'): '๊ฒฝ์ง(ๅบ่พฐ)', |
|
('๋ณ', '์ง'): '์์ง(ๅฃฌ่พฐ)', ('์ ', '์ง'): '์์ง(ๅฃฌ่พฐ)', |
|
('์ ', '์ง'): '๊ฐ์ง(็ฒ่พฐ)', ('์', '์ง'): '๊ฐ์ง(็ฒ่พฐ)', |
|
('๋ฌด', '์ง'): '๋ณ์ง(ไธ่พฐ)', ('๊ณ', '์ง'): '๋ณ์ง(ไธ่พฐ)', |
|
('๊ฐ', '์ฌ'): '๊ธฐ์ฌ(ๅทฑๅทณ)', ('๊ธฐ', '์ฌ'): '๊ธฐ์ฌ(ๅทฑๅทณ)', |
|
('์', '์ฌ'): '์ ์ฌ(่พๅทณ)', ('๊ฒฝ', '์ฌ'): '์ ์ฌ(่พๅทณ)', |
|
('๋ณ', '์ฌ'): '๊ณ์ฌ(็ธๅทณ)', ('์ ', '์ฌ'): '๊ณ์ฌ(็ธๅทณ)', |
|
('์ ', '์ฌ'): '์์ฌ(ไนๅทณ)', ('์', '์ฌ'): '์์ฌ(ไนๅทณ)', |
|
('๋ฌด', '์ฌ'): '์ ์ฌ(ไธๅทณ)', ('๊ณ', '์ฌ'): '์ ์ฌ(ไธๅทณ)', |
|
('๊ฐ', '์ค'): '๊ฒฝ์ค(ๅบๅ)', ('๊ธฐ', '์ค'): '๊ฒฝ์ค(ๅบๅ)', |
|
('์', '์ค'): '์์ค(ๅฃฌๅ)', ('๊ฒฝ', '์ค'): '์์ค(ๅฃฌๅ)', |
|
('๋ณ', '์ค'): '๊ฐ์ค(็ฒๅ)', ('์ ', '์ค'): '๊ฐ์ค(็ฒๅ)', |
|
('์ ', '์ค'): '๋ณ์ค(ไธๅ)', ('์', '์ค'): '๋ณ์ค(ไธๅ)', |
|
('๋ฌด', '์ค'): '๋ฌด์ค(ๆๅ)', ('๊ณ', '์ค'): '๋ฌด์ค(ๆๅ)', |
|
('๊ฐ', '๋ฏธ'): '์๋ฏธ(ๅฃฌๆช)', ('๊ธฐ', '๋ฏธ'): '์๋ฏธ(ๅฃฌๆช)', |
|
('์', '๋ฏธ'): '๊ฐ๋ฏธ(็ฒๆช)', ('๊ฒฝ', '๋ฏธ'): '๊ฐ๋ฏธ(็ฒๆช)', |
|
('๋ณ', '๋ฏธ'): '๋ณ๋ฏธ(ไธๆช)', ('์ ', '๋ฏธ'): '๋ณ๋ฏธ(ไธๆช)', |
|
('์ ', '๋ฏธ'): '๋ฌด๋ฏธ(ๆๆช)', ('์', '๋ฏธ'): '๋ฌด๋ฏธ(ๆๆช)', |
|
('๋ฌด', '๋ฏธ'): '๊ฒฝ๋ฏธ(ๅบๆช)', ('๊ณ', '๋ฏธ'): '๊ฒฝ๋ฏธ(ๅบๆช)', |
|
('๊ฐ', '์ '): '์์ (ๅฃฌ็ณ)', ('๊ธฐ', '์ '): '์์ (ๅฃฌ็ณ)', |
|
('์', '์ '): '๊ฐ์ (็ฒ็ณ)', ('๊ฒฝ', '์ '): '๊ฐ์ (็ฒ็ณ)', |
|
('๋ณ', '์ '): '๋ณ์ (ไธ็ณ)', ('์ ', '์ '): '๋ณ์ (ไธ็ณ)', |
|
('์ ', '์ '): '๋ฌด์ (ๆ็ณ)', ('์', '์ '): '๋ฌด์ (ๆ็ณ)', |
|
('๋ฌด', '์ '): '๊ฒฝ์ (ๅบ็ณ)', ('๊ณ', '์ '): '๊ฒฝ์ (ๅบ็ณ)', |
|
('๊ฐ', '์ '): '๊ณ์ (็ธ้
)', ('๊ธฐ', '์ '): '๊ณ์ (็ธ้
)', |
|
('์', '์ '): '์์ (ไน้
)', ('๊ฒฝ', '์ '): '์์ (ไน้
)', |
|
('๋ณ', '์ '): '์ ์ (ไธ้
)', ('์ ', '์ '): '์ ์ (ไธ้
)', |
|
('์ ', '์ '): '๊ธฐ์ (ๅทฑ้
)', ('์', '์ '): '๊ธฐ์ (ๅทฑ้
)', |
|
('๋ฌด', '์ '): '์ ์ (่พ้
)', ('๊ณ', '์ '): '์ ์ (่พ้
)', |
|
('๊ฐ', '์ '): '๊ฐ์ (็ฒๆ) ', ('๊ธฐ', '์ '): '๊ฐ์ (็ฒๆ)', |
|
('์', '์ '): '๋ณ์ (ไธๆ) ', ('๊ฒฝ', '์ '): '๋ณ์ (ไธๆ)', |
|
('๋ณ', '์ '): '๋ฌด์ (ๆๆ) ', ('์ ', '์ '): '๋ฌด์ (ๆๆ)', |
|
('์ ', '์ '): '๊ฒฝ์ (ๅบๆ) ', ('์', '์ '): '๊ฒฝ์ (ๅบๆ)', |
|
('๋ฌด', '์ '): '์์ (ๅฃฌๆ) ', ('๊ณ', '์ '): '์์ (ๅฃฌๆ)', |
|
('๊ฐ', 'ํด'): '์ํด(ไนไบฅ)', ('๊ธฐ', 'ํด'): '์ํด(ไนไบฅ)', |
|
('์', 'ํด'): '์ ํด(ไธไบฅ)', ('๊ฒฝ', 'ํด'): '์ ํด(ไธไบฅ)', |
|
('๋ณ', 'ํด'): '๊ธฐํด(ๅทฑไบฅ)', ('์ ', 'ํด'): '๊ธฐํด(ๅทฑไบฅ)', |
|
('์ ', 'ํด'): '์ ํด(่พไบฅ)', ('์', 'ํด'): '์ ํด(่พไบฅ)', |
|
('๋ฌด', 'ํด'): '๊ณํด(็ธไบฅ)', ('๊ณ', 'ํด'): '๊ณํด(็ธไบฅ)', |
|
} |
|
|
|
|
|
|
|
|
|
siju_key = (lunIljin_first, chinese_hour) |
|
siju = siju_mapping.get(siju_key) |
|
if not siju: |
|
siju = f"์ผ์ฃผ '{lunIljin_first}'์ ์ง์ง '{chinese_hour}'์ ํด๋นํ๋ ์์ฃผ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค." |
|
|
|
return siju |
|
|
|
|
|
def get_lunar_info(solYear, solMonth, solDay, solHour, timezone_offset): |
|
try: |
|
|
|
hour = int(solHour[:2]) |
|
minute = int(solHour[2:]) if len(solHour) > 2 else 0 |
|
|
|
|
|
seoul_time = convert_to_seoul_time(solYear, solMonth, solDay, hour, minute, timezone_offset) |
|
|
|
|
|
base_url = "http://apis.data.go.kr/B090041/openapi/service/LrsrCldInfoService/getLunCalInfo" |
|
service_key = "EuBjt%2B2t0KzYt5Ri%2Bzs56oymt9kHJ8uPIOV7m6UMKnOV8cpwj02EiRqMEudX%2F%2FVTKdMnwaLH0igRwY57YUplEQ%3D%3D" |
|
|
|
url = f"{base_url}?solYear={seoul_time['year']}&solMonth={seoul_time['month']}&solDay={seoul_time['day']}&ServiceKey={service_key}" |
|
|
|
response = requests.get(url) |
|
if response.status_code == 200: |
|
root = ElementTree.fromstring(response.content) |
|
|
|
lunIljin = root.find(".//lunIljin").text if root.find(".//lunIljin") is not None else "์ ๋ณด ์์" |
|
lunWolgeon = root.find(".//lunWolgeon").text if root.find(".//lunWolgeon") is not None else "์ ๋ณด ์์" |
|
lunSecha = root.find(".//lunSecha").text if root.find(".//lunSecha") is not None else "์ ๋ณด ์์" |
|
|
|
siju = calculate_siju(seoul_time['hour'], lunIljin) |
|
analysis_html = ์ฌ์ฃผ_๋ถ์(lunSecha, lunWolgeon, lunIljin, siju) |
|
|
|
|
|
result = { |
|
"์
๋ ฅ ์๊ฐ": f"{selected_timezone}: {solYear}๋
{solMonth}์ {solDay}์ผ {hour:02d}์ {minute:02d}๋ถ", |
|
"๋ณํ๋ ์์ธ ์๊ฐ": f"{seoul_time['year']}๋
{seoul_time['month']}์ {seoul_time['day']}์ผ {seoul_time['hour'][:2]}์ {seoul_time['hour'][2:]}๋ถ", |
|
"๋
์ฃผ": lunSecha, |
|
"์์ฃผ": lunWolgeon, |
|
"์ผ์ฃผ": lunIljin, |
|
"์์ฃผ": siju |
|
} |
|
|
|
return result, lunIljin, analysis_html |
|
else: |
|
return {"Error": "API ํธ์ถ์ ์คํจํ์ต๋๋ค."}, "์ ๋ณด ์์", "<p>API ํธ์ถ์ ์คํจํ์ต๋๋ค.</p>" |
|
except Exception as e: |
|
return {"Error": f"์ฒ๋ฆฌ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: {str(e)}"}, "์ ๋ณด ์์", "<p>์ฒ๋ฆฌ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.</p>" |
|
|
|
def analyze_character(lunIljin): |
|
API_URL = "https://api.openai.com/v1/chat/completions" |
|
payload = { |
|
"model": "gpt-4", |
|
"messages": [{ |
|
"role": "system", |
|
"content": "๋น์ ์ ์ฌ์ฃผ ํ์์ ๋ํด ์ค๋ช
ํ๋ ์ฑ๋ด์
๋๋ค." |
|
}, { |
|
"role": "user", |
|
"content": f"์ผ์ฃผ '{lunIljin}'์ ๋ํ ์ฑ๊ฒฉ๊ณผ ํน์ง์ ์ค๋ช
ํด์ฃผ์ธ์." |
|
}], |
|
} |
|
headers = { |
|
"Content-Type": "application/json", |
|
"Authorization": f"Bearer {API_KEY}" |
|
} |
|
|
|
try: |
|
response = requests.post(API_URL, headers=headers, json=payload) |
|
response.raise_for_status() |
|
return response.json()["choices"][0]["message"]["content"] |
|
except Exception as e: |
|
return f"๋ถ์ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: {str(e)}" |
|
|
|
def analyze_2024(lunIljin): |
|
API_URL = "https://api.openai.com/v1/chat/completions" |
|
payload = { |
|
"model": "gpt-4", |
|
"messages": [{ |
|
"role": "system", |
|
"content": "๋น์ ์ ์ฌ์ฃผ ํ์์ ๋ํด ์ค๋ช
ํ๋ ์ฑ๋ด์
๋๋ค." |
|
}, { |
|
"role": "user", |
|
"content": f"์ผ์ฃผ '{lunIljin}'์ ๋ํด, 2025๋
์ '์์ฌ'๋
์
๋๋ค. 2025๋
'์์ฌ'๋
์ ๋
์ด์ธ์ ๋ํด์ ์
๋ ฅ๋ ์ผ์ฃผ์ ๊ด๋ จํ์ฌ ์์ธํ ์ค๋ช
ํด์ฃผ์ธ์." |
|
}], |
|
} |
|
headers = { |
|
"Content-Type": "application/json", |
|
"Authorization": f"Bearer {API_KEY}" |
|
} |
|
|
|
try: |
|
response = requests.post(API_URL, headers=headers, json=payload) |
|
response.raise_for_status() |
|
return response.json()["choices"][0]["message"]["content"] |
|
except Exception as e: |
|
return f"๋ถ์ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: {str(e)}" |
|
|
|
|
|
|
|
|
|
์ฌ์ฃผ_๋ฐ์ดํฐ = { |
|
'๊ฐ์(็ฒๅญ)' : '์๋ก์ด ์์์ ์์ง, ๋ฆฌ๋์ญ๊ณผ ๋
๋ฆฝ์ฑ์ด ํน์ง์ด๋ฉฐ, ํธ์พํ๊ณ ์ฑ์คํ ํน์ฑ์ ์ง๋๋ค. ', |
|
'์์ถ(ไนไธ)' : '์ธ๋ด์ฌ์ด ๋งค์ฐ ๊ฐํ๋ฉฐ, ๋ฌผ์ง์ ์ฑ์ทจ๋ฅผ ์ค์์ํ๊ณ ์์ํ ๋ฉด๋ชจ๋ฅผ ๊ฐ์ถ ์ฌ๋์ด๋ค. ', |
|
'๋ณ์ธ(ไธๅฏ
)' : '์ด์ ์ ์ด๊ณ ๋ชจํ์ ์ฆ๊ธฐ๋ฉฐ, ์ฐฝ์๋ ฅ์ด ๋ฐ์ด๋๊ณ ํ์ ์ ์ธ ์์ด๋์ด๋ฅผ ๊ฐ์ง๋ค. ', |
|
'์ ๋ฌ(ไธๅฏ)' : '์์ ์ ๊ฐ๊ฐ์ด ๋ฐ์ด๋๊ณ ์ฌ์ธํ ์ฑ๊ฒฉ์ผ๋ก, ๊ด๊ณ์์์ ์ถฉ์คํจ๊ณผ ์ ์ ์ด ๊น๋ค. ', |
|
'๋ฌด์ง(ๆ่พฐ)' : '์ค์ฉ์ ์ด๋ฉฐ ์์ ์ ์ธ ๊ธฐ๋ฐ์ ์ค์ํ๊ณ , ๊พธ์คํ ๋
ธ๋ ฅ์ ํตํด ์ฑ์ฅํ๋ ํ์
์ด๋ค. ', |
|
'๊ธฐ์ฌ(ๅทฑๅทณ)' : '์ ์ฐ์ฑ๊ณผ ์ ์๋ ฅ์ด ๋ฐ์ด๋๋ฉฐ, ๋ค์ํ ์ํฉ์์๋ ์ ๋์ฒํ๋ ๋ฅ๋ ฅ์ ๊ฐ์ง๋ค. ', |
|
'๊ฒฝ์ค(ๅบๅ)' : '์ ์์ ๋ช
์๋ฅผ ์ค์ํ๋ฉฐ, ์ฑ์คํ๊ณ ์ง์ทจ์ ์ธ ํ๋๋ก ์ฃผ๋ณ์ ์กด๊ฒฝ์ ๋ฐ๋๋ค. ', |
|
'์ ๋ฏธ(่พๆช)' : '์ธ์ฌํ๊ณ ๊ผผ๊ผผํ ์ฑ๊ฒฉ์ผ๋ก ์๋ฒฝ์ ์ถ๊ตฌํ๋ฉฐ, ์ฃผ๋ณ ์ฌ๋๋ค๋ก๋ถํฐ ์ ๋ขฐ๋ฅผ ์ป๋๋ค. ', |
|
'์์ (ๅฃฌ็ณ)' : '์งํ์ ๊ท ํ์ด ์ ์กฐํ๋ ์ฑ๊ฒฉ์ผ๋ก, ๊น์ ํต์ฐฐ๋ ฅ๊ณผ ํจ๊ป ์ธ์์ ์ดํดํ๋ ๋ฅ๋ ฅ์ด ์๋ค. ', |
|
'๊ณ์ (็ธ้
)' : '์ธ๊ต์ ์ด๊ณ ์กฐํ๋ฅผ ์ค์ํ๋ ์ฑํฅ์ผ๋ก, ํ์ธ๊ณผ์ ๊ด๊ณ์์ ์ ์ฐํ๊ณ ๋ค์ ๋ค๊ฐํ๋ค. ', |
|
'๊ฐ์ (็ฒๆ)' : '๋ฏธ์๋ฅผ ๋ ๋ฉฐ ์ฃผ๋ณ ์ฌ๋๋ค์๊ฒ ์ํ๊ณ , ํ๊ณ ๋ ์์
๋ฅ๋ ฅ์ผ๋ก ์ฑ๊ณต์ ์ด๋๋ค. ', |
|
'์ํด(ไนไบฅ)' : '์์์์ํ ์ธ์๊ณผ ๋ชจ๋ฒ์ ๊ฐ์ ์คํ์ผ๋ก, ๋ฅ๋ ฅ๊ณผ ์์ฌ์ ๊ฒธ๋นํ ์ฌ๋์ด๋ค. ', |
|
'๋ณ์(ไธๅญ)' : 'ํธ๋ฐฉํ๊ณ ๊น๋ค๋กญ์ง๋ง, ์ผ์ ํ์คํ ์ฒ๋ฆฌํ๊ณ ์๊ทผํ ๋งค๋ ฅ์ ๊ฐ์ง๊ณ ์๋ค. ', |
|
'์ ์ถ(ไธไธ)' : '์์ ์ ๊ฐ๊ฐ์ด ๋ฐ์ด๋๋ฉฐ ๋ฐ๋ปํ๊ณ ๋ฒ ํ ์ค ์๋ ์ธ๊ฐ๋ฏธ ๋์น๋ ์ฌ๋์ด๋ค. ', |
|
'๋ฌด์ธ(ๆๅฏ
)' : '๋ชจํ์ ์ฆ๊ธฐ๊ณ ์์ ๊ฐ์ด ๋์น๋ฉฐ, ์ธ์์ ๋ฐ์๋ ๋๊ณ ์ถ์ดํ๋ ์ผ์ฌ ์ฐฌ ์ฌ๋์ด๋ค. ', |
|
'๊ธฐ๋ฌ(ๅทฑๅฏ)' : '์ธ์ฌํ๊ณ ์์ ์ ์ธ ๊ธฐ์ง์ด ์์ผ๋ฉฐ, ๊น์ ์๊ฐ๊ณผ ํจ๊ป ์ฌ๋๋ค๊ณผ ์กฐํ๋กญ๊ฒ ์ง๋ธ๋ค. ', |
|
'๊ฒฝ์ง(ๅบ่พฐ)' : '์์ ์ ์ด๊ณ ํดํ์ ์ธ ์ฑ๊ฒฉ์ ๊ฐ์ง๋ฉฐ, ์ฃผ๋ณ ์ฌ๋๋ค๊ณผ์ ์กฐํ๋ฅผ ์ค์ํ๋ค. ', |
|
'์ ์ฌ(่พๅทณ)' : '๋ฉ๊ณผ ๋งค๋ ฅ์ ์ถ์ ์ค์ฌ์ ๋๋ฉฐ, ๊ฐํ ์ฌํ์ ๋ฅ๋ ฅ์ ์ง๋ ์ฌ๋์ด๋ค. ', |
|
'์์ค(ๅฃฌๅ)' : '์ง์ ๋ฅ๋ ฅ์ด ๋ฐ์ด๋๊ณ ์ฌ์คํ ์๊ฐ์ ํ๋, ๊น์ด ์๋ ์ธ๋ฌผ์ด๋ค. ', |
|
'๊ณ๋ฏธ(็ธๆช)' : '์์ ๊ณผ ํ์ธ์๊ฒ ์น์ ํ๊ณ ๊ท์ฌ์ด ๋ฉด๋ชจ๋ฅผ ์ง๋ ์ฌ๋์ผ๋ก, ์ฌํ์ ์ํธ์์ฉ์์ ๋ฐ์คํจ๊ณผ ๋ฐฐ๋ ค๋ฅผ ๋ณด์ฌ์ค๋ค. ์์ ์ ์ฌ๋๋ค์๊ฒ ์ ๋ง์ถฐ์ฃผ๋ฉฐ, ํํฉ์ ์ค์์ํ๋ค. ', |
|
'๊ฐ์ (็ฒ็ณ)' : '๋ด๋ฉด์ด ๋ณํ๋ฌด์ํ๋ ๊ฒ์ผ๋ก๋ ๋๋ฌ๋ด์ง ์๊ณ , ๊ฐ์ธํ ๋ฉด๋ชจ๋ก ์ด๋ ค์์ ๊ทน๋ณตํ๋ค.', |
|
'์์ (ไน้
)' : 'ํ์ธ์ ๋น๋ฐ์ ์ ์ง์ผ์ฃผ๋ ์ ๋ขฐํ ์ ์๋ ์ฌ๋์ผ๋ก, ์ง์ค๋ ฅ๊ณผ ์ํ๋ ฅ์ด ๊ฐํ๋ค. ', |
|
'๋ณ์ (ไธๆ)' : '๊ด๋ํ๋ฉด์๋ ์ธ์ธํ ๋ถ๋ถ์ ๊น๋ค๋ก์ธ ์ ์์ผ๋ฉฐ, ์ํ๋ ฅ์ด ๊ฐํ๊ณ ํ๋ช
ํ๋ค. ', |
|
'์ ํด(ไธไบฅ)' : 'ํฌ์ฉ๋ ฅ์ด ๋ฐ์ด๋๊ณ ์ถ์ ๋ํ ์ ์ฐฉ์ด ๊ฐํ๋ฉฐ, ์ง์ฌ์ผ๋ก ์ฃผ๋ณ์ ์ฑ๊ธด๋ค. ', |
|
'๋ฌด์(ๆๅญ)' : '์ ๋น๋ก์ด ๋ถ์๊ธฐ์ ์ฌ๋ฌผ์ ์ค์ํ๋ ์ฑํฅ์ด ์์ผ๋ฉฐ, ์๋ด๋ฅผ ์ ๋๋ฌ๋ด์ง ์๋๋ค. ', |
|
'๊ธฐ์ถ(ๅทฑไธ)' : '๊ฐ์ธํ ๋ด๋ฉด์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์์ ๋ง์ ๊ธธ์ ๊ฑธ์ด๊ฐ๋ ํ๊ณ ํ ์ ๋
์ ์ง๋๋ค. ', |
|
'๊ฒฝ์ธ(ๅบๅฏ
)' : 'ํฐ ํฌ๋ถ์ ๊ตญ์ ์ ์ธ ํ๋์ ์ถ๊ตฌํ๋ฉฐ, ์ฌ์
์์ ํฐ ์ฑ๊ณต์ ๊ฟ๊พธ๋ ์ฌ๋์ด๋ค. ', |
|
'์ ๋ฌ(่พๅฏ)' : '๊น๊นํ๊ณ ๋ ์นด๋ก์ธ ์ ์์ง๋ง, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง์์ด ์ฐฉํ ์ฌ๋์ด๋ค. ', |
|
'์์ง(ๅฃฌ่พฐ)' : '์ธ๋ด์ฌ์ด ๊ฐํ๊ณ , ํ ๋ฒ ๋ง์๋จน์ ์ผ์ ๋๊น์ง ๋ฐ๊ณ ๋๊ฐ๋ ๊ฐ์ธํ ์์ง์ ์ฌ๋์ด๋ค. ', |
|
'๊ณ์ฌ(็ธๅทณ)' : '์ ์ ํ ํ์ด๋ฐ๊ณผ ์ํฉ ํ๋จ๋ ฅ์ผ๋ก ๋์ ๋๋ ์ฑ์ทจ๋ฅผ ์ด๋ฃจ๋ ์ฌ๋์ด๋ค. ๋๋ํ๊ณ ์ํฉ์ ๋ง๋ ์ต์ ์ ๊ฒฐ์ ์ ๋ด๋ฆด ์ค ์๋ฉฐ, ์ถ์์์ ์ฌ๋ฌ ๊ธฐํ๋ฅผ ์ ์ด๋ฆฐ๋ค. ', |
|
'๊ฐ์ค(็ฒๅ)' : '์กฐ๊ธ ์กฐ๊ธํ๊ณ ์ค์ํ ์ ์์ง๋ง, ๋ญ๋ง์ ์ด๊ณ ์พํํ์ฌ ์ฃผ๋ณ์ ๋ฐ๊ฒ ๋ง๋ ๋ค.', |
|
'์๋ฏธ(ไนๆช)' : '์ ์ ์ด ๋ง๊ณ ๋๊ธฐ๊ฐ ์์ผ๋ฉฐ, ๋ช
ํํ ์ฃผ๊ด๊ณผ ํจ๊ป ์ฌ๋ฌผ์ ์ด์น๋ฅผ ์ ํ์
ํ๋ค. ', |
|
'๋ณ์ (ไธ็ณ)' : '์ธ๋ จ๋๊ณ ๋ง๊ณผ ๋ฉ์ ์ถ๊ตฌํ๋ฉฐ, ์ฌ๊ต์ ์ด๋ฉด์๋ ๋ด๋ฉด์ ๊ฐ๋ฑ์ ๊ฐ์ง ์ฌ๋์ด๋ค. ', |
|
'์ ์ (ไธ้
)' : '๊ฐ๊ฐ์ ์ด๊ณ ์ฌ์น ์๋ ์ฑ๊ฒฉ์ผ๋ก, ์ฃผ๋ณ ์ฌ๋๋ค์๊ฒ ์ฆ๊ฑฐ์์ ์ฃผ๋ ์ฌ๋์ด๋ค. ', |
|
'๋ฌด์ (ๆๆ)' : '์ค์์ ์ค์ํ๊ณ ์๋ฐํ ์ถ์ ์ถ๊ตฌํ๋ฉฐ, ๋ด๋ฐฑํ ๋งค๋ ฅ์ ๊ฐ์ง ์ค๋ฆฌ์ฃผ์์์ด๋ค. ', |
|
'๊ธฐํด(ๅทฑไบฅ)' : '์จํํ๊ณ ๋ช
๋ํ๋ฉฐ, ์์ง๊ฐ ๊ตณ๊ฑดํ๋ ๋๋ก๋ ๋ง์ค์ด๋ ๊ฒฝํฅ์ด ์๋ค. ', |
|
'๊ฒฝ์(ๅบๅญ)' : '์ฐจ๋ถํ๊ณ ๊ฒฐ๋จ๋ ฅ์ด ์๋ ๋ฐ๋ฉด, ์ผ์ ์ฅ๋จ์ ์ ์ ์คํ๊ฒ ํ๋จํ๋ ์ฌ๋์ด๋ค. ', |
|
'์ ์ถ(่พไธ)' : '๊ฒธ์ํจ๊ณผ ํจ๊ป ํ์ธ์ ์ ํ๋จํ๋ ๋ฅ๋ ฅ์ ๊ฐ์ง, ์ธ๊ฐ ๊ด๊ณ์์์ ์กฐ์จ์์ด๋ค. ', |
|
'์์ธ(ๅฃฌๅฏ
)' : '์์ ๊ฐ์ ์ถ๊ตฌํ๋ฉฐ, ์ฆ๊ฑฐ์๊ณผ ์ฌ๋ฏธ๋ฅผ ์ค์์ํ๋ ํธ์ํ ์ฑ๊ฒฉ์ ์์ ์์ด๋ค. ', |
|
'๊ณ๋ฌ(็ธๅฏ)' : '์น์ ํ๊ณ ์ฌ๋๋ค์๊ฒ ์ ๋ง์ถฐ์ฃผ๋ ์ฑ๊ฒฉ์ผ๋ก, ๋๋จํ ์ฐฉํ๊ณ ์๋๋ฐฉ์ ํธ์ํ๊ฒ ๋ง๋๋ ๋ฅ๋ ฅ์ด ์๋ค. ๊ทธ์ ์กด์ฌ๋ง์ผ๋ก๋ ์ฃผ๋ณ์ ๊ธ์ ์ ์ธ ๋ถ์๊ธฐ๋ฅผ ๋ง๋ค์ด๋ธ๋ค. ', |
|
'๊ฐ์ง(็ฒ่พฐ)' : 'ํธ์พํ ์ฑ๊ฒฉ ์ฑ์คํ๋ฉด์ ์ ๊ต๋ ์๋ ๋ฌด๋๋ํ ์๋จ์ ์์ฌ์ ', |
|
'์์ฌ(ไนๅทณ)' : '์ฌ๋์ ๋์ด๋น๊ธฐ๋ ๋งค๋ ฅ์ด ๋์น๊ณ , ์ด๋์๋ ๋ฐ์ ์๋์ง๋ฅผ ๋ฐ์ฐํ๋ค. ๋ค์ฌ๋ค๋ฅํ๊ณ ์ ์ฐํ ์ฌ๊ณ ๋ฅผ ๊ฐ์ง๋ฉฐ, ์๋ก์ด ๋ง๋จ๊ณผ ๊ฒฝํ์์ ์ฆ๊ฑฐ์์ ์ฐพ๋๋ค. ', |
|
'๋ณ์ค(ไธๅ)' : '์ด์ ์ ์ด๊ณ ์ ๋์ ์ธ ์ฑ๊ฒฉ์ผ๋ก ์ฃผ๋ณ์ ์ด๋๋ ๋ฆฌ๋์ญ๊ณผ ์์ ์๋ฒํ๋ ํ๋๋ฅผ ์ง๋๋ค. ', |
|
'์ ๋ฏธ(ไธๆช)' : '๋ถ๋๋ฝ๊ณ ์์ํ๋ฉฐ ์ด์ ์ ์ธ ์ฑ๊ฒฉ์ผ๋ก, ๋ค์ํ ์ฌ๋๋ค๊ณผ ์ ์ด์ธ๋ฆฐ๋ค. ', |
|
'๋ฌด์ (ๆ็ณ)' : '๋ฐ๋ปํ์ฌ๋์ ๋์ด๋น๊ธฐ๋ ๋งค๋ ฅ์ด ๋์น๊ณ , ์ด๋์๋ ๋ฐ์ ์๋์ง๋ฅผ ๋ฐ์ฐํ๋ค. ๋ค์ฌ๋ค๋ฅํ๊ณ ์ ์ฐํ ์ฌ๊ณ ๋ฅผ ๊ฐ์ง๋ฉฐ, ์๋ก์ด ๋ง๋จ๊ณผ ๊ฒฝํ์์ ์ฆ๊ฑฐ์์ ์ฐพ๋๋ค. ๋ง์๊ณผ ์ฌ์ธํ ๊ฐ์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋์ ํฌ์ฉ๋ ฅ์ผ๋ก ์ฃผ๋ณ์ ๊ฐ์ผ๋ค. ', |
|
'๊ธฐ์ (ๅทฑ้
)' : '๋๋ดํ๊ณ ์ถ์ ๋ํ ์ด์ ์ด ๋์น์ง๋ง, ๋๋ก๋ ์ฐ์ ๋ถ๋จํ ๋ชจ์ต์ ๋ณด์ผ ์ ์๋ค. ', |
|
'๊ฒฝ์ (ๅบๆ)' : '๋์ ํ๊ณ ์ ์ฌ์ ์ธ ํ๋๋ก ํ์ธ์ ๋๋ ๊ฒ์ ์ฆ๊ธฐ๋ฉฐ, ๋๋ก๋ ๊นํ์ค๋ฌ์ธ ์ ์๋ค. ', |
|
'์ ํด(่พไบฅ)' : '์์กด์ฌ์ด ๊ฐํ๊ณ ๋ช
ํํ ์ทจํฅ์ ๊ฐ์ง๋ฉฐ, ๋ญ๋ง์ ์ธ ๊ฐ์ฑ์ ์์ ํ ์ฌ๋์ด๋ค. ', |
|
'์์(ๅฃฌๅญ)' : '์กฐ์ฉํ์ง๋ง, ๋งค๋ ฅ์ ์ด๊ณ ์ํฉ์ ๋ฐ๋ผ ๊ฐํ ๋ฉด๋ชจ๋ฅผ ๋๋ฌ๋ด๋ ์ ๋นํ ์ธ๋ฌผ์ด๋ค. ', |
|
'๊ณ์ถ(็ธไธ)' : '๊ฒ๋ณด๊ธฐ์ ์ฐจ๋ถํ์ง๋ง ๋ด๋ฉด์๋ ๊ฐํ ์์ง์ ์ ๋
์ ์ง๋ ์ฌ๋์ผ๋ก, ์ ๋ง ์ฌ๋์ด ์ข๋ค๋ ๋๋์ ์ฃผ๋ ๋ฐ๋ปํจ๊ณผ ๊ท ํ ์กํ ์ฑ๊ฒฉ์ ๊ฐ๊ณ ์๋ค. ์ฃผ๋ณ ์ฌ๋๋ค์๊ฒ ๋ฏฟ์์ง์ค๋ฌ์ด ์กด์ฌ๋ค. ', |
|
'๊ฐ์ธ(็ฒๅฏ
)' : '๋ฆฌ๋์ญ์ด ์๊ณ ์ฑ์ ์ด ๋ฐ๋ฅด๊ณ ํธ๋ฐฉํ๋ค. ์กฐ์ง์ ์์์ ์ธ ์ฌ๋์ด๋ค.', |
|
'์๋ฌ(ไนๅฏ)' : '๋ด๋ฉด์ ๊ฐ์ธํจ์๋ ๋ถ๊ตฌํ๊ณ ๋ถ๋๋ฌ์ด ์ฌ๊ต์ฑ์ผ๋ก ์ฃผ๋ณ ์ฌ๋๋ค๊ณผ ์ฝ๊ฒ ์ด์ธ๋ฆฐ๋ค. ์ง์ ์ ์ธ ์ํต ๋ฐฉ์ ๋ค์๋ ์ค๋ฉฐ๋๋ ์ํฅ๋ ฅ์ด ์์ด, ๋ง์ ์ด๋ค์๊ฒ ๊ธ์ ์ ์ธ ์๋์ง๋ฅผ ์ ๋ฌํ๋ค. ', |
|
'๋ณ์ง(ไธ่พฐ)' : '๊น๋ํ๊ณ ๋จ์ ํ ์ธ๋ชจ์ ๋๋์ ์ด๋ฉฐ, ์ํฉ์ ๊ต๋ฌํ๊ฒ ์กฐ์ ํ๋ ๋ฅ๋ ฅ์ ๊ฐ์ง๋ค. ', |
|
'์ ์ฌ(ไธๅทณ)' : '๊ฒฝ์์ ์ฆ๊ธฐ๊ณ ๋ค๋ฅธ ์ฌ๋์ ์๋ํ๋ ค๋ ๊ฐํ ์์ง์ ์ฌ๊ต์ ์ธ ๋ฅ๋ ฅ์ ๊ฐ์ก๋ค. ', |
|
'๋ฌด์ค(ๆๅ)' : '๊ฒฐ์ฝ ๊ตดํ์ง ์๋ ์ ์ ๋ ฅ๊ณผ ์ฌ์
์์์ ์ฑ๊ณต์ ๊ฟ๊พธ๋, ์ผ๋ง ์๋ ์ฌ๋์ด๋ค. ', |
|
'๊ธฐ๋ฏธ(ๅทฑๆช)' : '๋ด์ฌ์ ์ ์ด ํฌ์ฒ ํ๊ณ ๊ณต๋์ฒด ์์์ด ๊ฐํ๋ฉฐ, ๊ณต์ต์ ์ํด ์ ๊ทน์ ์ผ๋ก ๊ธฐ์ฌํ๋ค. ', |
|
'๊ฒฝ์ (ๅบ็ณ)' : 'ํ๋์ ์ด๊ณ ๋ฐ์ผ๋ก์ ํ๋์ ์ฆ๊ธฐ๋ฉฐ, ์๋ก์ด ๊ฒ์ ๋์ ํ๋ ๊ฒ์ ๋๋ ค์ํ์ง ์๋๋ค. ', |
|
'์ ์ (่พ้
)' : '๊ณ ์ํ๊ณ ํ์ธ์ ์ํ๋ ๋ง์์ด ๊ฐํ์ง๋ง, ๊ฐ์ ์ด ๊ฒฉํด์ง ๋๋ ์๋นํ ๋ฌด์์ธ ์ ์๋ค. ', |
|
'์์ (ๅฃฌๆ)' : '๊ณ ์ง์ด ์์ง๋ง ๊ฐ์กฑ๊ณผ ํ์ธ์ ์ํด ํ์ ์ ์ผ๋ก ๋
ธ๋ ฅํ๋ ๊ฐํ ๋ฉด๋ชจ๋ฅผ ์ง๋๋ค. ', |
|
'๊ณํด(็ธไบฅ)' : '๊ทธ์ ๋น ์ ธ๋ค๊ฒ ๋ง๋๋ ๊น์ ๋ด๋ฉด์ ๋งค๋ ฅ์ ๊ฐ์ง ์ฌ๋์ผ๋ก, ์์ธ์ ๊น์ ์๊ฐ๊ณผ ๊ฐ์ฑ์ ์ง๋๊ณ ์๋ค. ์์ ๋ง์ ์ธ๊ณ๊ฐ ํ๋ถํด ํ์ธ๊ณผ์ ๊ต๋ฅ์์๋ ๋
ํนํ ๊ด์ ์ ์ ๊ณตํ๋ค. ', |
|
} |
|
|
|
def ์ฌ์ฃผ_๋ถ์(๋
์ฃผ, ์์ฃผ, ์ผ์ฃผ, ์์ฃผ): |
|
html_result = f""" |
|
<div class="analysis-result"> |
|
<h4>๐ฏ ์ฌ์ฃผ ๋ถ์ ๊ฒฐ๊ณผ</h4> |
|
<p><b>๋
์ฃผ ์์ฝ:</b> {๋
์ฃผ} - {์ฌ์ฃผ_๋ฐ์ดํฐ.get(๋
์ฃผ, '์ ๋ณด ์์')}</p> |
|
<p><b>์์ฃผ ์์ฝ:</b> {์์ฃผ} - {์ฌ์ฃผ_๋ฐ์ดํฐ.get(์์ฃผ, '์ ๋ณด ์์')}</p> |
|
<p><b>์ผ์ฃผ ์์ฝ:</b> {์ผ์ฃผ} - {์ฌ์ฃผ_๋ฐ์ดํฐ.get(์ผ์ฃผ, '์ ๋ณด ์์')}</p> |
|
<p><b>์์ฃผ ์์ฝ:</b> {์์ฃผ} - {์ฌ์ฃผ_๋ฐ์ดํฐ.get(์์ฃผ, '์ ๋ณด ์์')}</p> |
|
</div> |
|
""" |
|
return html_result |
|
|
|
css = """ |
|
footer { visibility: hidden; } |
|
|
|
/* ์ ์ฒด ์ปจํ
์ด๋ ์คํ์ผ */ |
|
.container { |
|
background: linear-gradient(135deg, #6e8efb, #a777e3); |
|
border-radius: 15px; |
|
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37); |
|
backdrop-filter: blur(4px); |
|
border: 1px solid rgba(255, 255, 255, 0.18); |
|
padding: 20px; |
|
margin: 10px; |
|
} |
|
|
|
/* ๋ฒํผ ์คํ์ผ */ |
|
button { |
|
background: linear-gradient(135deg, #FF6B6B, #FF8E53); |
|
border: none; |
|
color: white; |
|
padding: 12px 24px; |
|
text-align: center; |
|
font-size: 16px; |
|
border-radius: 8px; |
|
cursor: pointer; |
|
transition: all 0.3s ease; |
|
font-weight: bold; |
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); |
|
} |
|
|
|
button:hover { |
|
transform: translateY(-2px); |
|
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3); |
|
background: linear-gradient(135deg, #FF8E53, #FF6B6B); |
|
} |
|
|
|
/* ์
๋ ฅ ์ปจํ
์ด๋ ์คํ์ผ */ |
|
.input-container { |
|
background: rgba(255, 255, 255, 0.95); |
|
border-radius: 10px; |
|
padding: 20px; |
|
margin: 10px 0; |
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); |
|
transition: all 0.3s ease; |
|
} |
|
|
|
.input-container:hover { |
|
transform: translateY(-2px); |
|
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15); |
|
} |
|
|
|
/* ์ถ๋ ฅ ์ปจํ
์ด๋ ์คํ์ผ */ |
|
.output-container { |
|
background: linear-gradient(135deg, #f6f9fc, #eef2f7); |
|
border-radius: 10px; |
|
padding: 20px; |
|
margin: 10px 0; |
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); |
|
} |
|
|
|
/* ์๊ฐ๋ ๋๋กญ๋ค์ด ์คํ์ผ */ |
|
.timezone-dropdown { |
|
background: linear-gradient(135deg, #ffffff, #f8f9fa); |
|
border-radius: 10px; |
|
padding: 15px; |
|
margin: 15px 0; |
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); |
|
border: 1px solid rgba(110, 142, 251, 0.2); |
|
transition: all 0.3s ease; |
|
} |
|
|
|
.timezone-dropdown:hover { |
|
transform: translateY(-2px); |
|
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15); |
|
} |
|
|
|
.timezone-dropdown select { |
|
width: 100%; |
|
padding: 12px; |
|
border-radius: 8px; |
|
border: 1px solid rgba(0, 0, 0, 0.1); |
|
font-size: 14px; |
|
color: #2d3748; |
|
background-color: white; |
|
} |
|
|
|
.timezone-info { |
|
background: linear-gradient(135deg, rgba(110, 142, 251, 0.1), rgba(167, 119, 227, 0.1)); |
|
border-radius: 10px; |
|
padding: 15px; |
|
margin: 15px 0; |
|
font-size: 14px; |
|
color: #4a5568; |
|
border-left: 4px solid #6e8efb; |
|
line-height: 1.8; |
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); |
|
} |
|
|
|
.timezone-info b { |
|
color: #2d3748; |
|
} |
|
|
|
/* ๋ถ์ ๊ฒฐ๊ณผ ์คํ์ผ */ |
|
.analysis-result { |
|
background: white; |
|
border-radius: 15px; |
|
padding: 25px; |
|
margin: 20px 0; |
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); |
|
transition: all 0.3s ease; |
|
} |
|
|
|
.analysis-result:hover { |
|
transform: translateY(-2px); |
|
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); |
|
} |
|
|
|
/* ํฐ ์ถ๋ ฅ ๋ฐ์ค ์คํ์ผ */ |
|
.large-output-box { |
|
height: 500px !important; |
|
font-size: 16px !important; |
|
padding: 25px !important; |
|
background: linear-gradient(135deg, #f6f9fc, #eef2f7); |
|
border-radius: 15px; |
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); |
|
margin: 20px 0; |
|
overflow-y: auto; |
|
line-height: 1.8; |
|
white-space: pre-wrap; |
|
transition: all 0.3s ease; |
|
} |
|
|
|
.large-output-box:hover { |
|
transform: translateY(-2px); |
|
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); |
|
} |
|
|
|
/* ํญ ๋ด๋น๊ฒ์ด์
์คํ์ผ */ |
|
.tab-nav { |
|
background: rgba(255, 255, 255, 0.9); |
|
border-radius: 15px; |
|
padding: 15px; |
|
margin-bottom: 25px; |
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); |
|
} |
|
|
|
/* ๋งํฌ๋ค์ด ํ
์คํธ ์คํ์ผ */ |
|
.markdown { |
|
text-align: center; |
|
color: #2d3748; |
|
text-shadow: 1px 1px 2px rgba(0,0,0,0.1); |
|
font-weight: 500; |
|
margin: 20px 0; |
|
} |
|
|
|
/* ์ ๋
์ด์ธ ํน๋ณ ์คํ์ผ */ |
|
.newyear-container { |
|
background: linear-gradient(135deg, #ffd1d1, #ffecd1); |
|
padding: 35px; |
|
border-radius: 20px; |
|
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1); |
|
margin: 25px 0; |
|
transition: all 0.3s ease; |
|
} |
|
|
|
.newyear-container:hover { |
|
transform: translateY(-2px); |
|
box-shadow: 0 15px 50px rgba(0, 0, 0, 0.15); |
|
} |
|
|
|
.newyear-title { |
|
font-size: 26px; |
|
color: #2d3748; |
|
text-align: center; |
|
margin-bottom: 25px; |
|
text-shadow: 1px 1px 2px rgba(0,0,0,0.1); |
|
font-weight: bold; |
|
} |
|
|
|
/* ํญ ์ปจํ
์ธ ์คํ์ผ */ |
|
.tab-content { |
|
min-height: 600px; |
|
padding: 25px; |
|
background: rgba(255, 255, 255, 0.02); |
|
border-radius: 15px; |
|
backdrop-filter: blur(10px); |
|
} |
|
|
|
/* ์
๋ ฅ ํ๋ ์คํ์ผ */ |
|
input, select, textarea { |
|
border-radius: 8px !important; |
|
border: 1px solid rgba(0, 0, 0, 0.1) !important; |
|
padding: 12px !important; |
|
transition: all 0.3s ease !important; |
|
} |
|
|
|
input:focus, select:focus, textarea:focus { |
|
border-color: #6e8efb !important; |
|
box-shadow: 0 0 0 2px rgba(110, 142, 251, 0.2) !important; |
|
transform: translateY(-1px); |
|
} |
|
|
|
/* ๋๋กญ๋ค์ด ์ต์
์คํ์ผ */ |
|
select option { |
|
padding: 12px; |
|
font-size: 14px; |
|
background-color: white; |
|
color: #2d3748; |
|
} |
|
|
|
select option:hover { |
|
background-color: #f7fafc; |
|
} |
|
|
|
/* ์คํฌ๋กค๋ฐ ์คํ์ผ */ |
|
::-webkit-scrollbar { |
|
width: 8px; |
|
height: 8px; |
|
} |
|
|
|
::-webkit-scrollbar-track { |
|
background: #f1f1f1; |
|
border-radius: 4px; |
|
} |
|
|
|
::-webkit-scrollbar-thumb { |
|
background: linear-gradient(135deg, #6e8efb, #a777e3); |
|
border-radius: 4px; |
|
} |
|
|
|
::-webkit-scrollbar-thumb:hover { |
|
background: linear-gradient(135deg, #a777e3, #6e8efb); |
|
} |
|
|
|
/* ๋๋กญ๋ค์ด ํ์ดํ ์คํ์ผ */ |
|
select { |
|
appearance: none; |
|
-webkit-appearance: none; |
|
-moz-appearance: none; |
|
background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); |
|
background-repeat: no-repeat; |
|
background-position: right 1rem center; |
|
background-size: 1em; |
|
} |
|
|
|
/* ํธ๋ฒ ํจ๊ณผ ์ ๋๋ฉ์ด์
*/ |
|
@keyframes float { |
|
0% { |
|
transform: translateY(0px); |
|
} |
|
50% { |
|
transform: translateY(-5px); |
|
} |
|
100% { |
|
transform: translateY(0px); |
|
} |
|
} |
|
|
|
.input-container:hover, |
|
.timezone-dropdown:hover, |
|
.large-output-box:hover, |
|
.newyear-container:hover { |
|
animation: float 2s ease-in-out infinite; |
|
} |
|
""" |
|
|
|
|
|
with gr.Blocks(css=css) as demo: |
|
gr.Markdown("# ๐ฎ AI ์ฌ์ฃผ ์ด์ธ ๋ถ์ ์์คํ
โจ", elem_id="title") |
|
gr.Markdown("### ๐ ์๋ ฅ ์๋
์์ผ์์ ์ถ์ ์ง์ญ์ ์
๋ ฅํ์๋ฉด AI๊ฐ ๋น์ ์ ์ด์ธ๋ฅผ ๋ถ์ํด๋๋ฆฝ๋๋ค! ๐ซ", elem_id="description1") |
|
gr.Markdown("### ๐ซ ์ปค๋ฎค๋ํฐ: https://discord.gg/openfreeai ๐", elem_id="description3") |
|
|
|
with gr.Tab("๐ ๊ธฐ๋ณธ ์ ๋ณด ์
๋ ฅ ๋ฐ ์์ฝ"): |
|
with gr.Group(elem_classes="input-container"): |
|
solYear = gr.Textbox(label="๐ ์๋
(์: 1990)") |
|
solMonth = gr.Textbox(label="๐
์์ (์: 01)") |
|
solDay = gr.Textbox(label="๐ ์์ผ (์: 31)") |
|
solHour = gr.Textbox( |
|
label="โฐ ์์ (์: 1030)", |
|
placeholder="24์๊ฐ ํ์์ผ๋ก ์
๋ ฅ (์: 2230)" |
|
) |
|
timezone_select = gr.Dropdown( |
|
choices=sorted(list(TIMEZONE_CITIES.keys())), |
|
value="์์ธ, ๋์ฟ, ํ์ (UTC+9)", |
|
label="๐ ์ถ์ ์ง์ญ ์๊ฐ๋", |
|
info="์ถ์ ์ง์ญ์ ์๊ฐ๋๋ฅผ ์ ํํ์ธ์. ๊ธฐ๋ณธ๊ฐ์ ์์ธ(UTC+9) ์
๋๋ค.", |
|
elem_classes="timezone-dropdown" |
|
) |
|
gr.Markdown( |
|
""" |
|
<div class="timezone-info"> |
|
โน๏ธ <b>์๊ฐ๋ ์ ๋ณด</b> |
|
<br>โข ์ ํํ ์๊ฐ๋๋ ์๋์ผ๋ก ์์ธ ์๊ฐ์ผ๋ก ๋ณํ๋์ด ๊ณ์ฐ๋ฉ๋๋ค. |
|
<br>โข ์์: ๋ด์ 1์ 1์ผ ์คํ 2์ โ ์์ธ ๊ธฐ์ค 1์ 2์ผ ์ค์ 4์ |
|
<br>โข ์ ํํ ์๊ฐ๋๋ฅผ ๋ชจ๋ฅด์๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ๋๋์๋ฅผ ์ ํํ์ธ์. |
|
</div> |
|
""", |
|
elem_classes="timezone-info" |
|
) |
|
|
|
|
|
with gr.Group(elem_classes="output-container"): |
|
output1 = gr.JSON(label="๐ฏ ์ฌ์ฃผ ๋ถ์ ๊ฒฐ๊ณผ") |
|
analysis_result = gr.HTML() |
|
lunIljin_state = gr.State() |
|
|
|
get_lunar_info_btn = gr.Button("โจ ์ด์ธ ๋ถ์ํ๊ธฐ") |
|
|
|
|
|
|
|
|
|
|
|
with gr.Tab("๐ง ์ฑ๊ฒฉ๊ณผ ํน์ง ๋ถ์"): |
|
with gr.Group(elem_classes="output-container"): |
|
character_output = gr.Textbox( |
|
label="๐ญ ๋น์ ์ ์ฑ๊ฒฉ๊ณผ ํน์ง", |
|
elem_classes="large-output-box", |
|
lines=15, |
|
max_lines=30 |
|
) |
|
analyze_button = gr.Button("๐ ์ฑ๊ฒฉ ๋ถ์ํ๊ธฐ") |
|
|
|
with gr.Tab("๐ 2025๋
์ด์ธ"): |
|
with gr.Group(elem_classes="newyear-container"): |
|
gr.Markdown("### ๐ 2025๋
์์ฌ๋
์ ๋
์ด์ธ ๐", elem_classes="newyear-title") |
|
newyear_output = gr.Textbox( |
|
label="๐ ์์ธ ์ด์ธ ๋ถ์", |
|
elem_classes="large-output-box", |
|
lines=20, |
|
max_lines=30, |
|
show_label=True, |
|
placeholder="์ด์ธ ๋ถ์ ๊ฒฐ๊ณผ๊ฐ ์ฌ๊ธฐ์ ํ์๋ฉ๋๋ค..." |
|
) |
|
analyze_button2 = gr.Button("๐ฏ 2025๋
์ด์ธ ๋ณด๊ธฐ", size="large") |
|
|
|
|
|
get_lunar_info_btn.click( |
|
fn=get_lunar_info, |
|
inputs=[solYear, solMonth, solDay, solHour, timezone_select], |
|
outputs=[output1, lunIljin_state, analysis_result] |
|
) |
|
|
|
analyze_button.click( |
|
fn=analyze_character, |
|
inputs=[lunIljin_state], |
|
outputs=character_output |
|
) |
|
|
|
analyze_button2.click( |
|
fn=analyze_2024, |
|
inputs=[lunIljin_state], |
|
outputs=newyear_output |
|
) |
|
|
|
|
|
|
|
|
|
demo.launch() |
|
|
|
|
|
|