Spaces:
Runtime error
Runtime error
Upload app (16).py
Browse files- app (16).py +259 -0
app (16).py
ADDED
@@ -0,0 +1,259 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import requests
|
3 |
+
from xml.etree import ElementTree
|
4 |
+
import os
|
5 |
+
import sys
|
6 |
+
import json
|
7 |
+
|
8 |
+
# 환경 변수에서 OPENAI API 키 로드
|
9 |
+
OPENAI_API_KEY = "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"
|
10 |
+
|
11 |
+
def exception_handler(exception_type, exception, traceback):
|
12 |
+
print(f"{exception_type.__name__}: {exception}")
|
13 |
+
|
14 |
+
sys.excepthook = exception_handler
|
15 |
+
sys.tracebacklimit = 0
|
16 |
+
|
17 |
+
|
18 |
+
def get_chinese_hour(birth_hour):
|
19 |
+
hour = int(birth_hour[:2])
|
20 |
+
chinese_hours = ['자', '축', '인', '묘', '진', '사', '오', '미', '신', '유', '술', '해']
|
21 |
+
return chinese_hours[hour // 2 % 12]
|
22 |
+
|
23 |
+
def calculate_siju(birth_hour, lunIljin):
|
24 |
+
chinese_hour = get_chinese_hour(birth_hour) # 생시에 해당하는 지지
|
25 |
+
lunIljin_first = lunIljin[0] # 일주의 첫 글자
|
26 |
+
|
27 |
+
# 일주 첫 글자에 따른 시주 매핑
|
28 |
+
siju_mapping = {
|
29 |
+
|
30 |
+
('갑', '자'): '갑자(甲子)', ('기', '자'): '갑자(甲子)',
|
31 |
+
('을', '자'): '병자(丙子)', ('경', '자'): '병자(丙子)',
|
32 |
+
('병', '자'): '무자(戊子)', ('신', '자'): '무자(戊子)',
|
33 |
+
('정', '자'): '경자(庚子)', ('임', '자'): '경자(庚子)',
|
34 |
+
('무', '자'): '임자(壬子)', ('계', '자'): '임자(壬子)',
|
35 |
+
('갑', '축'): '을축(乙丑)', ('기', '축'): '을축(乙丑)',
|
36 |
+
('을', '축'): '정축(丁丑)', ('경', '축'): '정축(丁丑)',
|
37 |
+
('병', '축'): '기축(己丑)', ('신', '축'): '기축(己丑)',
|
38 |
+
('정', '축'): '신축(辛丑)', ('임', '축'): '신축(辛丑)',
|
39 |
+
('무', '축'): '계축(癸丑)', ('계', '축'): '계축(癸丑)',
|
40 |
+
('갑', '인'): '병인(丙寅)', ('기', '인'): '병인(丙寅)',
|
41 |
+
('을', '인'): '무인(戊寅)', ('경', '인'): '무인(戊寅)',
|
42 |
+
('병', '인'): '경인(庚寅)', ('신', '인'): '경인(庚寅)',
|
43 |
+
('정', '인'): '임인(壬寅)', ('임', '인'): '임인(壬寅)',
|
44 |
+
('무', '인'): '갑인(甲寅)', ('계', '인'): '갑인(甲寅)',
|
45 |
+
('갑', '묘'): '정묘(丁卯)', ('기', '묘'): '정묘(丁卯)',
|
46 |
+
('을', '묘'): '기묘(己卯)', ('경', '묘'): '기묘(己卯)',
|
47 |
+
('병', '묘'): '신묘(辛卯)', ('신', '묘'): '신묘(辛卯)',
|
48 |
+
('정', '묘'): '계묘(癸卯)', ('임', '묘'): '계묘(癸卯)',
|
49 |
+
('무', '묘'): '을묘(乙卯)', ('계', '묘'): '을묘(乙卯)',
|
50 |
+
('갑', '진'): '무진(戊辰)', ('기', '진'): '무진(戊辰)',
|
51 |
+
('을', '진'): '경진(庚辰)', ('경', '진'): '경진(庚辰)',
|
52 |
+
('병', '진'): '임진(壬辰)', ('신', '진'): '임진(壬辰)',
|
53 |
+
('정', '진'): '갑진(甲辰)', ('임', '진'): '갑진(甲辰)',
|
54 |
+
('무', '진'): '병진(丙辰)', ('계', '진'): '병진(丙辰)',
|
55 |
+
('갑', '사'): '기사(己巳)', ('기', '사'): '기사(己巳)',
|
56 |
+
('을', '사'): '신사(辛巳)', ('경', '사'): '신사(辛巳)',
|
57 |
+
('병', '사'): '계사(癸巳)', ('신', '사'): '계사(癸巳)',
|
58 |
+
('정', '사'): '을사(乙巳)', ('임', '사'): '을사(乙巳)',
|
59 |
+
('무', '사'): '정사(丁巳)', ('계', '사'): '정사(丁巳)',
|
60 |
+
('갑', '오'): '경오(庚午)', ('기', '오'): '경오(庚午)',
|
61 |
+
('을', '오'): '임오(壬午)', ('경', '오'): '임오(壬午)',
|
62 |
+
('병', '오'): '갑오(甲午)', ('신', '오'): '갑오(甲午)',
|
63 |
+
('정', '오'): '병오(丙午)', ('임', '오'): '병오(丙午)',
|
64 |
+
('무', '오'): '무오(戊午)', ('계', '오'): '무오(戊午)',
|
65 |
+
('갑', '미'): '임미(壬未)', ('기', '미'): '임미(壬未)',
|
66 |
+
('을', '미'): '갑미(甲未)', ('경', '미'): '갑미(甲未)',
|
67 |
+
('병', '미'): '병미(丙未)', ('신', '미'): '병미(丙未)',
|
68 |
+
('정', '미'): '무미(戊未)', ('임', '미'): '무미(戊未)',
|
69 |
+
('무', '미'): '경미(庚未)', ('계', '미'): '경미(庚未)',
|
70 |
+
('갑', '신'): '임신(壬申)', ('기', '신'): '임신(壬申)',
|
71 |
+
('을', '신'): '갑신(甲申)', ('경', '신'): '갑신(甲申)',
|
72 |
+
('병', '신'): '병신(丙申)', ('신', '신'): '병신(丙申)',
|
73 |
+
('정', '신'): '무신(戊申)', ('임', '신'): '무신(戊申)',
|
74 |
+
('무', '신'): '경신(庚申)', ('계', '신'): '경신(庚申)',
|
75 |
+
('갑', '유'): '계유(癸酉)', ('기', '유'): '계유(癸酉)',
|
76 |
+
('을', '유'): '을유(乙酉)', ('경', '유'): '을유(乙酉)',
|
77 |
+
('병', '유'): '정유(丁酉)', ('신', '유'): '정유(丁酉)',
|
78 |
+
('정', '유'): '기유(己酉)', ('임', '유'): '기유(己酉)',
|
79 |
+
('무', '유'): '신유(辛酉)', ('계', '유'): '신유(辛酉)',
|
80 |
+
('갑', '술'): '갑술(甲戌) ', ('기', '술'): '갑술(甲戌)',
|
81 |
+
('을', '술'): '병술(丙戌) ', ('경', '술'): '병술(丙戌)',
|
82 |
+
('병', '술'): '무술(戊戌) ', ('신', '술'): '무술(戊戌)',
|
83 |
+
('정', '술'): '경술(庚戌) ', ('임', '술'): '경술(庚戌)',
|
84 |
+
('무', '술'): '임술(壬戌) ', ('계', '술'): '임술(壬戌)',
|
85 |
+
('갑', '해'): '을해(乙亥)', ('기', '해'): '을해(乙亥)',
|
86 |
+
('을', '해'): '정해(丁亥)', ('경', '해'): '정해(丁亥)',
|
87 |
+
('병', '해'): '기해(己亥)', ('신', '해'): '기해(己亥)',
|
88 |
+
('정', '해'): '신해(辛亥)', ('임', '해'): '신해(辛亥)',
|
89 |
+
('무', '해'): '계해(癸亥)', ('계', '해'): '계해(癸亥)',
|
90 |
+
}
|
91 |
+
|
92 |
+
|
93 |
+
# 시주 계산
|
94 |
+
siju_key = (lunIljin_first, chinese_hour)
|
95 |
+
siju = siju_mapping.get(siju_key)
|
96 |
+
if not siju:
|
97 |
+
# 일주와 지지 조합에 대한 매핑이 없는 경우의 처리
|
98 |
+
siju = f"일주 '{lunIljin_first}'와 지지 '{chinese_hour}'에 해당하는 시주를 찾을 수 없습니다."
|
99 |
+
|
100 |
+
return siju
|
101 |
+
|
102 |
+
def get_lunar_info(solYear, solMonth, solDay, solHour):
|
103 |
+
base_url = "http://apis.data.go.kr/B090041/openapi/service/LrsrCldInfoService/getLunCalInfo"
|
104 |
+
service_key = "EuBjt%2B2t0KzYt5Ri%2Bzs56oymt9kHJ8uPIOV7m6UMKnOV8cpwj02EiRqMEudX%2F%2FVTKdMnwaLH0igRwY57YUplEQ%3D%3D"
|
105 |
+
url = f"{base_url}?solYear={solYear}&solMonth={solMonth}&solDay={solDay}&ServiceKey={service_key}"
|
106 |
+
|
107 |
+
|
108 |
+
response = requests.get(url)
|
109 |
+
if response.status_code == 200:
|
110 |
+
root = ElementTree.fromstring(response.content)
|
111 |
+
|
112 |
+
lunIljin = root.find(".//lunIljin").text if root.find(".//lunIljin") is not None else "정보 없음"
|
113 |
+
lunWolgeon = root.find(".//lunWolgeon").text if root.find(".//lunWolgeon") is not None else "정보 없음"
|
114 |
+
lunSecha = root.find(".//lunSecha").text if root.find(".//lunSecha") is not None else "정보 없음"
|
115 |
+
|
116 |
+
siju = calculate_siju(solHour, lunIljin)
|
117 |
+
|
118 |
+
# 사주 분석 결과를 HTML 형식으로 생성합니다.
|
119 |
+
analysis_html = 사주_분석(lunSecha, lunWolgeon, lunIljin, siju)
|
120 |
+
|
121 |
+
# JSON 결과, 일주 State, 그리고 HTML 분석 결과를 반환합니다.
|
122 |
+
return {
|
123 |
+
"년주": lunSecha,
|
124 |
+
"월주": lunWolgeon,
|
125 |
+
"일주": lunIljin,
|
126 |
+
"시주": siju
|
127 |
+
}, lunIljin, analysis_html
|
128 |
+
else:
|
129 |
+
return {"Error": "API 호출에 실패했습니다."}, "정보 없음", "<p>API 호출에 실패했습니다.</p>"
|
130 |
+
|
131 |
+
# 성격과 특징을 분석하는 함수 수정 (API 키 인자 추가)
|
132 |
+
def analyze_character(lunIljin, OPENAI_API_KEY):
|
133 |
+
API_URL = "https://api.openai.com/v1/chat/completions"
|
134 |
+
payload = {
|
135 |
+
"model": "gpt-4-0125-preview",
|
136 |
+
"prompt": f"일주 '{lunIljin}'에 대한 성격과 특징을 설명해주세요.",
|
137 |
+
"temperature": 0.7,
|
138 |
+
"max_tokens": 150,
|
139 |
+
"top_p": 1.0,
|
140 |
+
"frequency_penalty": 0.0,
|
141 |
+
"presence_penalty": 0.0
|
142 |
+
}
|
143 |
+
headers = {
|
144 |
+
"Content-Type": "application/json",
|
145 |
+
"Authorization": f"Bearer {OPENAI_API_KEY}"
|
146 |
+
}
|
147 |
+
response = requests.post(API_URL, headers=headers, json=payload)
|
148 |
+
if response.status_code == 200:
|
149 |
+
data = response.json()
|
150 |
+
return data["choices"][0]["text"]
|
151 |
+
else:
|
152 |
+
return f"오류가 발생했습니다. 상태 코드: {response.status_code}"
|
153 |
+
|
154 |
+
|
155 |
+
# 사주 분석 데이터 예시 (간소화된 버전)
|
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 |
+
def 사주_분석(년주, 월주, 일주, 시주):
|
221 |
+
# 각 주에 대한 설명을 HTML 형식으로 반환
|
222 |
+
html_result = f"""
|
223 |
+
<div>
|
224 |
+
<h4>사주 분석 결과</h4>
|
225 |
+
<p><b>년주 요약:</b> {년주} - {사주_데이터.get(년주, '정보 없음')}</p>
|
226 |
+
<p><b>월주 요약:</b> {월주} - {사주_데이터.get(월주, '정보 없음')}</p>
|
227 |
+
<p><b>일주 요약:</b> {일주} - {사주_데이터.get(일주, '정보 없음')}</p>
|
228 |
+
<p><b>시주 요약:</b> {시주} - {사주_데이터.get(시주, '정보 없음')}</p>
|
229 |
+
</div>
|
230 |
+
"""
|
231 |
+
return html_result
|
232 |
+
|
233 |
+
with gr.Blocks() as demo:
|
234 |
+
with gr.Tab("AI 사주 운세 분석"):
|
235 |
+
solYear = gr.Textbox(label="생년(예: 1990)")
|
236 |
+
solMonth = gr.Textbox(label="생월(예: 01)")
|
237 |
+
solDay = gr.Textbox(label="생일(예: 31)")
|
238 |
+
solHour = gr.Textbox(label="생시(예시: 1030)", placeholder="시간을 24시간 형식으로 입력하세요 (예: 2230)")
|
239 |
+
output1 = gr.JSON(label="결과")
|
240 |
+
analysis_result = gr.HTML() # 사주 분석 결과를 출력할 HTML 컴포넌트 먼저 선언
|
241 |
+
# 일주를 저장할 State 추가
|
242 |
+
lunIljin_state = gr.State()
|
243 |
+
get_lunar_info_btn = gr.Button("분석하기")
|
244 |
+
|
245 |
+
# 버튼 클릭 이벤트 설정, outputs 순서에 맞게 수정
|
246 |
+
get_lunar_info_btn.click(
|
247 |
+
fn=get_lunar_info,
|
248 |
+
inputs=[solYear, solMonth, solDay, solHour],
|
249 |
+
outputs=[output1, lunIljin_state, analysis_result]
|
250 |
+
)
|
251 |
+
|
252 |
+
with gr.Tab("나의 성격과 특징 분석"):
|
253 |
+
OPENAI_API_KEY_input = gr.Textbox(label="OpenAI API 키", placeholder="여기에 OpenAI API 키를 입력하세요")
|
254 |
+
character_output = gr.Textbox(label="성격과 특징")
|
255 |
+
analyze_button = gr.Button("분석하기")
|
256 |
+
# analyze_character 함수를 호출할 때 lunIljin_state와 OPENAI_API_KEY_input를 입력으로 사용
|
257 |
+
analyze_button.click(fn=analyze_character, inputs=[lunIljin_state, OPENAI_API_KEY_input], outputs=character_output)
|
258 |
+
|
259 |
+
demo.launch()
|