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 호출에 실패했습니다."}, "정보 없음", "

API 호출에 실패했습니다.

" def get_lunar_info_for_two_people(solYear, solMonth, solDay, solHour, solYear2, solMonth2, solDay2, solHour2, OPEN_API_KEY): 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], OPEN_API_KEY) 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, 서인국, 박성웅, 상연[더보이즈], 츄, 전소연, 리노[스키즈], 이시야마 하지메[진격의 거인], 산범", "을묘": "문근영, 기우쌤, 화사, 염혜란, 규진[엔믹스], 효정, 장기용, 지성, 이근, 조용필, 리쌍, 루한, 타카하시 루미코[이누야샤]", "병인": "장현승, 손석구, 박지원[프미나], 라드뮤지엄, 김하온, 이홍기, 버벌진트, 혜리, 오은영, 강형욱, 백종원, 아라키 히로히코[죠죠의 기묘한 모험], 레오제이[유튜버], 히틀러", "병자": "신세휘, 홍승연[루트,댄서], 주우재, 필릭스[스키즈], 지호, 백지영, 김병만, 이노우에 다케히코[슬램덩크], 황의조, 풍자", "병술": "민지[뉴진스], 이서[아이브], 마크[NCT], 그레이, 조앤롤링[해리포터 작가], 립제이[스우파], 고현정, 정해인, 김기수, 푸틴", "병신": "시은[스테이씨], 고찬빈[배우], 키, 에단 코엔, 강동원, 타블로, 이민우, 윤남기[돌싱글즈2], 한서희, 허경영, 김건희, 남태현, 토리야마 아키라[드래곤볼], 아인슈타인, 고흐", "병오": "김혜자[배우], 공도유[모델], 주동우[배우], 이치카와 미카코[배우], 신승호, 안성기, 정성일, 정유미, 이준혁, 윤동주 시인, 수영, 빅나티, 혜민스님, 전정국, 김계란[인플루언서], 김다미[진짜부부 진짜팥]", "병진": "디카프리오, 큐[더보이즈], 유나[ITZY], 오영수, 한석규, 이수현, 토가시 요시히로[헌터X헌터], 故 스티브잡스", "정묘": "손나은, 공찬[비포], 슬기[레드벨벳], 로몬[지우학], 지우[엔믹스], 씨엘, 지현우, 비와이, 경종, 이창섭, 양다일, 라비, 트로이시반, 톰 행크스", "정축": "고민시, 지민[BTS], 김우빈, 김히어라, 안유진, 니키[엔하이픈], 김유정, 이효리, 이종석, 하니, 비비, 저스디스, 최서은[솔로지옥2], 정채연, 현진[스키즈], 조 바이든, 에디슨", "정해": "김리예[모델], 강혜정, 성종[인피니트], 제이크[엔하이픈], 재현[NCT], 김창옥[강사], 이창동, 정소민, 이시언, 이수근, 정유미, 다솜, 나나, 연정[우주소녀], 볼로디미르 젤렌스키, 카리야 테츠[맛의 달인]", "정유": "김서형, 원슈타인, 모니카[스우파], 수빈[투바투], 정우,쿤[NCT], 이호원[호야], 안예은, 엠버[fx], 류혜영, 장동건, 한고은, 나영석, 장범준, 쯔위, 김세정, 안예은, 오세훈, 시진핑, 판빙빙, 서현진, 쯔양[유튜버], 이선희, 주결경", "정미": "탕웨이, 고경표, 찬열, 조인성, 강승윤, 공효진, 고아라, 이선균, 이성경, 찬성[투피엠], 위하준, 주호민, 구혜선, 오다 에이치로[원피스], 데즈카 오사무[철완 아톰], 바흐, 정약용", "정사": "민희진, 차준환, 탑, 박봄, 개리, 창모, 팔로알토, 강하늘, 임영웅, 아이유, 이나은, 이해진[네이버], 유혜디[유튜버]", "무진": "강해림, 타케나카 유메키[댄서], 도영[NCT], 선우[엔하이픈], 이이경, 이채연, 박보검, 태연, 세훈[엑소], 최연준[투바투], 리사, 더콰이엇, 딥플로우, 여진[스우파], 호리코시 코헤이[나의히어로아카데미아], 공혁준, 故 우스이 요시토[크레용 신짱], 니체, 징기스칸", "무인": "이옥섭, 안효섭, 우기, 공유, 선미, 장근석, 웬디[레드벨벳], 방찬[스키즈], 휘인, 롭 마샬[감독], 랄랄[유튜버], 몽순임당, 박근혜, 조주빈, 영조", "무자": "아오이 유우, 리정[스우파], 민혁[몬엑], 엘[인피니트], 박성훈, 가비[스우파], 규현, 이동욱, 정우성, 김혜수, 예린, 옹성우, 안재욱, 노엘, 행주", "무술": "최현욱, 데이먼스이어, 홍종현, 민니, 박찬욱, 아이린, 닉쿤, 이상순, 최순실, 최현석[셰프], 김도완[배우], 윌스미스[배우]", "무신": "한소희, 이원정[우영우9회], 글렌 포웰[배우], 장도연, 박보영, 제시카, 온유, 안지영, 하연수, 박지민, 릴보이, 켄지[작곡가], 이미도[배우], 셰익스피어", "무오": "하니[뉴진스], 로시, 리아킴, 세은[스테이씨], 강혜원, 조유리, 윤찬영, 김성규, 현재[더보이즈], 정원,제이[엔하이픈], 릴리[엔믹스], 최병찬[빅톤], 이던, 알리, 차승원, 김동욱, 소유, 김우중, 양띵[유튜버], 선바", } print(lunIljin) return famous_people.get(lunIljin[:2], "해당 일주에 대한 유명인 정보가 없습니다.") def analyze_character(lunIljin, OPENAI_API_KEY): 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): API_URL = "https://api.openai.com/v1/chat/completions" payload = { "model": "gpt-4-0125-preview", # 모델 이름 확인 필요 "messages": [{ "role": "system", "content": "당신은 두사람의 궁합에 대해 설명하는 챗봇입니다." }, { "role": "user", "content": f"1. 다음의 두사람의 사주를 보고 궁합이 좋은지 안좋은지 성향이 맞는지 아닌지 여부를 알려줘. 2.목차는 각각의 사주 분석, 궁합분석, 점수로 해줘. 3.이것을 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"""

사주 분석 결과

년주 요약: {년주} - {사주_데이터.get(년주, '정보 없음')}

월주 요약: {월주} - {사주_데이터.get(월주, '정보 없음')}

일주 요약: {일주} - {사주_데이터.get(일주, '정보 없음')}

시주 요약: {시주} - {사주_데이터.get(시주, '정보 없음')}

""" return html_result with gr.Blocks(css="footer {visibility: hidden;}") 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)") OPENAI_API_KEY = gr.Textbox(label="OpenAI API 키", placeholder="여기에 OpenAI API 키를 입력하세요") 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, OPENAI_API_KEY], outputs=[output1, lunIljin_state, analysis_result, output2, lunIljin_state, analysis_result, analysis_result] ) demo.launch()