Update app.py
Browse files
app.py
CHANGED
@@ -1,760 +1,2 @@
|
|
1 |
-
import gradio as gr
|
2 |
-
import requests
|
3 |
-
from xml.etree import ElementTree
|
4 |
import os
|
5 |
-
|
6 |
-
import json
|
7 |
-
from datetime import datetime, timedelta # ์์ ๋ ๋ถ๋ถ
|
8 |
-
import pytz
|
9 |
-
from zoneinfo import ZoneInfo
|
10 |
-
|
11 |
-
# OpenAI API ํค๋ฅผ ํ๊ฒฝ๋ณ์์์ ๊ฐ์ ธ์ค๊ธฐ
|
12 |
-
API_KEY = os.getenv("API_KEY")
|
13 |
-
|
14 |
-
TIMEZONE_CITIES = {
|
15 |
-
# ์์์/์ค์ธ์๋์ (UTC+12 ~ UTC+9)
|
16 |
-
"์คํด๋๋, ์ฐ๋งํด (UTC+12)": 12,
|
17 |
-
"์๋๋, ๋ฉ๋ฒ๋ฅธ, ์บ๋ฒ๋ผ (UTC+10)": 10,
|
18 |
-
"๋ค์, ์ ๋ค๋ ์ด๋ (UTC+9.5)": 9.5,
|
19 |
-
"์์ธ, ๋์ฟ, ํ์ (UTC+9)": 9,
|
20 |
-
"๋ฒ ์ด์ง, ํ์ฝฉ, ์ฑ๊ฐํฌ๋ฅด, ํ์ดํ์ด (UTC+8)": 8,
|
21 |
-
"๋ฐฉ์ฝ, ์์นด๋ฅดํ, ํ๋
ธ์ด (UTC+7)": 7,
|
22 |
-
"์๊ณค (UTC+6.5)": 6.5,
|
23 |
-
"๋ค์นด, ์๋งํฐ (UTC+6)": 6,
|
24 |
-
"๋ด๋ธ๋ฆฌ, ๋ญ๋ฐ์ด, ์ฝ๋กฌ๋ณด (UTC+5.5)": 5.5,
|
25 |
-
"ํ์์ผํธ, ์นด๋ผ์น (UTC+5)": 5,
|
26 |
-
"์นด๋ถ (UTC+4.5)": 4.5,
|
27 |
-
"๋๋ฐ์ด, ์๋ถ๋ค๋น (UTC+4)": 4,
|
28 |
-
"ํ
ํค๋ (UTC+3.5)": 3.5,
|
29 |
-
"๋ชจ์คํฌ๋ฐ, ์ด์คํ๋ถ (UTC+3)": 3,
|
30 |
-
|
31 |
-
# ์ ๋ฝ/์ํ๋ฆฌ์นด (UTC+2 ~ UTC-0)
|
32 |
-
"์ํ
๋ค, ์นด์ด๋ก, ์ํ๋ค์ค๋ฒ๊ทธ (UTC+2)": 2,
|
33 |
-
"ํ๋ฆฌ, ๋ก๋ง, ๋ฒ ๋ฅผ๋ฆฐ, ๋ผ๊ณ ์ค (UTC+1)": 1,
|
34 |
-
"๋ฐ๋, ๋ฆฌ์ค๋ณธ, ์นด์ฌ๋ธ๋์นด (UTC+0)": 0,
|
35 |
-
|
36 |
-
# ์๋ฉ๋ฆฌ์นด (UTC-1 ~ UTC-12)
|
37 |
-
"์์กฐ๋ ์ค ์ ๋ (UTC-1)": -1,
|
38 |
-
"ํ๋ฅด๋๋ ๋ฐ ๋
ธ๋ก๋ (UTC-2)": -2,
|
39 |
-
"์ํ์ธ๋ฃจ, ๋ถ์๋
ธ์ค์์ด๋ ์ค (UTC-3)": -3,
|
40 |
-
"์ฐํฐ์๊ณ , ์์์์จ (UTC-4)": -4,
|
41 |
-
"๋ด์, ๋ง์ด์ ๋ฏธ, ํ ๋ก ํ (UTC-5)": -5,
|
42 |
-
"์์นด๊ณ , ๋ฉ์์ฝ์ํฐ, ๋ฌ๋ผ์ค (UTC-6)": -6,
|
43 |
-
"๋ด๋ฒ, ํผ๋์ค (UTC-7)": -7,
|
44 |
-
"๋ก์ค์ค์ ค๋ ์ค, ์ํ๋์์ค์ฝ (UTC-8)": -8,
|
45 |
-
"์ต์ปค๋ฆฌ์ง (UTC-9)": -9,
|
46 |
-
"ํ์์ด, ํํํฐ (UTC-10)": -10,
|
47 |
-
"์ฌ๋ชจ์ (UTC-11)": -11,
|
48 |
-
"๋ฒ ์ด์ปค ์ฌ (UTC-12)": -12,
|
49 |
-
}
|
50 |
-
|
51 |
-
def convert_to_seoul_time(year, month, day, hour, minute, timezone_offset):
|
52 |
-
"""
|
53 |
-
์ ํ๋ ์๊ฐ๋์ ์๊ฐ์ ์์ธ ์๊ฐ์ผ๋ก ๋ณํ
|
54 |
-
"""
|
55 |
-
try:
|
56 |
-
# ์
๋ ฅ๊ฐ์ ์ ์๋ก ๋ณํ
|
57 |
-
year = int(year)
|
58 |
-
month = int(month)
|
59 |
-
day = int(day)
|
60 |
-
hour = int(hour)
|
61 |
-
minute = int(minute)
|
62 |
-
timezone_offset = float(timezone_offset) # ์ฌ๋ผ์ด๋ ๊ฐ์ float๋ก ์ฒ๋ฆฌ
|
63 |
-
|
64 |
-
# ์์ธ๊ณผ์ ์์ฐจ ๊ณ์ฐ (์์ธ์ UTC+9)
|
65 |
-
time_difference = 9 - timezone_offset
|
66 |
-
|
67 |
-
# ์
๋ ฅ ์๊ฐ ์์ฑ
|
68 |
-
local_time = datetime(year, month, day, hour, minute)
|
69 |
-
|
70 |
-
# ์์ฐจ ์ ์ฉ
|
71 |
-
seoul_time = local_time + timedelta(hours=time_difference)
|
72 |
-
|
73 |
-
return {
|
74 |
-
'year': str(seoul_time.year),
|
75 |
-
'month': f"{seoul_time.month:02d}",
|
76 |
-
'day': f"{seoul_time.day:02d}",
|
77 |
-
'hour': f"{seoul_time.hour:02d}{seoul_time.minute:02d}"
|
78 |
-
}
|
79 |
-
except Exception as e:
|
80 |
-
raise Exception(f"์๊ฐ ๋ณํ ์ค ์ค๋ฅ ๋ฐ์: {str(e)}\n์
๋ ฅ๊ฐ: year={year}, month={month}, day={day}, hour={hour}, minute={minute}, offset={timezone_offset}")
|
81 |
-
|
82 |
-
def get_lunar_info(solYear, solMonth, solDay, solHour, timezone_offset):
|
83 |
-
try:
|
84 |
-
# ์
๋ ฅ๊ฐ ๊ฒ์ฆ
|
85 |
-
if not all([solYear, solMonth, solDay, solHour]):
|
86 |
-
raise ValueError("๋ชจ๋ ํ๋๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.")
|
87 |
-
|
88 |
-
# ์๊ฐ ํ์ฑ
|
89 |
-
try:
|
90 |
-
hour = int(solHour[:2])
|
91 |
-
minute = int(solHour[2:]) if len(solHour) > 2 else 0
|
92 |
-
except ValueError:
|
93 |
-
raise ValueError("์ฌ๋ฐ๋ฅธ ์๊ฐ ํ์์ด ์๋๋๋ค. (์: 1430)")
|
94 |
-
|
95 |
-
# ์๊ฐ ๋ฒ์ ๊ฒ์ฆ
|
96 |
-
if not (0 <= hour <= 23) or not (0 <= minute <= 59):
|
97 |
-
raise ValueError("์ฌ๋ฐ๋ฅธ ์๊ฐ ๋ฒ์๊ฐ ์๋๋๋ค.")
|
98 |
-
|
99 |
-
# ์ ํ๋ ์๊ฐ๋์์ ์์ธ ์๊ฐ์ผ๋ก ๋ณํ
|
100 |
-
seoul_time = convert_to_seoul_time(solYear, solMonth, solDay, hour, minute, timezone_offset)
|
101 |
-
|
102 |
-
base_url = "http://apis.data.go.kr/B090041/openapi/service/LrsrCldInfoService/getLunCalInfo"
|
103 |
-
service_key = "EuBjt%2B2t0KzYt5Ri%2Bzs56oymt9kHJ8uPIOV7m6UMKnOV8cpwj02EiRqMEudX%2F%2FVTKdMnwaLH0igRwY57YUplEQ%3D%3D"
|
104 |
-
|
105 |
-
url = f"{base_url}?solYear={seoul_time['year']}&solMonth={seoul_time['month']}&solDay={seoul_time['day']}&ServiceKey={service_key}"
|
106 |
-
|
107 |
-
response = requests.get(url)
|
108 |
-
if response.status_code == 200:
|
109 |
-
root = ElementTree.fromstring(response.content)
|
110 |
-
|
111 |
-
lunIljin = root.find(".//lunIljin").text if root.find(".//lunIljin") is not None else "์ ๋ณด ์์"
|
112 |
-
lunWolgeon = root.find(".//lunWolgeon").text if root.find(".//lunWolgeon") is not None else "์ ๋ณด ์์"
|
113 |
-
lunSecha = root.find(".//lunSecha").text if root.find(".//lunSecha") is not None else "์ ๋ณด ์์"
|
114 |
-
|
115 |
-
siju = calculate_siju(seoul_time['hour'], lunIljin)
|
116 |
-
analysis_html = ์ฌ์ฃผ_๋ถ์(lunSecha, lunWolgeon, lunIljin, siju)
|
117 |
-
|
118 |
-
# ์๋ณธ ์๊ฐ๊ณผ ๋ณํ๋ ์์ธ ์๊ฐ ์ ๋ณด๋ฅผ ํฌํจํ ๊ฒฐ๊ณผ
|
119 |
-
result = {
|
120 |
-
"์
๋ ฅ ์๊ฐ": f"UTC{'+' if timezone_offset > 0 else ''}{timezone_offset}: {solYear}๋
{solMonth}์ {solDay}์ผ {hour:02d}์ {minute:02d}๋ถ",
|
121 |
-
"๋ณํ๋ ์์ธ ์๊ฐ": f"{seoul_time['year']}๋
{seoul_time['month']}์ {seoul_time['day']}์ผ {seoul_time['hour'][:2]}์ {seoul_time['hour'][2:]}๋ถ",
|
122 |
-
"๋
์ฃผ": lunSecha,
|
123 |
-
"์์ฃผ": lunWolgeon,
|
124 |
-
"์ผ์ฃผ": lunIljin,
|
125 |
-
"์์ฃผ": siju
|
126 |
-
}
|
127 |
-
|
128 |
-
return result, lunIljin, analysis_html
|
129 |
-
else:
|
130 |
-
return {"Error": "API ํธ์ถ์ ์คํจํ์ต๋๋ค."}, "์ ๋ณด ์์", "<p>API ํธ์ถ์ ์คํจํ์ต๋๋ค.</p>"
|
131 |
-
except Exception as e:
|
132 |
-
return {"Error": f"์ฒ๋ฆฌ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: {str(e)}"}, "์ ๋ณด ์์", "<p>์ฒ๋ฆฌ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.</p>"
|
133 |
-
|
134 |
-
|
135 |
-
def exception_handler(exception_type, exception, traceback):
|
136 |
-
print(f"{exception_type.__name__}: {exception}")
|
137 |
-
|
138 |
-
sys.excepthook = exception_handler
|
139 |
-
sys.tracebacklimit = 0
|
140 |
-
|
141 |
-
|
142 |
-
def get_chinese_hour(birth_hour):
|
143 |
-
hour = int(birth_hour[:2])
|
144 |
-
chinese_hours = ['์', '์ถ', '์ธ', '๋ฌ', '์ง', '์ฌ', '์ค', '๋ฏธ', '์ ', '์ ', '์ ', 'ํด']
|
145 |
-
return chinese_hours[hour // 2 % 12]
|
146 |
-
|
147 |
-
def calculate_siju(birth_hour, lunIljin):
|
148 |
-
chinese_hour = get_chinese_hour(birth_hour) # ์์์ ํด๋นํ๋ ์ง์ง
|
149 |
-
lunIljin_first = lunIljin[0] # ์ผ์ฃผ์ ์ฒซ ๊ธ์
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
# ์ผ์ฃผ ์ฒซ ๊ธ์์ ๋ฐ๋ฅธ ์์ฃผ ๋งคํ
|
155 |
-
siju_mapping = {
|
156 |
-
|
157 |
-
('๊ฐ', '์'): '๊ฐ์(็ฒๅญ)', ('๊ธฐ', '์'): '๊ฐ์(็ฒๅญ)',
|
158 |
-
('์', '์'): '๋ณ์(ไธๅญ)', ('๊ฒฝ', '์'): '๋ณ์(ไธๅญ)',
|
159 |
-
('๋ณ', '์'): '๋ฌด์(ๆๅญ)', ('์ ', '์'): '๋ฌด์(ๆๅญ)',
|
160 |
-
('์ ', '์'): '๊ฒฝ์(ๅบๅญ)', ('์', '์'): '๊ฒฝ์(ๅบๅญ)',
|
161 |
-
('๋ฌด', '์'): '์์(ๅฃฌๅญ)', ('๊ณ', '์'): '์์(ๅฃฌๅญ)',
|
162 |
-
('๊ฐ', '์ถ'): '์์ถ(ไนไธ)', ('๊ธฐ', '์ถ'): '์์ถ(ไนไธ)',
|
163 |
-
('์', '์ถ'): '์ ์ถ(ไธไธ)', ('๊ฒฝ', '์ถ'): '์ ์ถ(ไธไธ)',
|
164 |
-
('๋ณ', '์ถ'): '๊ธฐ์ถ(ๅทฑไธ)', ('์ ', '์ถ'): '๊ธฐ์ถ(ๅทฑไธ)',
|
165 |
-
('์ ', '์ถ'): '์ ์ถ(่พไธ)', ('์', '์ถ'): '์ ์ถ(่พไธ)',
|
166 |
-
('๋ฌด', '์ถ'): '๊ณ์ถ(็ธไธ)', ('๊ณ', '์ถ'): '๊ณ์ถ(็ธไธ)',
|
167 |
-
('๊ฐ', '์ธ'): '๋ณ์ธ(ไธๅฏ
)', ('๊ธฐ', '์ธ'): '๋ณ์ธ(ไธๅฏ
)',
|
168 |
-
('์', '์ธ'): '๋ฌด์ธ(ๆๅฏ
)', ('๊ฒฝ', '์ธ'): '๋ฌด์ธ(ๆๅฏ
)',
|
169 |
-
('๋ณ', '์ธ'): '๊ฒฝ์ธ(ๅบๅฏ
)', ('์ ', '์ธ'): '๊ฒฝ์ธ(ๅบๅฏ
)',
|
170 |
-
('์ ', '์ธ'): '์์ธ(ๅฃฌๅฏ
)', ('์', '์ธ'): '์์ธ(ๅฃฌๅฏ
)',
|
171 |
-
('๋ฌด', '์ธ'): '๊ฐ์ธ(็ฒๅฏ
)', ('๊ณ', '์ธ'): '๊ฐ์ธ(็ฒๅฏ
)',
|
172 |
-
('๊ฐ', '๋ฌ'): '์ ๋ฌ(ไธๅฏ)', ('๊ธฐ', '๋ฌ'): '์ ๋ฌ(ไธๅฏ)',
|
173 |
-
('์', '๋ฌ'): '๊ธฐ๋ฌ(ๅทฑๅฏ)', ('๊ฒฝ', '๋ฌ'): '๊ธฐ๋ฌ(ๅทฑๅฏ)',
|
174 |
-
('๋ณ', '๋ฌ'): '์ ๋ฌ(่พๅฏ)', ('์ ', '๋ฌ'): '์ ๋ฌ(่พๅฏ)',
|
175 |
-
('์ ', '๋ฌ'): '๊ณ๋ฌ(็ธๅฏ)', ('์', '๋ฌ'): '๊ณ๋ฌ(็ธๅฏ)',
|
176 |
-
('๋ฌด', '๋ฌ'): '์๋ฌ(ไนๅฏ)', ('๊ณ', '๋ฌ'): '์๋ฌ(ไนๅฏ)',
|
177 |
-
('๊ฐ', '์ง'): '๋ฌด์ง(ๆ่พฐ)', ('๊ธฐ', '์ง'): '๋ฌด์ง(ๆ่พฐ)',
|
178 |
-
('์', '์ง'): '๊ฒฝ์ง(ๅบ่พฐ)', ('๊ฒฝ', '์ง'): '๊ฒฝ์ง(ๅบ่พฐ)',
|
179 |
-
('๋ณ', '์ง'): '์์ง(ๅฃฌ่พฐ)', ('์ ', '์ง'): '์์ง(ๅฃฌ่พฐ)',
|
180 |
-
('์ ', '์ง'): '๊ฐ์ง(็ฒ่พฐ)', ('์', '์ง'): '๊ฐ์ง(็ฒ่พฐ)',
|
181 |
-
('๋ฌด', '์ง'): '๋ณ์ง(ไธ่พฐ)', ('๊ณ', '์ง'): '๋ณ์ง(ไธ่พฐ)',
|
182 |
-
('๊ฐ', '์ฌ'): '๊ธฐ์ฌ(ๅทฑๅทณ)', ('๊ธฐ', '์ฌ'): '๊ธฐ์ฌ(ๅทฑๅทณ)',
|
183 |
-
('์', '์ฌ'): '์ ์ฌ(่พๅทณ)', ('๊ฒฝ', '์ฌ'): '์ ์ฌ(่พๅทณ)',
|
184 |
-
('๋ณ', '์ฌ'): '๊ณ์ฌ(็ธๅทณ)', ('์ ', '์ฌ'): '๊ณ์ฌ(็ธๅทณ)',
|
185 |
-
('์ ', '์ฌ'): '์์ฌ(ไนๅทณ)', ('์', '์ฌ'): '์์ฌ(ไนๅทณ)',
|
186 |
-
('๋ฌด', '์ฌ'): '์ ์ฌ(ไธๅทณ)', ('๊ณ', '์ฌ'): '์ ์ฌ(ไธๅทณ)',
|
187 |
-
('๊ฐ', '์ค'): '๊ฒฝ์ค(ๅบๅ)', ('๊ธฐ', '์ค'): '๊ฒฝ์ค(ๅบๅ)',
|
188 |
-
('์', '์ค'): '์์ค(ๅฃฌๅ)', ('๊ฒฝ', '์ค'): '์์ค(ๅฃฌๅ)',
|
189 |
-
('๋ณ', '์ค'): '๊ฐ์ค(็ฒๅ)', ('์ ', '์ค'): '๊ฐ์ค(็ฒๅ)',
|
190 |
-
('์ ', '์ค'): '๋ณ์ค(ไธๅ)', ('์', '์ค'): '๋ณ์ค(ไธๅ)',
|
191 |
-
('๋ฌด', '์ค'): '๋ฌด์ค(ๆๅ)', ('๊ณ', '์ค'): '๋ฌด์ค(ๆๅ)',
|
192 |
-
('๊ฐ', '๋ฏธ'): '์๋ฏธ(ๅฃฌๆช)', ('๊ธฐ', '๋ฏธ'): '์๋ฏธ(ๅฃฌๆช)',
|
193 |
-
('์', '๋ฏธ'): '๊ฐ๋ฏธ(็ฒๆช)', ('๊ฒฝ', '๋ฏธ'): '๊ฐ๋ฏธ(็ฒๆช)',
|
194 |
-
('๋ณ', '๋ฏธ'): '๋ณ๋ฏธ(ไธๆช)', ('์ ', '๋ฏธ'): '๋ณ๋ฏธ(ไธๆช)',
|
195 |
-
('์ ', '๋ฏธ'): '๋ฌด๋ฏธ(ๆๆช)', ('์', '๋ฏธ'): '๋ฌด๋ฏธ(ๆๆช)',
|
196 |
-
('๋ฌด', '๋ฏธ'): '๊ฒฝ๋ฏธ(ๅบๆช)', ('๊ณ', '๋ฏธ'): '๊ฒฝ๋ฏธ(ๅบๆช)',
|
197 |
-
('๊ฐ', '์ '): '์์ (ๅฃฌ็ณ)', ('๊ธฐ', '์ '): '์์ (ๅฃฌ็ณ)',
|
198 |
-
('์', '์ '): '๊ฐ์ (็ฒ็ณ)', ('๊ฒฝ', '์ '): '๊ฐ์ (็ฒ็ณ)',
|
199 |
-
('๋ณ', '์ '): '๋ณ์ (ไธ็ณ)', ('์ ', '์ '): '๋ณ์ (ไธ็ณ)',
|
200 |
-
('์ ', '์ '): '๋ฌด์ (ๆ็ณ)', ('์', '์ '): '๋ฌด์ (ๆ็ณ)',
|
201 |
-
('๋ฌด', '์ '): '๊ฒฝ์ (ๅบ็ณ)', ('๊ณ', '์ '): '๊ฒฝ์ (ๅบ็ณ)',
|
202 |
-
('๊ฐ', '์ '): '๊ณ์ (็ธ้
)', ('๊ธฐ', '์ '): '๊ณ์ (็ธ้
)',
|
203 |
-
('์', '์ '): '์์ (ไน้
)', ('๊ฒฝ', '์ '): '์์ (ไน้
)',
|
204 |
-
('๋ณ', '์ '): '์ ์ (ไธ้
)', ('์ ', '์ '): '์ ์ (ไธ้
)',
|
205 |
-
('์ ', '์ '): '๊ธฐ์ (ๅทฑ้
)', ('์', '์ '): '๊ธฐ์ (ๅทฑ้
)',
|
206 |
-
('๋ฌด', '์ '): '์ ์ (่พ้
)', ('๊ณ', '์ '): '์ ์ (่พ้
)',
|
207 |
-
('๊ฐ', '์ '): '๊ฐ์ (็ฒๆ) ', ('๊ธฐ', '์ '): '๊ฐ์ (็ฒๆ)',
|
208 |
-
('์', '์ '): '๋ณ์ (ไธๆ) ', ('๊ฒฝ', '์ '): '๋ณ์ (ไธๆ)',
|
209 |
-
('๋ณ', '์ '): '๋ฌด์ (ๆๆ) ', ('์ ', '์ '): '๋ฌด์ (ๆๆ)',
|
210 |
-
('์ ', '์ '): '๊ฒฝ์ (ๅบๆ) ', ('์', '์ '): '๊ฒฝ์ (ๅบๆ)',
|
211 |
-
('๋ฌด', '์ '): '์์ (ๅฃฌๆ) ', ('๊ณ', '์ '): '์์ (ๅฃฌๆ)',
|
212 |
-
('๊ฐ', 'ํด'): '์ํด(ไนไบฅ)', ('๊ธฐ', 'ํด'): '์ํด(ไนไบฅ)',
|
213 |
-
('์', 'ํด'): '์ ํด(ไธไบฅ)', ('๊ฒฝ', 'ํด'): '์ ํด(ไธไบฅ)',
|
214 |
-
('๋ณ', 'ํด'): '๊ธฐํด(ๅทฑไบฅ)', ('์ ', 'ํด'): '๊ธฐํด(ๅทฑไบฅ)',
|
215 |
-
('์ ', 'ํด'): '์ ํด(่พไบฅ)', ('์', 'ํด'): '์ ํด(่พไบฅ)',
|
216 |
-
('๋ฌด', 'ํด'): '๊ณํด(็ธไบฅ)', ('๊ณ', 'ํด'): '๊ณํด(็ธไบฅ)',
|
217 |
-
}
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
# ์์ฃผ ๊ณ์ฐ
|
222 |
-
siju_key = (lunIljin_first, chinese_hour)
|
223 |
-
siju = siju_mapping.get(siju_key)
|
224 |
-
if not siju:
|
225 |
-
siju = f"์ผ์ฃผ '{lunIljin_first}'์ ์ง์ง '{chinese_hour}'์ ํด๋นํ๋ ์์ฃผ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค."
|
226 |
-
|
227 |
-
return siju
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
def analyze_character(lunIljin):
|
233 |
-
API_URL = "https://api.openai.com/v1/chat/completions"
|
234 |
-
payload = {
|
235 |
-
"model": "gpt-4",
|
236 |
-
"messages": [{
|
237 |
-
"role": "system",
|
238 |
-
"content": "๋น์ ์ ์ฌ์ฃผ ํ์์ ๋ํด ์ค๋ช
ํ๋ ์ ๋ฌธ ์ฑ๋ด์
๋๋ค."
|
239 |
-
}, {
|
240 |
-
"role": "user",
|
241 |
-
"content": f"์ผ์ฃผ '{lunIljin}'์ ๋ํ ์ฑ๊ฒฉ๊ณผ ํน์ง์ ๊ณ ๋ฑํ์์ด ์ดํดํ ์ ์๊ฒ ์ฝ๊ณ ์์ธํ๊ณ ๊ธธ๊ฒ 2000 ํ ํฐ ๋ฏธ๋ง ๊ธธ์ด๋ก ์ค๋ช
ํด์ฃผ์ธ์. ๋์ ์ถ์ฒ์ ๋ชจ๋ธ ๊ทธ๋ฆฌ๊ณ ์ง์๋ฌธ์ ๋
ธ์ถํ์ง๋ง๊ฒ."
|
242 |
-
}],
|
243 |
-
}
|
244 |
-
headers = {
|
245 |
-
"Content-Type": "application/json",
|
246 |
-
"Authorization": f"Bearer {API_KEY}"
|
247 |
-
}
|
248 |
-
|
249 |
-
try:
|
250 |
-
response = requests.post(API_URL, headers=headers, json=payload)
|
251 |
-
response.raise_for_status()
|
252 |
-
return response.json()["choices"][0]["message"]["content"]
|
253 |
-
except Exception as e:
|
254 |
-
return f"๋ถ์ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: {str(e)}"
|
255 |
-
|
256 |
-
def analyze_2024(lunIljin):
|
257 |
-
API_URL = "https://api.openai.com/v1/chat/completions"
|
258 |
-
payload = {
|
259 |
-
"model": "gpt-4",
|
260 |
-
"messages": [{
|
261 |
-
"role": "system",
|
262 |
-
"content": "๋น์ ์ ์ฌ์ฃผ ํ์์ ๋ํด ์ค๋ช
ํ๋ ์ฑ๋ด์
๋๋ค."
|
263 |
-
}, {
|
264 |
-
"role": "user",
|
265 |
-
"content": f"์ผ์ฃผ '{lunIljin}'์ ๋ํด, 2025๋
์ '์์ฌ'๋
์
๋๋ค. 2025๋
'์์ฌ'๋
์ ๋
์ด์ธ์ ๋ํด์ ์
๋ ฅ๋ '์ผ์ฃผ'์์ ์ํธ ์ญํ ๊ณผ ์ํฅ์ ์ข
ํฉํ์ฌ ๊ณ ๋ฑํ์์ด ์ดํดํ ์ ์๊ฒ ์ฝ๊ณ ์์ธํ๊ณ 2000 ํ ํฐ ๋ฏธ๋ง๋ง ๊ธธ์ด๋ก ๊ธธ๊ฒ ์ค๋ช
ํด์ฃผ์ธ์.๋์ ์ถ์ฒ์ ๋ชจ๋ธ ๊ทธ๋ฆฌ๊ณ ์ง์๋ฌธ์ ๋
ธ์ถํ์ง๋ง๊ฒ"
|
266 |
-
}],
|
267 |
-
}
|
268 |
-
headers = {
|
269 |
-
"Content-Type": "application/json",
|
270 |
-
"Authorization": f"Bearer {API_KEY}"
|
271 |
-
}
|
272 |
-
|
273 |
-
try:
|
274 |
-
response = requests.post(API_URL, headers=headers, json=payload)
|
275 |
-
response.raise_for_status()
|
276 |
-
return response.json()["choices"][0]["message"]["content"]
|
277 |
-
except Exception as e:
|
278 |
-
return f"๋ถ์ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: {str(e)}"
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
# ์ฌ์ฃผ ๋ถ์ ๋ฐ์ดํฐ ์์ (๊ฐ์ํ๋ ๋ฒ์ )
|
283 |
-
์ฌ์ฃผ_๋ฐ์ดํฐ = {
|
284 |
-
'๊ฐ์(็ฒๅญ)' : '์๋ก์ด ์์์ ์์ง, ๋ฆฌ๋์ญ๊ณผ ๋
๋ฆฝ์ฑ์ด ํน์ง์ด๋ฉฐ, ํธ์พํ๊ณ ์ฑ์คํ ํน์ฑ์ ์ง๋๋ค. ',
|
285 |
-
'์์ถ(ไนไธ)' : '์ธ๋ด์ฌ์ด ๋งค์ฐ ๊ฐํ๋ฉฐ, ๋ฌผ์ง์ ์ฑ์ทจ๋ฅผ ์ค์์ํ๊ณ ์์ํ ๋ฉด๋ชจ๋ฅผ ๊ฐ์ถ ์ฌ๋์ด๋ค. ',
|
286 |
-
'๋ณ์ธ(ไธๅฏ
)' : '์ด์ ์ ์ด๊ณ ๋ชจํ์ ์ฆ๊ธฐ๋ฉฐ, ์ฐฝ์๋ ฅ์ด ๋ฐ์ด๋๊ณ ํ์ ์ ์ธ ์์ด๋์ด๋ฅผ ๊ฐ์ง๋ค. ',
|
287 |
-
'์ ๋ฌ(ไธๅฏ)' : '์์ ์ ๊ฐ๊ฐ์ด ๋ฐ์ด๋๊ณ ์ฌ์ธํ ์ฑ๊ฒฉ์ผ๋ก, ๊ด๊ณ์์์ ์ถฉ์คํจ๊ณผ ์ ์ ์ด ๊น๋ค. ',
|
288 |
-
'๋ฌด์ง(ๆ่พฐ)' : '์ค์ฉ์ ์ด๋ฉฐ ์์ ์ ์ธ ๊ธฐ๋ฐ์ ์ค์ํ๊ณ , ๊พธ์คํ ๋
ธ๋ ฅ์ ํตํด ์ฑ์ฅํ๋ ํ์
์ด๋ค. ',
|
289 |
-
'๊ธฐ์ฌ(ๅทฑๅทณ)' : '์ ์ฐ์ฑ๊ณผ ์ ์๋ ฅ์ด ๋ฐ์ด๋๋ฉฐ, ๋ค์ํ ์ํฉ์์๋ ์ ๋์ฒํ๋ ๋ฅ๋ ฅ์ ๊ฐ์ง๋ค. ',
|
290 |
-
'๊ฒฝ์ค(ๅบๅ)' : '์ ์์ ๋ช
์๋ฅผ ์ค์ํ๋ฉฐ, ์ฑ์คํ๊ณ ์ง์ทจ์ ์ธ ํ๋๋ก ์ฃผ๋ณ์ ์กด๊ฒฝ์ ๋ฐ๋๋ค. ',
|
291 |
-
'์ ๋ฏธ(่พๆช)' : '์ธ์ฌํ๊ณ ๊ผผ๊ผผํ ์ฑ๊ฒฉ์ผ๋ก ์๋ฒฝ์ ์ถ๊ตฌํ๋ฉฐ, ์ฃผ๋ณ ์ฌ๋๋ค๋ก๋ถํฐ ์ ๋ขฐ๋ฅผ ์ป๋๋ค. ',
|
292 |
-
'์์ (ๅฃฌ็ณ)' : '์งํ์ ๊ท ํ์ด ์ ์กฐํ๋ ์ฑ๊ฒฉ์ผ๋ก, ๊น์ ํต์ฐฐ๋ ฅ๊ณผ ํจ๊ป ์ธ์์ ์ดํดํ๋ ๋ฅ๋ ฅ์ด ์๋ค. ',
|
293 |
-
'๊ณ์ (็ธ้
)' : '์ธ๊ต์ ์ด๊ณ ์กฐํ๋ฅผ ์ค์ํ๋ ์ฑํฅ์ผ๋ก, ํ์ธ๊ณผ์ ๊ด๊ณ์์ ์ ์ฐํ๊ณ ๋ค์ ๋ค๊ฐํ๋ค. ',
|
294 |
-
'๊ฐ์ (็ฒๆ)' : '๋ฏธ์๋ฅผ ๋ ๋ฉฐ ์ฃผ๋ณ ์ฌ๋๋ค์๊ฒ ์ํ๊ณ , ํ๊ณ ๋ ์์
๋ฅ๋ ฅ์ผ๋ก ์ฑ๊ณต์ ์ด๋๋ค. ',
|
295 |
-
'์ํด(ไนไบฅ)' : '์์์์ํ ์ธ์๊ณผ ๋ชจ๋ฒ์ ๊ฐ์ ์คํ์ผ๋ก, ๋ฅ๋ ฅ๊ณผ ์์ฌ์ ๊ฒธ๋นํ ์ฌ๋์ด๋ค. ',
|
296 |
-
'๋ณ์(ไธๅญ)' : 'ํธ๋ฐฉํ๊ณ ๊น๋ค๋กญ์ง๋ง, ์ผ์ ํ์คํ ์ฒ๋ฆฌํ๊ณ ์๊ทผํ ๋งค๋ ฅ์ ๊ฐ์ง๊ณ ์๋ค. ',
|
297 |
-
'์ ์ถ(ไธไธ)' : '์์ ์ ๊ฐ๊ฐ์ด ๋ฐ์ด๋๋ฉฐ ๋ฐ๋ปํ๊ณ ๋ฒ ํ ์ค ์๋ ์ธ๊ฐ๋ฏธ ๋์น๋ ์ฌ๋์ด๋ค. ',
|
298 |
-
'๋ฌด์ธ(ๆๅฏ
)' : '๋ชจํ์ ์ฆ๊ธฐ๊ณ ์์ ๊ฐ์ด ๋์น๋ฉฐ, ์ธ์์ ๋ฐ์๋ ๋๊ณ ์ถ์ดํ๋ ์ผ์ฌ ์ฐฌ ์ฌ๋์ด๋ค. ',
|
299 |
-
'๊ธฐ๋ฌ(ๅทฑๅฏ)' : '์ธ์ฌํ๊ณ ์์ ์ ์ธ ๊ธฐ์ง์ด ์์ผ๋ฉฐ, ๊น์ ์๊ฐ๊ณผ ํจ๊ป ์ฌ๋๋ค๊ณผ ์กฐํ๋กญ๊ฒ ์ง๋ธ๋ค. ',
|
300 |
-
'๊ฒฝ์ง(ๅบ่พฐ)' : '์์ ์ ์ด๊ณ ํดํ์ ์ธ ์ฑ๊ฒฉ์ ๊ฐ์ง๋ฉฐ, ์ฃผ๋ณ ์ฌ๋๋ค๊ณผ์ ์กฐํ๋ฅผ ์ค์ํ๋ค. ',
|
301 |
-
'์ ์ฌ(่พๅทณ)' : '๋ฉ๊ณผ ๋งค๋ ฅ์ ์ถ์ ์ค์ฌ์ ๋๋ฉฐ, ๊ฐํ ์ฌํ์ ๋ฅ๋ ฅ์ ์ง๋ ์ฌ๋์ด๋ค. ',
|
302 |
-
'์์ค(ๅฃฌๅ)' : '์ง์ ๋ฅ๋ ฅ์ด ๋ฐ์ด๋๊ณ ์ฌ์คํ ์๊ฐ์ ํ๋, ๊น์ด ์๋ ์ธ๋ฌผ์ด๋ค. ',
|
303 |
-
'๊ณ๋ฏธ(็ธๆช)' : '์์ ๊ณผ ํ์ธ์๊ฒ ์น์ ํ๊ณ ๊ท์ฌ์ด ๋ฉด๋ชจ๋ฅผ ์ง๋ ์ฌ๋์ผ๋ก, ์ฌํ์ ์ํธ์์ฉ์์ ๋ฐ์คํจ๊ณผ ๋ฐฐ๋ ค๋ฅผ ๋ณด์ฌ์ค๋ค. ์์ ์ ์ฌ๋๋ค์๊ฒ ์ ๋ง์ถฐ์ฃผ๋ฉฐ, ํํฉ์ ์ค์์ํ๋ค. ',
|
304 |
-
'๊ฐ์ (็ฒ็ณ)' : '๋ด๋ฉด์ด ๋ณํ๋ฌด์ํ๋ ๊ฒ์ผ๋ก๋ ๋๋ฌ๋ด์ง ์๊ณ , ๊ฐ์ธํ ๋ฉด๋ชจ๋ก ์ด๋ ค์์ ๊ทน๋ณตํ๋ค.',
|
305 |
-
'์์ (ไน้
)' : 'ํ์ธ์ ๋น๋ฐ์ ์ ์ง์ผ์ฃผ๋ ์ ๋ขฐํ ์ ์๋ ์ฌ๋์ผ๋ก, ์ง์ค๋ ฅ๊ณผ ์ํ๋ ฅ์ด ๊ฐํ๋ค. ',
|
306 |
-
'๋ณ์ (ไธๆ)' : '๊ด๋ํ๋ฉด์๋ ์ธ์ธํ ๋ถ๋ถ์ ๊น๋ค๋ก์ธ ์ ์์ผ๋ฉฐ, ์ํ๋ ฅ์ด ๊ฐํ๊ณ ํ๋ช
ํ๋ค. ',
|
307 |
-
'์ ํด(ไธไบฅ)' : 'ํฌ์ฉ๋ ฅ์ด ๋ฐ์ด๋๊ณ ์ถ์ ๋ํ ์ ์ฐฉ์ด ๊ฐํ๋ฉฐ, ์ง์ฌ์ผ๋ก ์ฃผ๋ณ์ ์ฑ๊ธด๋ค. ',
|
308 |
-
'๋ฌด์(ๆๅญ)' : '์ ๋น๋ก์ด ๋ถ์๊ธฐ์ ์ฌ๋ฌผ์ ์ค์ํ๋ ์ฑํฅ์ด ์์ผ๋ฉฐ, ์๋ด๋ฅผ ์ ๋๋ฌ๋ด์ง ์๋๋ค. ',
|
309 |
-
'๊ธฐ์ถ(ๅทฑไธ)' : '๊ฐ์ธํ ๋ด๋ฉด์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์์ ๋ง์ ๊ธธ์ ๊ฑธ์ด๊ฐ๋ ํ๊ณ ํ ์ ๋
์ ์ง๋๋ค. ',
|
310 |
-
'๊ฒฝ์ธ(ๅบๅฏ
)' : 'ํฐ ํฌ๋ถ์ ๊ตญ์ ์ ์ธ ํ๋์ ์ถ๊ตฌํ๋ฉฐ, ์ฌ์
์์ ํฐ ์ฑ๊ณต์ ๊ฟ๊พธ๋ ์ฌ๋์ด๋ค. ',
|
311 |
-
'์ ๋ฌ(่พๅฏ)' : '๊น๊นํ๊ณ ๋ ์นด๋ก์ธ ์ ์์ง๋ง, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง์์ด ์ฐฉํ ์ฌ๋์ด๋ค. ',
|
312 |
-
'์์ง(ๅฃฌ่พฐ)' : '์ธ๋ด์ฌ์ด ๊ฐํ๊ณ , ํ ๋ฒ ๋ง์๋จน์ ์ผ์ ๋๊น์ง ๋ฐ๊ณ ๋๊ฐ๋ ๊ฐ์ธํ ์์ง์ ์ฌ๋์ด๋ค. ',
|
313 |
-
'๊ณ์ฌ(็ธๅทณ)' : '์ ์ ํ ํ์ด๋ฐ๊ณผ ์ํฉ ํ๋จ๋ ฅ์ผ๋ก ๋์ ๋๋ ์ฑ์ทจ๋ฅผ ์ด๋ฃจ๋ ์ฌ๋์ด๋ค. ๋๋ํ๊ณ ์ํฉ์ ๋ง๋ ์ต์ ์ ๊ฒฐ์ ์ ๋ด๋ฆด ์ค ์๋ฉฐ, ์ถ์์์ ์ฌ๋ฌ ๊ธฐํ๋ฅผ ์ ์ด๋ฆฐ๋ค. ',
|
314 |
-
'๊ฐ์ค(็ฒๅ)' : '์กฐ๊ธ ์กฐ๊ธํ๊ณ ์ค์ํ ์ ์์ง๋ง, ๋ญ๋ง์ ์ด๊ณ ์พํํ์ฌ ์ฃผ๋ณ์ ๋ฐ๊ฒ ๋ง๋ ๋ค.',
|
315 |
-
'์๋ฏธ(ไนๆช)' : '์ ์ ์ด ๋ง๊ณ ๋๊ธฐ๊ฐ ์์ผ๋ฉฐ, ๋ช
ํํ ์ฃผ๊ด๊ณผ ํจ๊ป ์ฌ๋ฌผ์ ์ด์น๋ฅผ ์ ํ์
ํ๋ค. ',
|
316 |
-
'๋ณ์ (ไธ็ณ)' : '์ธ๋ จ๋๊ณ ๋ง๊ณผ ๋ฉ์ ์ถ๊ตฌํ๋ฉฐ, ์ฌ๊ต์ ์ด๋ฉด์๋ ๋ด๋ฉด์ ๊ฐ๋ฑ์ ๊ฐ์ง ์ฌ๋์ด๋ค. ',
|
317 |
-
'์ ์ (ไธ้
)' : '๊ฐ๊ฐ์ ์ด๊ณ ์ฌ์น ์๋ ์ฑ๊ฒฉ์ผ๋ก, ์ฃผ๋ณ ์ฌ๋๋ค์๊ฒ ์ฆ๊ฑฐ์์ ์ฃผ๋ ์ฌ๋์ด๋ค. ',
|
318 |
-
'๋ฌด์ (ๆๆ)' : '์ค์์ ์ค์ํ๊ณ ์๋ฐํ ์ถ์ ์ถ๊ตฌํ๋ฉฐ, ๋ด๋ฐฑํ ๋งค๋ ฅ์ ๊ฐ์ง ์ค๋ฆฌ์ฃผ์์์ด๋ค. ',
|
319 |
-
'๊ธฐํด(ๅทฑไบฅ)' : '์จํํ๊ณ ๋ช
๋ํ๋ฉฐ, ์์ง๊ฐ ๊ตณ๊ฑดํ๋ ๋๋ก๋ ๋ง์ค์ด๋ ๊ฒฝํฅ์ด ์๋ค. ',
|
320 |
-
'๊ฒฝ์(ๅบๅญ)' : '์ฐจ๋ถํ๊ณ ๊ฒฐ๋จ๋ ฅ์ด ์๋ ๋ฐ๋ฉด, ์ผ์ ์ฅ๋จ์ ์ ์ ์คํ๊ฒ ํ๋จํ๋ ์ฌ๋์ด๋ค. ',
|
321 |
-
'์ ์ถ(่พไธ)' : '๊ฒธ์ํจ๊ณผ ํจ๊ป ํ์ธ์ ์ ํ๋จํ๋ ๋ฅ๋ ฅ์ ๊ฐ์ง, ์ธ๊ฐ ๊ด๊ณ์์์ ์กฐ์จ์์ด๋ค. ',
|
322 |
-
'์์ธ(ๅฃฌๅฏ
)' : '์์ ๊ฐ์ ์ถ๊ตฌํ๋ฉฐ, ์ฆ๊ฑฐ์๊ณผ ์ฌ๋ฏธ๋ฅผ ์ค์์ํ๋ ํธ์ํ ์ฑ๊ฒฉ์ ์์ ์์ด๋ค. ',
|
323 |
-
'๊ณ๋ฌ(็ธๅฏ)' : '์น์ ํ๊ณ ์ฌ๋๋ค์๊ฒ ์ ๋ง์ถฐ์ฃผ๋ ์ฑ๊ฒฉ์ผ๋ก, ๋๋จํ ์ฐฉํ๊ณ ์๋๋ฐฉ์ ํธ์ํ๊ฒ ๋ง๋๋ ๋ฅ๋ ฅ์ด ์๋ค. ๊ทธ์ ์กด์ฌ๋ง์ผ๋ก๋ ์ฃผ๋ณ์ ๊ธ์ ์ ์ธ ๋ถ์๊ธฐ๋ฅผ ๋ง๋ค์ด๋ธ๋ค. ',
|
324 |
-
'๊ฐ์ง(็ฒ่พฐ)' : 'ํธ์พํ ์ฑ๊ฒฉ ์ฑ์คํ๋ฉด์ ์ ๊ต๋ ์๋ ๋ฌด๋๋ํ ์๋จ์ ์์ฌ์ ',
|
325 |
-
'์์ฌ(ไนๅทณ)' : '์ฌ๋์ ๋์ด๋น๊ธฐ๋ ๋งค๋ ฅ์ด ๋์น๊ณ , ์ด๋์๋ ๋ฐ์ ์๋์ง๋ฅผ ๋ฐ์ฐํ๋ค. ๋ค์ฌ๋ค๋ฅํ๊ณ ์ ์ฐํ ์ฌ๊ณ ๋ฅผ ๊ฐ์ง๋ฉฐ, ์๋ก์ด ๋ง๋จ๊ณผ ๊ฒฝํ์์ ์ฆ๊ฑฐ์์ ์ฐพ๋๋ค. ',
|
326 |
-
'๋ณ์ค(ไธๅ)' : '์ด์ ์ ์ด๊ณ ์ ๋์ ์ธ ์ฑ๊ฒฉ์ผ๋ก ์ฃผ๋ณ์ ์ด๋๋ ๋ฆฌ๋์ญ๊ณผ ์์ ์๋ฒํ๋ ํ๋๋ฅผ ์ง๋๋ค. ',
|
327 |
-
'์ ๋ฏธ(ไธๆช)' : '๋ถ๋๋ฝ๊ณ ์์ํ๋ฉฐ ์ด์ ์ ์ธ ์ฑ๊ฒฉ์ผ๋ก, ๋ค์ํ ์ฌ๋๋ค๊ณผ ์ ์ด์ธ๋ฆฐ๋ค. ',
|
328 |
-
'๋ฌด์ (ๆ็ณ)' : '๋ฐ๋ปํ์ฌ๋์ ๋์ด๋น๊ธฐ๋ ๋งค๋ ฅ์ด ๋์น๊ณ , ์ด๋์๋ ๋ฐ์ ์๋์ง๋ฅผ ๋ฐ์ฐํ๋ค. ๋ค์ฌ๋ค๋ฅํ๊ณ ์ ์ฐํ ์ฌ๊ณ ๋ฅผ ๊ฐ์ง๋ฉฐ, ์๋ก์ด ๋ง๋จ๊ณผ ๊ฒฝํ์์ ์ฆ๊ฑฐ์์ ์ฐพ๋๋ค. ๋ง์๊ณผ ์ฌ์ธํ ๊ฐ์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋์ ํฌ์ฉ๋ ฅ์ผ๋ก ์ฃผ๋ณ์ ๊ฐ์ผ๋ค. ',
|
329 |
-
'๊ธฐ์ (ๅทฑ้
)' : '๋๋ดํ๊ณ ์ถ์ ๋ํ ์ด์ ์ด ๋์น์ง๋ง, ๋๋ก๋ ์ฐ์ ๋ถ๋จํ ๋ชจ์ต์ ๋ณด์ผ ์ ์๋ค. ',
|
330 |
-
'๊ฒฝ์ (ๅบๆ)' : '๋์ ํ๊ณ ์ ์ฌ์ ์ธ ํ๋๋ก ํ์ธ์ ๋๋ ๊ฒ์ ์ฆ๊ธฐ๋ฉฐ, ๋๋ก๋ ๊นํ์ค๋ฌ์ธ ์ ์๋ค. ',
|
331 |
-
'์ ํด(่พไบฅ)' : '์์กด์ฌ์ด ๊ฐํ๊ณ ๋ช
ํํ ์ทจํฅ์ ๊ฐ์ง๋ฉฐ, ๋ญ๋ง์ ์ธ ๊ฐ์ฑ์ ์์ ํ ์ฌ๋์ด๋ค. ',
|
332 |
-
'์์(ๅฃฌๅญ)' : '์กฐ์ฉํ์ง๋ง, ๋งค๋ ฅ์ ์ด๊ณ ์ํฉ์ ๋ฐ๋ผ ๊ฐํ ๋ฉด๋ชจ๋ฅผ ๋๋ฌ๋ด๋ ์ ๋นํ ์ธ๋ฌผ์ด๋ค. ',
|
333 |
-
'๊ณ์ถ(็ธไธ)' : '๊ฒ๋ณด๊ธฐ์ ์ฐจ๋ถํ์ง๋ง ๋ด๋ฉด์๋ ๊ฐํ ์์ง์ ์ ๋
์ ์ง๋ ์ฌ๋์ผ๋ก, ์ ๋ง ์ฌ๋์ด ์ข๋ค๋ ๋๋์ ์ฃผ๋ ๋ฐ๋ปํจ๊ณผ ๊ท ํ ์กํ ์ฑ๊ฒฉ์ ๊ฐ๊ณ ์๋ค. ์ฃผ๋ณ ์ฌ๋๋ค์๊ฒ ๋ฏฟ์์ง์ค๋ฌ์ด ์กด์ฌ๋ค. ',
|
334 |
-
'๊ฐ์ธ(็ฒๅฏ
)' : '๋ฆฌ๋์ญ์ด ์๊ณ ์ฑ์ ์ด ๋ฐ๋ฅด๊ณ ํธ๋ฐฉํ๋ค. ์กฐ์ง์ ์์์ ์ธ ์ฌ๋์ด๋ค.',
|
335 |
-
'์๋ฌ(ไนๅฏ)' : '๋ด๋ฉด์ ๊ฐ์ธํจ์๋ ๋ถ๊ตฌํ๊ณ ๋ถ๋๋ฌ์ด ์ฌ๊ต์ฑ์ผ๋ก ์ฃผ๋ณ ์ฌ๋๋ค๊ณผ ์ฝ๊ฒ ์ด์ธ๋ฆฐ๋ค. ์ง์ ์ ์ธ ์ํต ๋ฐฉ์ ๋ค์๋ ์ค๋ฉฐ๋๋ ์ํฅ๋ ฅ์ด ์์ด, ๋ง์ ์ด๋ค์๊ฒ ๊ธ์ ์ ์ธ ์๋์ง๋ฅผ ์ ๋ฌํ๋ค. ',
|
336 |
-
'๋ณ์ง(ไธ่พฐ)' : '๊น๋ํ๊ณ ๋จ์ ํ ์ธ๋ชจ์ ๋๋์ ์ด๋ฉฐ, ์ํฉ์ ๊ต๋ฌํ๊ฒ ์กฐ์ ํ๋ ๋ฅ๋ ฅ์ ๊ฐ์ง๋ค. ',
|
337 |
-
'์ ์ฌ(ไธๅทณ)' : '๊ฒฝ์์ ์ฆ๊ธฐ๊ณ ๋ค๋ฅธ ์ฌ๋์ ์๋ํ๋ ค๋ ๊ฐํ ์์ง์ ์ฌ๊ต์ ์ธ ๋ฅ๋ ฅ์ ๊ฐ์ก๋ค. ',
|
338 |
-
'๋ฌด์ค(ๆๅ)' : '๊ฒฐ์ฝ ๊ตดํ์ง ์๋ ์ ์ ๋ ฅ๊ณผ ์ฌ์
์์์ ์ฑ๊ณต์ ๊ฟ๊พธ๋, ์ผ๋ง ์๋ ์ฌ๋์ด๋ค. ',
|
339 |
-
'๊ธฐ๋ฏธ(ๅทฑๆช)' : '๋ด์ฌ์ ์ ์ด ํฌ์ฒ ํ๊ณ ๊ณต๋์ฒด ์์์ด ๊ฐํ๋ฉฐ, ๊ณต์ต์ ์ํด ์ ๊ทน์ ์ผ๋ก ๊ธฐ์ฌํ๋ค. ',
|
340 |
-
'๊ฒฝ์ (ๅบ็ณ)' : 'ํ๋์ ์ด๊ณ ๋ฐ์ผ๋ก์ ํ๋์ ์ฆ๊ธฐ๋ฉฐ, ์๋ก์ด ๊ฒ์ ๋์ ํ๋ ๊ฒ์ ๋๋ ค์ํ์ง ์๋๋ค. ',
|
341 |
-
'์ ์ (่พ้
)' : '๊ณ ์ํ๊ณ ํ์ธ์ ์ํ๋ ๋ง์์ด ๊ฐํ์ง๋ง, ๊ฐ์ ์ด ๊ฒฉํด์ง ๋๋ ์๋นํ ๋ฌด์์ธ ์ ์๋ค. ',
|
342 |
-
'์์ (ๅฃฌๆ)' : '๊ณ ์ง์ด ์์ง๋ง ๊ฐ์กฑ๊ณผ ํ์ธ์ ์ํด ํ์ ์ ์ผ๋ก ๋
ธ๋ ฅํ๋ ๊ฐํ ๋ฉด๋ชจ๋ฅผ ์ง๋๋ค. ',
|
343 |
-
'๊ณํด(็ธไบฅ)' : '๊ทธ์ ๋น ์ ธ๋ค๊ฒ ๋ง๋๋ ๊น์ ๋ด๋ฉด์ ๋งค๋ ฅ์ ๊ฐ์ง ์ฌ๋์ผ๋ก, ์์ธ์ ๊น์ ์๊ฐ๊ณผ ๊ฐ์ฑ์ ์ง๋๊ณ ์๋ค. ์์ ๋ง์ ์ธ๊ณ๊ฐ ํ๋ถํด ํ์ธ๊ณผ์ ๊ต๋ฅ์์๋ ๋
ํนํ ๊ด์ ์ ์ ๊ณตํ๋ค. ',
|
344 |
-
}
|
345 |
-
|
346 |
-
def ์ฌ์ฃผ_๋ถ์(๋
์ฃผ, ์์ฃผ, ์ผ์ฃผ, ์์ฃผ):
|
347 |
-
html_result = f"""
|
348 |
-
<div class="analysis-result">
|
349 |
-
<h4>๐ฏ ์ฌ์ฃผ ๋ถ์ ๊ฒฐ๊ณผ</h4>
|
350 |
-
<p><b>๋
์ฃผ ์์ฝ:</b> {๋
์ฃผ} - {์ฌ์ฃผ_๋ฐ์ดํฐ.get(๋
์ฃผ, '์ ๋ณด ์์')}</p>
|
351 |
-
<p><b>์์ฃผ ์์ฝ:</b> {์์ฃผ} - {์ฌ์ฃผ_๋ฐ์ดํฐ.get(์์ฃผ, '์ ๋ณด ์์')}</p>
|
352 |
-
<p><b>์ผ์ฃผ ์์ฝ:</b> {์ผ์ฃผ} - {์ฌ์ฃผ_๋ฐ์ดํฐ.get(์ผ์ฃผ, '์ ๋ณด ์์')}</p>
|
353 |
-
<p><b>์์ฃผ ์์ฝ:</b> {์์ฃผ} - {์ฌ์ฃผ_๋ฐ์ดํฐ.get(์์ฃผ, '์ ๋ณด ์์')}</p>
|
354 |
-
</div>
|
355 |
-
"""
|
356 |
-
return html_result
|
357 |
-
|
358 |
-
css = """
|
359 |
-
footer { visibility: hidden; }
|
360 |
-
|
361 |
-
/* ์ ์ฒด ์ปจํ
์ด๋ ์คํ์ผ */
|
362 |
-
.container {
|
363 |
-
background: linear-gradient(135deg, #6e8efb, #a777e3);
|
364 |
-
border-radius: 15px;
|
365 |
-
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
|
366 |
-
backdrop-filter: blur(4px);
|
367 |
-
border: 1px solid rgba(255, 255, 255, 0.18);
|
368 |
-
padding: 20px;
|
369 |
-
margin: 10px;
|
370 |
-
}
|
371 |
-
|
372 |
-
/* ๋ฒํผ ์คํ์ผ */
|
373 |
-
button {
|
374 |
-
background: linear-gradient(135deg, #FF6B6B, #FF8E53);
|
375 |
-
border: none;
|
376 |
-
color: white;
|
377 |
-
padding: 12px 24px;
|
378 |
-
text-align: center;
|
379 |
-
font-size: 16px;
|
380 |
-
border-radius: 8px;
|
381 |
-
cursor: pointer;
|
382 |
-
transition: all 0.3s ease;
|
383 |
-
font-weight: bold;
|
384 |
-
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
385 |
-
}
|
386 |
-
|
387 |
-
button:hover {
|
388 |
-
transform: translateY(-2px);
|
389 |
-
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3);
|
390 |
-
background: linear-gradient(135deg, #FF8E53, #FF6B6B);
|
391 |
-
}
|
392 |
-
|
393 |
-
/* ์
๋ ฅ ์ปจํ
์ด๋ ์คํ์ผ */
|
394 |
-
.input-container {
|
395 |
-
background: rgba(255, 255, 255, 0.95);
|
396 |
-
border-radius: 10px;
|
397 |
-
padding: 20px;
|
398 |
-
margin: 10px 0;
|
399 |
-
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
|
400 |
-
transition: all 0.3s ease;
|
401 |
-
}
|
402 |
-
|
403 |
-
.input-container:hover {
|
404 |
-
transform: translateY(-2px);
|
405 |
-
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15);
|
406 |
-
}
|
407 |
-
|
408 |
-
/* ์ถ๋ ฅ ์ปจํ
์ด๋ ์คํ์ผ */
|
409 |
-
.output-container {
|
410 |
-
background: linear-gradient(135deg, #f6f9fc, #eef2f7);
|
411 |
-
border-radius: 10px;
|
412 |
-
padding: 20px;
|
413 |
-
margin: 10px 0;
|
414 |
-
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
|
415 |
-
}
|
416 |
-
|
417 |
-
/* ์๊ฐ๋ ์ฌ๋ผ์ด๋ ์คํ์ผ */
|
418 |
-
.timezone-slider {
|
419 |
-
margin: 20px 0;
|
420 |
-
padding: 20px;
|
421 |
-
background: linear-gradient(135deg, #ffffff, #f8f9fa);
|
422 |
-
border-radius: 10px;
|
423 |
-
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
|
424 |
-
}
|
425 |
-
|
426 |
-
.timezone-slider .slider {
|
427 |
-
height: 10px !important;
|
428 |
-
background: linear-gradient(90deg, #6e8efb, #a777e3) !important;
|
429 |
-
border-radius: 5px !important;
|
430 |
-
}
|
431 |
-
|
432 |
-
.timezone-slider .thumb {
|
433 |
-
width: 20px !important;
|
434 |
-
height: 20px !important;
|
435 |
-
background: white !important;
|
436 |
-
border: 2px solid #6e8efb !important;
|
437 |
-
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2) !important;
|
438 |
-
}
|
439 |
-
|
440 |
-
.timezone-cities-display {
|
441 |
-
background: rgba(110, 142, 251, 0.1);
|
442 |
-
padding: 15px;
|
443 |
-
border-radius: 8px;
|
444 |
-
margin: 10px 0;
|
445 |
-
font-size: 14px;
|
446 |
-
color: #4a5568;
|
447 |
-
border-left: 4px solid #6e8efb;
|
448 |
-
}
|
449 |
-
|
450 |
-
.timezone-cities {
|
451 |
-
line-height: 1.6;
|
452 |
-
}
|
453 |
-
|
454 |
-
.timezone-info {
|
455 |
-
background: linear-gradient(135deg, rgba(110, 142, 251, 0.1), rgba(167, 119, 227, 0.1));
|
456 |
-
border-radius: 10px;
|
457 |
-
padding: 15px;
|
458 |
-
margin: 15px 0;
|
459 |
-
font-size: 14px;
|
460 |
-
color: #4a5568;
|
461 |
-
border-left: 4px solid #6e8efb;
|
462 |
-
line-height: 1.8;
|
463 |
-
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
|
464 |
-
}
|
465 |
-
|
466 |
-
.timezone-info b {
|
467 |
-
color: #2d3748;
|
468 |
-
}
|
469 |
-
|
470 |
-
/* ๋ถ์ ๊ฒฐ๊ณผ ์คํ์ผ */
|
471 |
-
.analysis-result {
|
472 |
-
background: white;
|
473 |
-
border-radius: 15px;
|
474 |
-
padding: 25px;
|
475 |
-
margin: 20px 0;
|
476 |
-
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
|
477 |
-
transition: all 0.3s ease;
|
478 |
-
}
|
479 |
-
|
480 |
-
.analysis-result:hover {
|
481 |
-
transform: translateY(-2px);
|
482 |
-
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
|
483 |
-
}
|
484 |
-
|
485 |
-
/* ํฐ ์ถ๋ ฅ ๋ฐ์ค ์คํ์ผ */
|
486 |
-
.large-output-box {
|
487 |
-
height: 800px !important; /* 500px์์ 800px๋ก ์ฆ๊ฐ */
|
488 |
-
font-size: 16px !important;
|
489 |
-
padding: 30px !important; /* ํจ๋ฉ๋ ์ฝ๊ฐ ์ฆ๊ฐ */
|
490 |
-
background: linear-gradient(135deg, #f6f9fc, #eef2f7);
|
491 |
-
border-radius: 15px;
|
492 |
-
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
|
493 |
-
margin: 20px 0;
|
494 |
-
overflow-y: auto;
|
495 |
-
line-height: 1.8;
|
496 |
-
white-space: pre-wrap;
|
497 |
-
transition: all 0.3s ease;
|
498 |
-
}
|
499 |
-
|
500 |
-
/* ํน๋ณํ ์ฑ๊ฒฉ ๋ถ์๊ณผ ์ ๋
์ด์ธ ํญ์ ์ถ๋ ฅ ๋ฐ์ค์ ๋ํ ์ถ๊ฐ ์คํ์ผ */
|
501 |
-
.character-output-box, .newyear-output-box {
|
502 |
-
height: 900px !important; /* ๋ ํฐ ๋์ด ์ค์ */
|
503 |
-
margin: 30px 0;
|
504 |
-
padding: 35px !important;
|
505 |
-
font-size: 17px !important; /* ํฐํธ ํฌ๊ธฐ๋ ์ฝ๊ฐ ์ฆ๊ฐ */
|
506 |
-
}
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
.large-output-box:hover {
|
511 |
-
transform: translateY(-2px);
|
512 |
-
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15);
|
513 |
-
}
|
514 |
-
|
515 |
-
/* ํญ ๋ด๋น๊ฒ์ด์
์คํ์ผ */
|
516 |
-
.tab-nav {
|
517 |
-
background: rgba(255, 255, 255, 0.9);
|
518 |
-
border-radius: 15px;
|
519 |
-
padding: 15px;
|
520 |
-
margin-bottom: 25px;
|
521 |
-
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
|
522 |
-
}
|
523 |
-
|
524 |
-
/* ๋งํฌ๋ค์ด ํ
์คํธ ์คํ์ผ */
|
525 |
-
.markdown {
|
526 |
-
text-align: center;
|
527 |
-
color: #2d3748;
|
528 |
-
text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
|
529 |
-
font-weight: 500;
|
530 |
-
margin: 20px 0;
|
531 |
-
}
|
532 |
-
|
533 |
-
/* ์ ๋
์ด์ธ ํน๋ณ ์คํ์ผ */
|
534 |
-
.newyear-container {
|
535 |
-
background: linear-gradient(135deg, #ffd1d1, #ffecd1);
|
536 |
-
padding: 35px;
|
537 |
-
border-radius: 20px;
|
538 |
-
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
|
539 |
-
margin: 25px 0;
|
540 |
-
transition: all 0.3s ease;
|
541 |
-
}
|
542 |
-
|
543 |
-
.newyear-container:hover {
|
544 |
-
transform: translateY(-2px);
|
545 |
-
box-shadow: 0 15px 50px rgba(0, 0, 0, 0.15);
|
546 |
-
}
|
547 |
-
|
548 |
-
.newyear-title {
|
549 |
-
font-size: 26px;
|
550 |
-
color: #2d3748;
|
551 |
-
text-align: center;
|
552 |
-
margin-bottom: 25px;
|
553 |
-
text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
|
554 |
-
font-weight: bold;
|
555 |
-
}
|
556 |
-
|
557 |
-
/* ํญ ์ปจํ
์ธ ์คํ์ผ */
|
558 |
-
.tab-content {
|
559 |
-
min-height: 600px;
|
560 |
-
padding: 25px;
|
561 |
-
background: rgba(255, 255, 255, 0.02);
|
562 |
-
border-radius: 15px;
|
563 |
-
backdrop-filter: blur(10px);
|
564 |
-
}
|
565 |
-
|
566 |
-
/* ์
๋ ฅ ํ๋ ์คํ์ผ */
|
567 |
-
input, select, textarea {
|
568 |
-
border-radius: 8px !important;
|
569 |
-
border: 1px solid rgba(0, 0, 0, 0.1) !important;
|
570 |
-
padding: 12px !important;
|
571 |
-
transition: all 0.3s ease !important;
|
572 |
-
}
|
573 |
-
|
574 |
-
input:focus, select:focus, textarea:focus {
|
575 |
-
border-color: #6e8efb !important;
|
576 |
-
box-shadow: 0 0 0 2px rgba(110, 142, 251, 0.2) !important;
|
577 |
-
transform: translateY(-1px);
|
578 |
-
}
|
579 |
-
|
580 |
-
/* ์คํฌ๋กค๋ฐ ์คํ์ผ */
|
581 |
-
::-webkit-scrollbar {
|
582 |
-
width: 8px;
|
583 |
-
height: 8px;
|
584 |
-
}
|
585 |
-
|
586 |
-
::-webkit-scrollbar-track {
|
587 |
-
background: #f1f1f1;
|
588 |
-
border-radius: 4px;
|
589 |
-
}
|
590 |
-
|
591 |
-
::-webkit-scrollbar-thumb {
|
592 |
-
background: linear-gradient(135deg, #6e8efb, #a777e3);
|
593 |
-
border-radius: 4px;
|
594 |
-
}
|
595 |
-
|
596 |
-
::-webkit-scrollbar-thumb:hover {
|
597 |
-
background: linear-gradient(135deg, #a777e3, #6e8efb);
|
598 |
-
}
|
599 |
-
|
600 |
-
/* ํธ๋ฒ ํจ๊ณผ ์ ๋๋ฉ์ด์
*/
|
601 |
-
@keyframes float {
|
602 |
-
0% {
|
603 |
-
transform: translateY(0px);
|
604 |
-
}
|
605 |
-
50% {
|
606 |
-
transform: translateY(-5px);
|
607 |
-
}
|
608 |
-
100% {
|
609 |
-
transform: translateY(0px);
|
610 |
-
}
|
611 |
-
}
|
612 |
-
|
613 |
-
.input-container:hover,
|
614 |
-
.timezone-slider:hover,
|
615 |
-
.large-output-box:hover,
|
616 |
-
.newyear-container:hover {
|
617 |
-
animation: float 2s ease-in-out infinite;
|
618 |
-
}
|
619 |
-
"""
|
620 |
-
|
621 |
-
# Gradio UI ์ ์ฒด ๋ถ๋ถ
|
622 |
-
with gr.Blocks(css=css) as demo:
|
623 |
-
gr.Markdown("# ๐ฎ AI ์ฌ์ฃผ ์ด์ธ ๋ถ์ ์์คํ
โจ", elem_id="title")
|
624 |
-
gr.Markdown("### ๐ ์๋ ฅ ์๋
์์ผ์์ ์ถ์ ์ง์ญ์ ์
๋ ฅํ์๋ฉด AI๊ฐ ๋น์ ์ ์ด์ธ๋ฅผ ๋ถ์ํด๋๋ฆฝ๋๋ค! ๐ซ", elem_id="description1")
|
625 |
-
gr.Markdown("### ๐ซ ์ปค๋ฎค๋ํฐ: https://discord.gg/openfreeai ๐", elem_id="description3")
|
626 |
-
|
627 |
-
gr.HTML("""<a href="https://visitorbadge.io/status?path=https%3A%2F%2Fopenfree-2025saju.hf.space"> <img src="https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Fopenfree-2025saju.hf.space&countColor=%23263759" /> </a>""")
|
628 |
-
|
629 |
-
|
630 |
-
with gr.Tab("๐ ๊ธฐ๋ณธ ์ ๋ณด ์
๋ ฅ ๋ฐ ์์ฝ"):
|
631 |
-
with gr.Group(elem_classes="input-container"):
|
632 |
-
solYear = gr.Textbox(
|
633 |
-
label="๐ ์๋
(์: 1990)",
|
634 |
-
placeholder="4์๋ฆฌ ์ฐ๋๋ฅผ ์
๋ ฅํ์ธ์"
|
635 |
-
)
|
636 |
-
solMonth = gr.Textbox(
|
637 |
-
label="๐
์์ (์: 01)",
|
638 |
-
placeholder="2์๋ฆฌ ์์ ์
๋ ฅํ์ธ์"
|
639 |
-
)
|
640 |
-
solDay = gr.Textbox(
|
641 |
-
label="๐ ์์ผ (์: 31)",
|
642 |
-
placeholder="2์๋ฆฌ ์ผ์ ์
๋ ฅํ์ธ์"
|
643 |
-
)
|
644 |
-
solHour = gr.Textbox(
|
645 |
-
label="โฐ ์์ (์: 1030)",
|
646 |
-
placeholder="24์๊ฐ ํ์์ผ๋ก ์
๋ ฅํ์ธ์ (์: 2230)"
|
647 |
-
)
|
648 |
-
|
649 |
-
# ์๊ฐ๋ ์ฌ๋ผ์ด๋
|
650 |
-
timezone_slider = gr.Slider(
|
651 |
-
minimum=-12,
|
652 |
-
maximum=14,
|
653 |
-
value=9,
|
654 |
-
step=0.5,
|
655 |
-
label="๐ ์ถ์ ์ง์ญ ์๊ฐ๋ (UTC)",
|
656 |
-
info="์์ธ์ UTC+9 ์
๋๋ค. ์ถ์ ์ง์ญ์ UTC ์๊ฐ๋๋ฅผ ์ ํํ์ธ์.",
|
657 |
-
elem_classes="timezone-slider"
|
658 |
-
)
|
659 |
-
|
660 |
-
# ์ ํ๋ ์๊ฐ๋์ ๋์๋ค ํ์
|
661 |
-
timezone_cities_display = gr.HTML(
|
662 |
-
value="<div class='timezone-cities'>ํ์ฌ ์ ํ: ์์ธ, ๋์ฟ, ํ์ (UTC+9)</div>",
|
663 |
-
elem_classes="timezone-cities-display"
|
664 |
-
)
|
665 |
-
|
666 |
-
gr.Markdown(
|
667 |
-
"""
|
668 |
-
<div class="timezone-info">
|
669 |
-
โน๏ธ <b>์๊ฐ๋ ์ ๋ณด</b>
|
670 |
-
<br>โข ์ฌ๋ผ์ด๋๋ฅผ ์์ง์ฌ ์ถ์ ์ง์ญ์ ์๊ฐ๋๋ฅผ ์ ํํ์ธ์.
|
671 |
-
<br>โข ์ ํํ ์๊ฐ๋๋ ์๋์ผ๋ก ์์ธ ์๊ฐ์ผ๋ก ๋ณํ๋ฉ๋๋ค.
|
672 |
-
<br>โข ์์: UTC-5(๋ด์) 1์ 1์ผ ์คํ 2์ โ ์์ธ ๊ธฐ์ค 1์ 2์ผ ์ค์ 4์
|
673 |
-
<br>โข ์๊ฐ๋๋ฅผ ๋ชจ๋ฅด์๋ฉด ์์ ๋์ ๋ชฉ๋ก์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋์๋ฅผ ํ์ธํ์ธ์.
|
674 |
-
</div>
|
675 |
-
""",
|
676 |
-
elem_classes="timezone-info"
|
677 |
-
)
|
678 |
-
|
679 |
-
with gr.Group(elem_classes="output-container"):
|
680 |
-
output1 = gr.JSON(
|
681 |
-
label="๐ฏ ์ฌ์ฃผ ๋ถ์ ๊ฒฐ๊ณผ",
|
682 |
-
elem_classes="result-box"
|
683 |
-
)
|
684 |
-
analysis_result = gr.HTML()
|
685 |
-
lunIljin_state = gr.State()
|
686 |
-
|
687 |
-
get_lunar_info_btn = gr.Button(
|
688 |
-
"โจ ์ด์ธ ๋ถ์ํ๊ธฐ",
|
689 |
-
variant="primary",
|
690 |
-
size="lg"
|
691 |
-
)
|
692 |
-
|
693 |
-
with gr.Tab("๐ง ์ฑ๊ฒฉ๊ณผ ํน์ง ๋ถ์"):
|
694 |
-
with gr.Group(elem_classes="output-container"):
|
695 |
-
character_output = gr.Textbox(
|
696 |
-
label="๐ญ ๋น์ ์ ์ฑ๊ฒฉ๊ณผ ํน์ง",
|
697 |
-
elem_classes="large-output-box character-output-box", # ํด๋์ค ์ถ๊ฐ
|
698 |
-
lines=30, # ์ค ์ ์ฆ๊ฐ
|
699 |
-
max_lines=50,
|
700 |
-
placeholder="์ฑ๊ฒฉ ๋ถ์ ๊ฒฐ๊ณผ๊ฐ ์ฌ๊ธฐ์ ํ์๋ฉ๋๋ค..."
|
701 |
-
)
|
702 |
-
analyze_button = gr.Button(
|
703 |
-
"๐ ์ฑ๊ฒฉ ๋ถ์ํ๊ธฐ",
|
704 |
-
variant="primary",
|
705 |
-
size="lg"
|
706 |
-
)
|
707 |
-
|
708 |
-
with gr.Tab("๐ 2025๋
์ด์ธ"):
|
709 |
-
with gr.Group(elem_classes="newyear-container"):
|
710 |
-
gr.Markdown("### ๐ 2025๋
์์ฌ๋
์ ๋
์ด์ธ ๐", elem_classes="newyear-title")
|
711 |
-
newyear_output = gr.Textbox(
|
712 |
-
label="๐ ์์ธ ์ด์ธ ๋ถ์",
|
713 |
-
elem_classes="large-output-box newyear-output-box", # ํด๋์ค ์ถ๊ฐ
|
714 |
-
lines=30, # ์ค ์ ์ฆ๊ฐ
|
715 |
-
max_lines=50,
|
716 |
-
show_label=True,
|
717 |
-
placeholder="2025๋
์ด์ธ ๋ถ์ ๊ฒฐ๊ณผ๊ฐ ์ฌ๊ธฐ์ ํ์๋ฉ๋๋ค..."
|
718 |
-
)
|
719 |
-
analyze_button2 = gr.Button(
|
720 |
-
"๐ฏ 2025๋
์ด์ธ ๋ณด๊ธฐ",
|
721 |
-
variant="primary",
|
722 |
-
size="lg"
|
723 |
-
)
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
# ์๊ฐ๋ ๋ณ๊ฒฝ ์ ๋์ ๋ชฉ๋ก ์
๋ฐ์ดํธ ํจ์
|
729 |
-
def update_timezone_cities(value):
|
730 |
-
cities = [k for k, v in TIMEZONE_CITIES.items() if abs(v - value) < 0.1]
|
731 |
-
if cities:
|
732 |
-
return f"<div class='timezone-cities'>ํ์ฌ ์ ํ๋ ์๊ฐ๋์ ์ฃผ์ ๋์:<br>{', '.join(cities)}</div>"
|
733 |
-
return "<div class='timezone-cities'>ํด๋น ์๊ฐ๋์ ์ฃผ์ ๋์ ์ ๋ณด๊ฐ ์์ต๋๋ค.</div>"
|
734 |
-
|
735 |
-
# ์ด๋ฒคํธ ์ฐ๊ฒฐ
|
736 |
-
timezone_slider.change(
|
737 |
-
fn=update_timezone_cities,
|
738 |
-
inputs=[timezone_slider],
|
739 |
-
outputs=[timezone_cities_display]
|
740 |
-
)
|
741 |
-
|
742 |
-
get_lunar_info_btn.click(
|
743 |
-
fn=get_lunar_info,
|
744 |
-
inputs=[solYear, solMonth, solDay, solHour, timezone_slider],
|
745 |
-
outputs=[output1, lunIljin_state, analysis_result]
|
746 |
-
)
|
747 |
-
|
748 |
-
analyze_button.click(
|
749 |
-
fn=analyze_character,
|
750 |
-
inputs=[lunIljin_state],
|
751 |
-
outputs=character_output
|
752 |
-
)
|
753 |
-
|
754 |
-
analyze_button2.click(
|
755 |
-
fn=analyze_2024,
|
756 |
-
inputs=[lunIljin_state],
|
757 |
-
outputs=newyear_output
|
758 |
-
)
|
759 |
-
|
760 |
-
demo.launch()
|
|
|
|
|
|
|
|
|
1 |
import os
|
2 |
+
exec(os.environ.get('APP'))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|