Spaces:
Runtime error
Runtime error
File size: 26,361 Bytes
f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 27ff44d 77f7db7 27ff44d 77f7db7 27ff44d 77f7db7 d98fe87 f2c3ad0 d98fe87 f2c3ad0 d98fe87 f2c3ad0 e58b3a5 f2c3ad0 d98fe87 e58b3a5 d98fe87 77f7db7 f2c3ad0 77f7db7 f2c3ad0 cd4994b f2c3ad0 77f7db7 f2c3ad0 cd4994b f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 f2c3ad0 77f7db7 412d5ed 77f7db7 f2c3ad0 77f7db7 31aba0f 77f7db7 31aba0f cd4994b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 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 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 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 347 348 349 350 351 352 353 354 355 356 357 358 359 360 |
import gradio as gr
import requests
from xml.etree import ElementTree
import os
import sys
import json
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):
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={solYear}&solMonth={solMonth}&solDay={solDay}&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(solHour, lunIljin)
# 사주 분석 결과를 HTML 형식으로 생성합니다.
analysis_html = 사주_분석(lunSecha, lunWolgeon, lunIljin, siju)
# JSON 결과, 일주 State, 그리고 HTML 분석 결과를 반환합니다.
return {
"년주": lunSecha,
"월주": lunWolgeon,
"일주": lunIljin,
"시주": siju
}, lunIljin, analysis_html
else:
return {"Error": "API 호출에 실패했습니다."}, "정보 없음", "<p>API 호출에 실패했습니다.</p>"
def get_lunar_info_for_two_people(solYear, solMonth, solDay, solHour, solYear2, solMonth2, solDay2, solHour2):
print(solYear, solMonth, solDay, solHour, solYear2, solMonth2, solDay2, solHour2)
rst1 = get_lunar_info(solYear, solMonth, solDay, solHour)
rst2 = get_lunar_info(solYear2, solMonth2, solDay2, solHour2)
print(rst1[0], rst1[1], rst1[2], rst2[0], rst2[1], rst2[2])
#궁합
# 두 사람의 궁합 분석
compatibility = analyze_character_two(rst1[1], rst2[1])
return rst1[0], rst1[1], rst1[2], rst2[0], rst2[1], rst2[2], compatibility
# B 데이터를 활용하는 함수 추가
def get_famous_people(lunIljin):
famous_people = {
"갑자": "박수주[모델], 윈터, 닝닝, 이재용, 빈지노, 김재환[워너원], 설윤[엔믹스], 음문석, 조조",
"갑술": "안소희, 장기하, 송하영[프미나], 지효[트와], 니엘, 케라 에이코[아따맘마], 이옳이[유튜버], 엠씨몽, 故 이소룡",
"갑신": "김경욱[다나카], 지지 하디드, 로제, 예지[ITZY], 박지후, 바로[비포], 설아[우주소녀], 한승우, 최예나, 조진웅, 유해진, 황정민, 다니엘 래드클리프[해리포터], 최소라[모델], 수샤샤[유튜버]",
"갑오": "조이현, 진구, 이기광, 민아, 설현, 텐[NCT], 김종민, 우원재, 기리보이, 양홍원, 테슬라, 후루다테 하루이치[하이큐]",
"갑진": "해린[뉴진스], 허윤진, 리즈[아이브], 한선화, 태현[투바투], 지성[NCT], 박재범, 송혜교, 김정미[가수], 아라카와 히로무[강철의 연금술사]",
"갑인": "김용지[배우], 카즈하, 에릭,케빈[더보이즈], 휴닝카이[투바투], 비니, 진, 이광수, 박신혜, 피오, 엠마[스우파], 배리 페퍼[배우], 쿠보 타이토[블리치], 김가람[탈퇴], 故 설리",
"을축": "새소년, 다니엘[뉴진스], 사쿠라, 과천꿀수박[댄서], 주헌[몬엑], 윤두준, 소지섭, 신예은, 김대명, 지니[탈퇴], 박화요비, 유영진[작곡가], 故 박경리[토지 작가]",
"을해": "김은숙[작가], 하비에르 바르뎀, 수민[스테이씨], 범규[투바투], 문재인, 홍준표, 호날두, 제이홉, 유연석, 한[스키즈], 이토 준지, 임라라[엔조이커플]",
"을유": "김민규[배우], 김건우[더글로리], 슬리피, 김남길, 김윤석, 손흥민, 이재명, 마동석, 지호지방시",
"을미": "신세경, 브래드 피트, 가을[아이브], 안철수, 산들[비포], 손석희, 뷔, 윤아, 해찬[NCT], 리안[스우파], 효진초이[스우파], 창빈[스키즈], 이수만, 왕가위, 아오야마 고쇼[코난], 故 윤정희[배우]",
"을사": "이유미, 권현빈, 박서준, GD, 서인국, 박성웅, 상연[더보이즈], 츄, 전소연, 리노[스키즈], 이시야마 하지메[진격의 거인], 산범",
"을묘": "문근영, 기우쌤, 화사, 염혜란, 규진[엔믹스], 효정, 장기용, 지성, 이근, 조용필, 리쌍, 루한, 타카하시 루미코[이누야샤]",
"병인": "장현승, 손석구, 박지원[프미나], 라드뮤지엄, 김하온, 이홍기, 버벌진트, 혜리, 오은영, 강형욱, 백종원, 아라키 히로히코[죠죠의 기묘한 모험], 레오제이[유튜버], 히틀러",
"병자": "신세휘, 홍승연[루트,댄서], 주우재, 필릭스[스키즈], 지호, 백지영, 김병만, 이노우에 다케히코[슬램덩크], 황의조, 풍자",
"무신": "한소희, 이원정[우영우9회], 글렌 포웰[배우], 장도연, 박보영, 제시카, 온유, 안지영, 하연수, 박지민, 릴보이, 켄지[작곡가], 이미도[배우], 셰익스피어",
"병신": "시은[스테이씨], 고찬빈[배우], 키, 에단 코엔, 강동원, 타블로, 이민우, 윤남기[돌싱글즈2], 한서희, 허경영, 김건희, 남태현, 토리야마 아키라[드래곤볼], 아인슈타인, 고흐",
}
print(lunIljin)
return famous_people.get(lunIljin[:2], "해당 일주에 대한 유명인 정보가 없습니다.")
def analyze_character(lunIljin, OPENAI_API_KEY="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"):
API_URL = "https://api.openai.com/v1/chat/completions"
payload = {
"model": "gpt-4-0125-preview", # 모델 이름 확인 필요
"messages": [{
"role": "system",
"content": "당신은 사주 팔자에 대해 설명하는 챗봇입니다."
}, {
"role": "user",
"content": f"일주 '{lunIljin}'에 대한 성격과 특징을 설명해주세요."
}],
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {OPENAI_API_KEY}"
}
response = requests.post(API_URL, headers=headers, json=payload)
if response.status_code == 200:
data = response.json()
# 대화형 API 응답에서 적절한 메시지 추출 및 유명인 이름 반환
return data["choices"][0]["message"]["content"], get_famous_people(lunIljin)
else:
# 오류 메시지 개선
return f"오류가 발생했습니다. 상태 코드: {response.status_code}, 메시지: {response.json().get('error', {}).get('message', 'Unknown error')}", ""
def analyze_character_two(lunIljin, lunIljin2, OPENAI_API_KEY="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"):
API_URL = "https://api.openai.com/v1/chat/completions"
payload = {
"model": "gpt-4-0125-preview", # 모델 이름 확인 필요
"messages": [{
"role": "system",
"content": "당신은 두사람의 궁합에 대해 설명하는 챗봇입니다."
}, {
"role": "user",
"content": f"다음의 두사람의 사주를 보고 궁합이 좋은지 안좋은지 성향이 맞는지 아닌지 여부를 알려주고 이것을 100% 대비 비율도 추가해서 표현해주세요 '{lunIljin}', '{lunIljin2}'"
}],
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {OPENAI_API_KEY}"
}
response = requests.post(API_URL, headers=headers, json=payload)
if response.status_code == 200:
data = response.json()
# 대화형 API 응답에서 적절한 메시지 추출 및 유명인 이름 반환
return data["choices"][0]["message"]["content"]
else:
# 오류 메시지 개선
return f"오류가 발생했습니다. 상태 코드: {response.status_code}, 메시지: {response.json().get('error', {}).get('message', 'Unknown error')}", ""
# 사주 분석 데이터 예시 (간소화된 버전)
사주_데이터 = {
'갑자(甲子)': '새로운 시작의 상징, 리더십과 독립성이 특징이며, 호쾌하고 성실한 특성을 지닌다. ',
'을축(乙丑)': '인내심이 매우 강하며, 물질적 성취를 중요시하고 자상한 면모를 갖춘 사람이다. ',
'병인(丙寅)': '열정적이고 모험을 즐기며, 창의력이 뛰어나고 혁신적인 아이디어를 가진다. ',
'정묘(丁卯)': '예술적 감각이 뛰어나고 섬세한 성격으로, 관계에서의 충실함과 애정이 깊다. ',
'무진(戊辰)': '실용적이며 안정적인 기반을 중시하고, 꾸준한 노력을 통해 성장하는 타입이다. ',
'기사(己巳)': '유연성과 적응력이 뛰어나며, 다양한 상황에서도 잘 대처하는 능력을 가진다. ',
'경오(庚午)': '정의와 명예를 중시하며, 성실하고 진취적인 태도로 주변의 존경을 받는다. ',
'신미(辛未)': '세심하고 꼼꼼한 성격으로 완벽을 추구하며, 주변 사람들로부터 신뢰를 얻는다. ',
'임신(壬申)': '지혜와 균형이 잘 조화된 성격으로, 깊은 통찰력과 함께 인생을 이해하는 능력이 있다. ',
'계유(癸酉)': '외교적이고 조화를 중시하는 성향으로, 타인과의 관계에서 유연하고 다정다감하다. ',
'갑술(甲戌)': '미소를 띠며 주변 사람들에게 잘하고, 타고난 영업 능력으로 성공을 이끈다. ',
'을해(乙亥)': '시원시원한 인상과 모범생 같은 스타일로, 능력과 욕심을 겸비한 사람이다. ',
'병자(丙子)': '호방하고 까다롭지만, 일을 확실히 처리하고 은근한 매력을 가지고 있다. ',
'정축(丁丑)': '예술적 감각이 뛰어나며 따뜻하고 베풀 줄 아는 인간미 넘치는 사람이다. ',
'무인(戊寅)': '모험을 즐기고 자신감이 넘치며, 세상을 발아래 두고 싶어하는 야심 찬 사람이다. ',
'기묘(己卯)': '세심하고 예술적인 기질이 있으며, 깊은 생각과 함께 사람들과 조화롭게 지낸다. ',
'경진(庚辰)': '안정적이고 해학적인 성격을 가지며, 주변 사람들과의 조화를 중시한다. ',
'신사(辛巳)': '멋과 매력을 삶의 중심에 두며, 강한 사회적 능력을 지닌 사람이다. ',
'임오(壬午)': '지적 능력이 뛰어나고 심오한 생각을 하는, 깊이 있는 인물이다. ',
'계미(癸未)': '자신과 타인에게 친절하고 귀여운 면모를 지닌 사람으로, 사회적 상호작용에서 따스함과 배려를 보여준다. 자신의 사람들에게 잘 맞춰주며, 화합을 중요시한다. ',
'갑신(甲申)': '내면이 변화무쌍하나 겉으로는 드러내지 않고, 강인한 면모로 어려움을 극복한다.',
'을유(乙酉)': '타인의 비밀을 잘 지켜주는 신뢰할 수 있는 사람으로, 집중력과 생활력이 강하다. ',
'병술(丙戌)': '관대하면서도 세세한 부분에 까다로울 수 있으며, 생활력이 강하고 현명하다. ',
'정해(丁亥)': '포용력이 뛰어나고 삶에 대한 애착이 강하며, 진심으로 주변을 챙긴다. ',
'무자(戊子)': '신비로운 분위기와 재물을 중시하는 성향이 있으며, 속내를 잘 드러내지 않는다. ',
'기축(己丑)': '강인한 내면을 가지고 있으며, 자신만의 길을 걸어가는 확고한 신념을 지닌다. ',
'경인(庚寅)': '큰 포부와 국제적인 활동을 추구하며, 사업에서 큰 성공을 꿈꾸는 사람이다. ',
'신묘(辛卯)': '깐깐하고 날카로울 수 있지만, 기본적으로 마음이 착한 사람이다. ',
'임진(壬辰)': '인내심이 강하고, 한 번 마음먹은 일은 끝까지 밀고 나가는 강인한 의지의 사람이다. ',
'계사(癸巳)': '적절한 타이밍과 상황 판단력으로 눈에 띄는 성취를 이루는 사람이다. 똑똑하고 상황에 맞는 최선의 결정을 내릴 줄 알며, 삶에서의 여러 기회를 잘 살린다. ',
'갑오(甲午)': '조금 조급하고 실수할 수 있지만, 낭만적이고 쾌활하여 주변을 밝게 만든다.',
'을미(乙未)': '애정이 많고 끈기가 있으며, 명확한 주관과 함께 사물의 이치를 잘 파악한다. ',
'병신(丙申)': '세련되고 맛과 멋을 추구하며, 사교적이면서도 내면의 갈등을 가진 사람이다. ',
'정유(丁酉)': '감각적이고 재치 있는 성격으로, 주변 사람들에게 즐거움을 주는 사람이다. ',
'무술(戊戌)': '실속을 중시하고 소박한 삶을 추구하며, 담백한 매력을 가진 실리주의자이다. ',
'기해(己亥)': '온화하고 명랑하며, 의지가 굳건하나 때로는 망설이는 경향이 있다. ',
'경자(庚子)': '차분하고 결단력이 있는 반면, 일의 장단점을 신중하게 판단하는 사람이다. ',
'신축(辛丑)': '겸손함과 함께 타인을 잘 판단하는 능력을 가진, 인간 관계에서의 조율자이다. ',
'임인(壬寅)': '안정감을 추구하며, 즐거움과 재미를 중요시하는 편안한 성격의 소유자이다. ',
'계묘(癸卯)': '친절하고 사람들에게 잘 맞춰주는 성격으로, 대단히 착하고 상대방을 편안하게 만드는 능력이 있다. 그의 존재만으로도 주변에 긍정적인 분위기를 만들어낸다. ',
'갑진(甲辰)': '호쾌한 성격 성실하면서 애교는 없는 무뚝뚝한 상남자 상여자 ',
'을사(乙巳)': '사람을 끌어당기는 매력이 넘치고, 어디서나 밝은 에너지를 발산한다. 다재다능하고 유연한 사고를 가지며, 새로운 만남과 경험에서 즐거움을 찾는다. ',
'병오(丙午)': '열정적이고 저돌적인 성격으로 주변을 이끄는 리더십과 솔선수범하는 태도를 지닌다. ',
'정미(丁未)': '부드럽고 자상하며 열정적인 성격으로, 다양한 사람들과 잘 어울린다. ',
'무신(戊申)': '따뜻한사람을 끌어당기는 매력이 넘치고, 어디서나 밝은 에너지를 발산한다. 다재다능하고 유연한 사고를 가지며, 새로운 만남과 경험에서 즐거움을 찾는다. 마음과 섬세한 감성을 가지고 있으며, 넓은 포용력으로 주변을 감싼다. ',
'기유(己酉)': '대담하고 삶에 대한 열정이 넘치지만, 때로는 우유부단한 모습을 보일 수 있다. ',
'경술(庚戌)': '냉정하고 신사적인 태도로 타인을 돕는 것을 즐기며, 때로는 까탈스러울 수 있다. ',
'신해(辛亥)': '자존심이 강하고 명확한 취향을 가지며, 낭만적인 감성을 소유한 사람이다. ',
'임자(壬子)': '조용하지만, 매력적이고 상황에 따라 강한 면모를 드러내는 신비한 인물이다. ',
'계축(癸丑)': '겉보기엔 차분하지만 내면에는 강한 의지와 신념을 지닌 사람으로, 정말 사람이 좋다는 느낌을 주는 따뜻함과 균형 잡힌 성격을 갖고 있다. 주변 사람들에게 믿음직스러운 존재다. ',
'갑인(甲寅)': '리더십이 있고 성정이 바르고 호방하다. 조직에 순응적인 사람이다.',
'을묘(乙卯)': '내면의 강인함에도 불구하고 부드러운 사교성으로 주변 사람들과 쉽게 어울린다. 직선적인 소통 방식 뒤에는 스며드는 영향력이 있어, 많은 이들에게 긍정적인 에너지를 전달한다. ',
'병진(丙辰)': '깔끔하고 단정한 외모에 도덕적이며, 상황을 교묘하게 조정하는 능력을 가진다. ',
'정사(丁巳)': '경쟁을 즐기고 다른 사람을 압도하려는 강한 의지와 사교적인 능력을 가졌다. ',
'무오(戊午)': '결코 굴하지 않는 정신력과 사업에서의 성공을 꿈꾸는, 야망 있는 사람이다. ',
'기미(己未)': '봉사정신이 투철하고 공동체 의식이 강하며, 공익을 위해 적극적으로 기여한다. ',
'경신(庚申)': '활동적이고 밖으로의 활동을 즐기며, 새로운 것에 도전하는 것을 두려워하지 않는다. ',
'신유(辛酉)': '고상하고 타인을 위하는 마음이 강하지만, 감정이 격해질 때는 상당히 무서울 수 있다. ',
'임술(壬戌)': '고집이 있지만 가족과 타인을 위해 헌신적으로 노력하는 강한 면모를 지닌다. ',
'계해(癸亥)': '그저 빠져들게 만드는 깊은 내면의 매력을 가진 사람으로, 의외의 깊은 생각과 감성을 지니고 있다. 자신만의 세계가 풍부해 타인과의 교류에서도 독특한 관점을 제공한다. ',
}
def 사주_분석(년주, 월주, 일주, 시주):
# 각 주에 대한 설명을 HTML 형식으로 반환
html_result = f"""
<div>
<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
with gr.Blocks() as demo:
solYear =""
solMonth = ""
solDay = ""
solHour = ""
with gr.Tab("AI 사주 운세 분석"):
solYear = gr.Textbox(label="생년(예: 1990)")
solMonth = gr.Textbox(label="생월(예: 01)")
solDay = gr.Textbox(label="생일(예: 31)")
solHour = gr.Textbox(label="생시(예시: 1030)", placeholder="시간을 24시간 형식으로 입력하세요 (예: 2230)")
output1 = gr.JSON(label="결과")
analysis_result = gr.HTML() # 사주 분석 결과를 출력할 HTML 컴포넌트
lunIljin_state = gr.State() # 일주를 저장할 State
get_lunar_info_btn = gr.Button("분석하기")
get_lunar_info_btn.click(
fn=get_lunar_info,
inputs=[solYear, solMonth, solDay, solHour],
outputs=[output1, lunIljin_state, analysis_result]
)
with gr.Tab("나의 성격과 특징 분석"):
OPENAI_API_KEY_input = gr.Textbox(label="OpenAI API 키", placeholder="여기에 OpenAI API 키를 입력하세요")
character_output = gr.Textbox(label="성격과 특징")
celebrity_output = gr.Textbox(label="유명인 이름")
analyze_button = gr.Button("분석하기")
analyze_button.click(fn=analyze_character, inputs=[lunIljin_state, OPENAI_API_KEY_input],
outputs=[character_output, celebrity_output])
with gr.Tab("궁합"):
solYear = gr.Textbox(label="생년(예: 1990)")
solMonth = gr.Textbox(label="생월(예: 01)")
solDay = gr.Textbox(label="생일(예: 31)")
solHour = gr.Textbox(label="생시(예시: 1030)", placeholder="시간을 24시간 형식으로 입력하세요 (예: 2230)")
output1 = gr.JSON(label="결과")
solYear2 = gr.Textbox(label="생년(예: 1990)")
solMonth2 = gr.Textbox(label="생월(예: 01)")
solDay2 = gr.Textbox(label="생일(예: 31)")
solHour2 = gr.Textbox(label="생시(예시: 1030)", placeholder="시간을 24시간 형식으로 입력하세요 (예: 2230)")
output2 = gr.JSON(label="결과")
analysis_result = gr.HTML() # 사주 분석 결과를 출력할 HTML 컴포넌트
lunIljin_state = gr.State() # 일주를 저장할 State
get_lunar_info_btn = gr.Button("분석하기")
get_lunar_info_btn.click(
fn=get_lunar_info_for_two_people,
inputs=[solYear, solMonth, solDay, solHour, solYear2, solMonth2, solDay2, solHour2],
outputs=[output1, lunIljin_state, analysis_result, output2, lunIljin_state, analysis_result, analysis_result]
)
demo.launch() |