ssboost commited on
Commit
81241c7
ยท
verified ยท
1 Parent(s): 992458d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +345 -304
app.py CHANGED
@@ -1,138 +1,113 @@
1
- import discord
2
- import logging
3
- import os
4
- from huggingface_hub import InferenceClient
5
- import asyncio
6
- import subprocess
7
  import requests
8
  from xml.etree import ElementTree
9
- import sys
 
 
 
10
  import json
11
- import textwrap
12
- import asyncio
13
-
14
- # ๋กœ๊น… ์„ค์ •
15
- logging.basicConfig(level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(name)s: %(message)s', handlers=[logging.StreamHandler()])
16
 
17
- intents = discord.Intents.default()
18
- intents.message_content = True
19
- intents.messages = True
20
- intents.guilds = True
21
- intents.guild_messages = True
22
 
23
-
24
- # ์ถ”๋ก  API ํด๋ผ์ด์–ธํŠธ ์„ค์ •
25
- hf_client = InferenceClient("CohereForAI/c4ai-command-r-plus", token=os.getenv("HF_TOKEN"))
26
 
27
  def analyze_fortune(result, analysis_markdown, openai_analysis):
 
28
  try:
29
- system_prompt = "๋„ˆ๋Š” ์‚ฌ์ฃผ ์šด์„ธ ๋ช…๋ฆฌํ•™ ์ „๋ฌธ๊ฐ€ ์—ญํ• ์ด๋‹ค. ๋„ˆ๋Š” ์นœ์ ˆํ•˜๊ณ  ์ž์„ธํ•˜๊ฒŒ ๋‹ต๋ณ€์„ ํ•˜์—ฌ์•ผ ํ•œ๋‹ค."
30
-
31
- response = hf_client.text_generation(
32
- f"{system_prompt}\n\n{user_prompt}",
33
- max_new_tokens=500,
34
- temperature=0.7,
35
- top_k=50,
36
- top_p=0.95,
37
- repetition_penalty=1.2
 
 
38
  )
39
 
40
- return response
41
- except NameError:
42
- # user_prompt๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์ฒ˜๋ฆฌ
43
- return "์‚ฌ์ฃผ ์šด์„ธ ๋ถ„์„์€ ์ฐธ๊ณ  ์ž๋ฃŒ๋กœ๋งŒ ํ™œ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค."
44
  except Exception as e:
45
- # ๊ธฐํƒ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
46
  return f"์šด์„ธ ๋ถ„์„ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}"
47
-
48
-
49
- # ํŠน์ • ์ฑ„๋„ ID
50
- SPECIFIC_CHANNEL_ID = int(os.getenv("DISCORD_CHANNEL_ID"))
51
-
52
- # ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ €์žฅํ•  ์ „์—ญ ๋ณ€์ˆ˜
53
- conversation_history = []
54
-
55
- def exception_handler(exception_type, exception, traceback):
56
- print(f"{exception_type.__name__}: {exception}")
57
-
58
- sys.excepthook = exception_handler
59
- sys.tracebacklimit = 0
60
 
61
  def get_chinese_hour(birth_hour):
 
62
  hour = int(birth_hour[:2])
63
  chinese_hours = ['์ž', '์ถ•', '์ธ', '๋ฌ˜', '์ง„', '์‚ฌ', '์˜ค', '๋ฏธ', '์‹ ', '์œ ', '์ˆ ', 'ํ•ด']
64
  return chinese_hours[hour // 2 % 12]
65
 
66
  def calculate_siju(birth_hour, lunIljin):
 
67
  chinese_hour = get_chinese_hour(birth_hour)
68
  lunIljin_first = lunIljin[0]
69
 
70
  # ์ผ์ฃผ ์ฒซ ๊ธ€์ž์— ๋”ฐ๋ฅธ ์‹œ์ฃผ ๋งคํ•‘
71
  siju_mapping = {
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
  siju_key = (lunIljin_first, chinese_hour)
137
  siju = siju_mapping.get(siju_key)
138
  if not siju:
@@ -141,6 +116,7 @@ def calculate_siju(birth_hour, lunIljin):
141
  return siju
142
 
143
  def get_lunar_info(birth_date, birth_time):
 
144
  solYear = birth_date[:4]
145
  solMonth = birth_date[4:6]
146
  solDay = birth_date[6:]
@@ -150,214 +126,279 @@ def get_lunar_info(birth_date, birth_time):
150
  service_key = "EuBjt%2B2t0KzYt5Ri%2Bzs56oymt9kHJ8uPIOV7m6UMKnOV8cpwj02EiRqMEudX%2F%2FVTKdMnwaLH0igRwY57YUplEQ%3D%3D"
151
  url = f"{base_url}?solYear={solYear}&solMonth={solMonth}&solDay={solDay}&ServiceKey={service_key}"
152
 
153
- response = requests.get(url)
154
- if response.status_code == 200:
155
- root = ElementTree.fromstring(response.content)
156
-
157
- lunIljin = root.find(".//lunIljin").text if root.find(".//lunIljin") is not None else "์ •๋ณด ์—†์Œ"
158
- lunWolgeon = root.find(".//lunWolgeon").text if root.find(".//lunWolgeon") is not None else "์ •๋ณด ์—†์Œ"
159
- lunSecha = root.find(".//lunSecha").text if root.find(".//lunSecha") is not None else "์ •๋ณด ์—†์Œ"
160
-
161
- siju = calculate_siju(solHour, lunIljin)
162
- analysis_html = ์‚ฌ์ฃผ_๋ถ„์„(lunSecha, lunWolgeon, lunIljin, siju)
163
-
164
- # OpenAI API๋ฅผ ์‚ฌ์šฉํ•œ ์ผ์ฃผ ๋ถ„์„
165
- openai_analysis = analyze_character(lunIljin)
166
-
167
- return {
168
- "๋…„์ฃผ": lunSecha,
169
- "์›”์ฃผ": lunWolgeon,
170
- "์ผ์ฃผ": lunIljin,
171
- "์‹œ์ฃผ": siju
172
- }, lunIljin, analysis_html, openai_analysis
173
- else:
174
- return {"Error": "API ํ˜ธ์ถœ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค."}, "์ •๋ณด ์—†์Œ", "<p>API ํ˜ธ์ถœ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.</p>", ""
 
 
 
175
 
176
  def analyze_character(lunIljin):
177
- OPENAI_API_KEY = os.getenv("APIKEY") # ํ™˜๊ฒฝ๋ณ€์ˆ˜์—์„œ API ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ
178
- API_URL = "https://api.openai.com/v1/chat/completions"
179
- payload = {
180
- "model": "gpt-4o-mini",
181
- "messages": [{
182
- "role": "system",
183
- "content": "๋‹น์‹ ์€ ์‚ฌ์ฃผ ์šด์„ธ ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค."
184
- }, {
185
- "role": "user",
186
- "content": f"์ผ์ฃผ '{lunIljin}': ๋„ˆ์˜ ์—ญํ• ์€ '์‚ฌ์ฃผ ์šด์„ธ ์ „๋ฌธ๊ฐ€'์ด๋‹ค. ์ œ์‹œํ•˜๋Š” ์‚ฌ์ฃผ์˜ '์ผ์ฃผ'์— ๋Œ€ํ•ด 2000๊ธ€์ž ์ด๋‚ด๋กœ ์ „๋ฌธ์ ์ด๊ณ  ์ž์„ธํ•˜๊ฒŒ ๋‹ค์Œ 'ํ•ญ๋ชฉ'๋ณ„๋กœ ์ถœ๋ ฅํ•˜๋ผ. 1) ํ‰์ƒ ์šด์„ธ ์ด์šด 2) 2024๋…„ ๊ฐ‘์ง„(็”ฒ่พฐ)ๅนด ์šด์„ธ 3) ์„ฑ๊ฒฉ 4) ๊ฑด๊ฐ• 5) ์ง์—… ๋ฐ ์ง„๋กœ 6) ๊ฒฐํ˜ผ ๋ฐ ์• ์ • 7) ๋Œ€์ธ ๊ด€๊ณ„ 8) ์žฌ๋ฌผ์šด 9) ์ฃผ์˜ ๋ฐ ์กฐ์‹ฌํ•ด์•ผ ํ•  ์‚ฌํ•ญ 10) ์„น์Šˆ์–ผ๋ฆฌํ‹ฐ"
187
- }],
188
- }
189
- headers = {
190
- "Content-Type": "application/json",
191
- "Authorization": f"Bearer {OPENAI_API_KEY}"
192
- }
193
- response = requests.post(API_URL, headers=headers, json=payload)
194
- if response.status_code == 200:
195
- data = response.json()
196
- return data["choices"][0]["message"]["content"]
197
- else:
198
- return f"์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒํƒœ ์ฝ”๋“œ: {response.status_code}, ๋ฉ”์‹œ์ง€: {response.json().get('error', {}).get('message', 'Unknown error')}"
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
  def ์‚ฌ์ฃผ_๋ถ„์„(๋…„์ฃผ, ์›”์ฃผ, ์ผ์ฃผ, ์‹œ์ฃผ):
 
265
  markdown_result = f"""
266
  # ์‚ฌ์ฃผ ๋ถ„์„ ๊ฒฐ๊ณผ
267
- **๋…„์ฃผ ์š”์•ฝ:** {๋…„์ฃผ} - {์‚ฌ์ฃผ_๋ฐ์ดํ„ฐ.get(๋…„์ฃผ, '์ •๋ณด ์—†์Œ')}
268
- **์›”์ฃผ ์š”์•ฝ:** {์›”์ฃผ} - {์‚ฌ์ฃผ_๋ฐ์ดํ„ฐ.get(์›”์ฃผ, '์ •๋ณด ์—†์Œ')}
269
- **์ผ์ฃผ ์š”์•ฝ:** {์ผ์ฃผ} - {์‚ฌ์ฃผ_๋ฐ์ดํ„ฐ.get(์ผ์ฃผ, '์ •๋ณด ์—†์Œ')}
270
- **์‹œ์ฃผ ์š”์•ฝ:** {์‹œ์ฃผ} - {์‚ฌ์ฃผ_๋ฐ์ดํ„ฐ.get(์‹œ์ฃผ, '์ •๋ณด ์—†๏ฟฝ๏ฟฝ๏ฟฝ')}
271
- """
272
- return markdown_result.strip()
273
-
274
- async def send_long_message(channel, content):
275
- chunks = textwrap.wrap(content, 1900, replace_whitespace=False)
276
- for chunk in chunks:
277
- await channel.send(chunk)
278
-
279
-
280
- class MyClient(discord.Client):
281
- def __init__(self, *args, **kwargs):
282
- super().__init__(*args, **kwargs)
283
- self.is_processing = False
284
- self.user_states = {}
285
-
286
- async def on_ready(self):
287
- logging.info(f'{self.user}๋กœ ๋กœ๊ทธ์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!')
288
- subprocess.Popen(["python", "web.py"])
289
- logging.info("Web.py server has been started.")
290
-
291
- def is_message_in_specific_channel(self, message):
292
- return message.channel.id == SPECIFIC_CHANNEL_ID
293
-
294
- async def wait_for_response(self, message, prompt):
295
- await message.channel.send(prompt)
296
- try:
297
- response = await self.wait_for('message', check=lambda m: m.author == message.author and m.channel == message.channel, timeout=20.0)
298
- return response.content
299
- except asyncio.TimeoutError:
300
- return None
301
-
302
- async def on_message(self, message):
303
- try:
304
- logging.info(f"๋ฉ”์‹œ์ง€ ์ˆ˜์‹ : {message.content}")
305
 
306
- if message.author == self.user:
307
- return
308
- if not self.is_message_in_specific_channel(message):
309
- return
310
- if self.is_processing:
311
- return
312
 
313
- self.is_processing = True
314
- try:
315
- if message.author.id not in self.user_states:
316
- self.user_states[message.author.id] = {"state": "birth_date"}
317
-
318
- birth_date = await self.wait_for_response(message, "์ƒ๋…„์›”์ผ์„ ์ž…๋ ฅํ•˜์„ธ์š”(์˜ˆ์‹œ, 19740727)")
319
- if birth_date is None:
320
- birth_date = await self.wait_for_response(message, "์ƒ๋…„์›”์ผ์„ ๋‹ค์‹œ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. 20์ดˆ ๋‚ด์— ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.")
321
- if birth_date is None:
322
- await message.channel.send("์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
323
- del self.user_states[message.author.id]
324
- return
325
 
326
- self.user_states[message.author.id]["birth_date"] = birth_date
327
- self.user_states[message.author.id]["state"] = "birth_time"
328
-
329
- birth_time = await self.wait_for_response(message, "์ƒ์‹œ(ํƒœ์–ด๋‚œ ์‹œ๊ฐ„)๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.(์˜ˆ์‹œ,2248)")
330
- if birth_time is None:
331
- birth_time = await self.wait_for_response(message, "์ƒ์‹œ๋ฅผ ๋‹ค์‹œ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. 20์ดˆ ๋‚ด์— ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.")
332
- if birth_time is None:
333
- await message.channel.send("์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
334
- del self.user_states[message.author.id]
335
- return
336
 
 
 
 
337
 
338
- result, lunIljin, analysis_markdown, openai_analysis = get_lunar_info(birth_date, birth_time)
 
 
 
339
 
340
- await message.channel.send(f"์‚ฌ์ฃผ ๋ถ„์„ ๊ฒฐ๊ณผ:\n```json\n{result}\n```")
341
- await send_long_message(message.channel, analysis_markdown)
342
- await send_long_message(message.channel, f"\n AI ์ผ์ฃผ ๋ถ„์„:\n{openai_analysis}")
343
-
344
- fortune_analysis = analyze_fortune(result, analysis_markdown, openai_analysis)
345
- await send_long_message(message.channel, f"\n ์•ˆ๋‚ด:\n{str(fortune_analysis)}")
346
-
347
- del self.user_states[message.author.id] # ์ƒํƒœ ์ดˆ๊ธฐํ™”
348
- finally:
349
- self.is_processing = False
350
-
351
- except Exception as e:
352
- logging.error(f"์—๋Ÿฌ ๋ฐœ์ƒ: {e}")
353
- await message.channel.send(f"์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}")
354
-
355
-
356
- def is_message_in_specific_channel(self, message):
357
- return (message.channel.id == SPECIFIC_CHANNEL_ID or
358
- (isinstance(message.channel, discord.Thread) and message.channel.parent_id == SPECIFIC_CHANNEL_ID))
359
-
 
 
 
 
 
 
 
 
 
360
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
  if __name__ == "__main__":
362
- discord_client = MyClient(intents=intents)
363
- discord_client.run(os.getenv('DISCORD_TOKEN'))
 
 
 
 
 
1
+ import gradio as gr
 
 
 
 
 
2
  import requests
3
  from xml.etree import ElementTree
4
+ import os
5
+ from google import genai
6
+ from google.genai import types
7
+ from dotenv import load_dotenv
8
  import json
 
 
 
 
 
9
 
10
+ # ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋กœ๋“œ
11
+ load_dotenv()
 
 
 
12
 
13
+ # Gemini API ํด๋ผ์ด์–ธํŠธ ์„ค์ •
14
+ client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
 
15
 
16
  def analyze_fortune(result, analysis_markdown, openai_analysis):
17
+ """Gemini๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ์ฃผ ์šด์„ธ ๋ถ„์„ ํ•จ์ˆ˜"""
18
  try:
19
+ system_instruction = "๋„ˆ๋Š” ์‚ฌ์ฃผ ์šด์„ธ ๋ช…๋ฆฌํ•™ ์ „๋ฌธ๊ฐ€ ์—ญํ• ์ด๋‹ค. ๋„ˆ๋Š” ์นœ์ ˆํ•˜๊ณ  ์ž์„ธํ•˜๊ฒŒ ๋‹ต๋ณ€์„ ํ•˜์—ฌ์•ผ ํ•œ๋‹ค."
20
+ user_prompt = f"์‚ฌ์ฃผ ์ •๋ณด: {result}\n\n๊ธฐ๋ณธ ๋ถ„์„: {analysis_markdown}\n\nAI ๋ถ„์„: {openai_analysis}\n\n์œ„ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ข…ํ•ฉ์ ์ธ ์šด์„ธ ์กฐ์–ธ์„ ํ•ด์ฃผ์„ธ์š”."
21
+
22
+ response = client.models.generate_content(
23
+ model="gemini-2.5-flash",
24
+ config=types.GenerateContentConfig(
25
+ system_instruction=system_instruction,
26
+ temperature=0.7,
27
+ thinking_config=types.ThinkingConfig(thinking_budget=0)
28
+ ),
29
+ contents=user_prompt
30
  )
31
 
32
+ return response.text
 
 
 
33
  except Exception as e:
 
34
  return f"์šด์„ธ ๋ถ„์„ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}"
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
  def get_chinese_hour(birth_hour):
37
+ """์‹œ๊ฐ„์„ ์‹ญ์ด์ง€๋กœ ๋ณ€ํ™˜"""
38
  hour = int(birth_hour[:2])
39
  chinese_hours = ['์ž', '์ถ•', '์ธ', '๋ฌ˜', '์ง„', '์‚ฌ', '์˜ค', '๋ฏธ', '์‹ ', '์œ ', '์ˆ ', 'ํ•ด']
40
  return chinese_hours[hour // 2 % 12]
41
 
42
  def calculate_siju(birth_hour, lunIljin):
43
+ """์‹œ์ฃผ ๊ณ„์‚ฐ"""
44
  chinese_hour = get_chinese_hour(birth_hour)
45
  lunIljin_first = lunIljin[0]
46
 
47
  # ์ผ์ฃผ ์ฒซ ๊ธ€์ž์— ๋”ฐ๋ฅธ ์‹œ์ฃผ ๋งคํ•‘
48
  siju_mapping = {
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
  siju_key = (lunIljin_first, chinese_hour)
112
  siju = siju_mapping.get(siju_key)
113
  if not siju:
 
116
  return siju
117
 
118
  def get_lunar_info(birth_date, birth_time):
119
+ """์Œ๋ ฅ ์ •๋ณด ์กฐํšŒ ๋ฐ ์‚ฌ์ฃผ ๊ณ„์‚ฐ"""
120
  solYear = birth_date[:4]
121
  solMonth = birth_date[4:6]
122
  solDay = birth_date[6:]
 
126
  service_key = "EuBjt%2B2t0KzYt5Ri%2Bzs56oymt9kHJ8uPIOV7m6UMKnOV8cpwj02EiRqMEudX%2F%2FVTKdMnwaLH0igRwY57YUplEQ%3D%3D"
127
  url = f"{base_url}?solYear={solYear}&solMonth={solMonth}&solDay={solDay}&ServiceKey={service_key}"
128
 
129
+ try:
130
+ response = requests.get(url)
131
+ if response.status_code == 200:
132
+ root = ElementTree.fromstring(response.content)
133
+
134
+ lunIljin = root.find(".//lunIljin").text if root.find(".//lunIljin") is not None else "์ •๋ณด ์—†์Œ"
135
+ lunWolgeon = root.find(".//lunWolgeon").text if root.find(".//lunWolgeon") is not None else "์ •๋ณด ์—†์Œ"
136
+ lunSecha = root.find(".//lunSecha").text if root.find(".//lunSecha") is not None else "์ •๋ณด ์—†์Œ"
137
+
138
+ siju = calculate_siju(solHour, lunIljin)
139
+ analysis_html = ์‚ฌ์ฃผ_๋ถ„์„(lunSecha, lunWolgeon, lunIljin, siju)
140
+
141
+ # Gemini API๋ฅผ ์‚ฌ์šฉํ•œ ์ผ์ฃผ ๋ถ„์„
142
+ gemini_analysis = analyze_character(lunIljin)
143
+
144
+ return {
145
+ "๋…„์ฃผ": lunSecha,
146
+ "์›”์ฃผ": lunWolgeon,
147
+ "์ผ์ฃผ": lunIljin,
148
+ "์‹œ์ฃผ": siju
149
+ }, lunIljin, analysis_html, gemini_analysis
150
+ else:
151
+ return {"Error": "API ํ˜ธ์ถœ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค."}, "์ •๋ณด ์—†๏ฟฝ๏ฟฝ๏ฟฝ", "API ํ˜ธ์ถœ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", ""
152
+ except Exception as e:
153
+ return {"Error": f"์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}"}, "์ •๋ณด ์—†์Œ", f"์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}", ""
154
 
155
  def analyze_character(lunIljin):
156
+ """Gemini๋ฅผ ์‚ฌ์šฉํ•œ ์ผ์ฃผ ๋ถ„์„"""
157
+ try:
158
+ system_instruction = "๋‹น์‹ ์€ ์‚ฌ์ฃผ ์šด์„ธ ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค."
159
+ user_content = f"์ผ์ฃผ '{lunIljin}': ๋„ˆ์˜ ์—ญํ• ์€ '์‚ฌ์ฃผ ์šด์„ธ ์ „๋ฌธ๊ฐ€'์ด๋‹ค. ์ œ์‹œํ•˜๋Š” ์‚ฌ์ฃผ์˜ '์ผ์ฃผ'์— ๋Œ€ํ•ด 2000๊ธ€์ž ์ด๋‚ด๋กœ ์ „๋ฌธ์ ์ด๊ณ  ์ž์„ธํ•˜๊ฒŒ ๋‹ค์Œ 'ํ•ญ๋ชฉ'๋ณ„๋กœ ์ถœ๋ ฅํ•˜๋ผ. 1) ํ‰์ƒ ์šด์„ธ ์ด์šด 2) 2025๋…„ ์„์‚ฌ(ไน™ๅทณ)ๅนด ์šด์„ธ 3) ์„ฑ๊ฒฉ 4) ๊ฑด๊ฐ• 5) ์ง์—… ๋ฐ ์ง„๋กœ 6) ๊ฒฐํ˜ผ ๋ฐ ์• ์ • 7) ๋Œ€์ธ ๊ด€๊ณ„ 8) ์žฌ๋ฌผ์šด 9) ์ฃผ์˜ ๋ฐ ์กฐ์‹ฌํ•ด์•ผ ํ•  ์‚ฌํ•ญ 10) ์„น์Šˆ์–ผ๋ฆฌํ‹ฐ"
160
+
161
+ response = client.models.generate_content(
162
+ model="gemini-2.5-flash",
163
+ config=types.GenerateContentConfig(
164
+ system_instruction=system_instruction,
165
+ temperature=0.7,
166
+ thinking_config=types.ThinkingConfig(thinking_budget=0)
167
+ ),
168
+ contents=user_content
169
+ )
170
+
171
+ return response.text
172
+ except Exception as e:
173
+ return f"์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}"
 
 
 
 
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
  def ์‚ฌ์ฃผ_๋ถ„์„(๋…„์ฃผ, ์›”์ฃผ, ์ผ์ฃผ, ์‹œ์ฃผ):
240
+ """๊ธฐ๋ณธ ์‚ฌ์ฃผ ๋ถ„์„"""
241
  markdown_result = f"""
242
  # ์‚ฌ์ฃผ ๋ถ„์„ ๊ฒฐ๊ณผ
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
 
244
+ **๋…„์ฃผ:** {๋…„์ฃผ} - {์‚ฌ์ฃผ_๋ฐ์ดํ„ฐ.get(๋…„์ฃผ, '์ •๋ณด ์—†์Œ')}
 
 
 
 
 
245
 
246
+ **์›”์ฃผ:** {์›”์ฃผ} - {์‚ฌ์ฃผ_๋ฐ์ดํ„ฐ.get(์›”์ฃผ, '์ •๋ณด ์—†์Œ')}
 
 
 
 
 
 
 
 
 
 
 
247
 
248
+ **์ผ์ฃผ:** {์ผ์ฃผ} - {์‚ฌ์ฃผ_๋ฐ์ดํ„ฐ.get(์ผ์ฃผ, '์ •๋ณด ์—†์Œ')}
 
 
 
 
 
 
 
 
 
249
 
250
+ **์‹œ์ฃผ:** {์‹œ์ฃผ} - {์‚ฌ์ฃผ_๋ฐ์ดํ„ฐ.get(์‹œ์ฃผ, '์ •๋ณด ์—†์Œ')}
251
+ """
252
+ return markdown_result.strip()
253
 
254
+ def analyze_saju(birth_date, birth_time):
255
+ """๋ฉ”์ธ ์‚ฌ์ฃผ ๋ถ„์„ ํ•จ์ˆ˜"""
256
+ if not birth_date or not birth_time:
257
+ return "์ƒ๋…„์›”์ผ๊ณผ ์ƒ์‹œ๋ฅผ ๋ชจ๋‘ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.", "", "", ""
258
 
259
+ # ์ž…๋ ฅ ๊ฒ€์ฆ
260
+ if len(birth_date) != 8:
261
+ return "์ƒ๋…„์›”์ผ์€ 8์ž๋ฆฌ ์ˆซ์ž๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (์˜ˆ: 19900315)", "", "", ""
262
+
263
+ if len(birth_time) != 4:
264
+ return "์ƒ์‹œ๋Š” 4์ž๋ฆฌ ์ˆซ์ž๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (์˜ˆ: 1430)", "", "", ""
265
+
266
+ try:
267
+ result, lunIljin, analysis_markdown, gemini_analysis = get_lunar_info(birth_date, birth_time)
268
+
269
+ if "Error" in result:
270
+ return result["Error"], "", "", ""
271
+
272
+ # JSON ํ˜•ํƒœ๋กœ ์‚ฌ์ฃผ ์ •๋ณด ํ‘œ์‹œ
273
+ saju_info = f"""
274
+ ๐ŸŽฏ **์‚ฌ์ฃผ ์ •๋ณด**
275
+ - ๋…„์ฃผ: {result['๋…„์ฃผ']}
276
+ - ์›”์ฃผ: {result['์›”์ฃผ']}
277
+ - ์ผ์ฃผ: {result['์ผ์ฃผ']}
278
+ - ์‹œ์ฃผ: {result['์‹œ์ฃผ']}
279
+ """
280
+
281
+ # ์ข…ํ•ฉ ์šด์„ธ ๋ถ„์„
282
+ fortune_analysis = analyze_fortune(result, analysis_markdown, gemini_analysis)
283
+
284
+ return saju_info, analysis_markdown, gemini_analysis, fortune_analysis
285
+
286
+ except Exception as e:
287
+ return f"๋ถ„์„ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}", "", "", ""
288
 
289
+ # Gradio ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ
290
+ with gr.Blocks(title="๐Ÿ”ฎ ์‚ฌ์ฃผ ์šด์„ธ ๋ถ„์„", theme=gr.themes.Soft()) as demo:
291
+ gr.Markdown("""
292
+ # ๐Ÿ”ฎ ์‚ฌ์ฃผ ์šด์„ธ ๋ถ„์„
293
+
294
+ ์ƒ๋…„์›”์ผ๊ณผ ์ƒ์‹œ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ „๋ฌธ์ ์ธ ์‚ฌ์ฃผ ์šด์„ธ ๋ถ„์„์„ ๋ฐ›์•„๋ณด์„ธ์š”.
295
+ """)
296
+
297
+ with gr.Row():
298
+ with gr.Column():
299
+ birth_date = gr.Textbox(
300
+ label="์ƒ๋…„์›”์ผ",
301
+ placeholder="19900315 (8์ž๋ฆฌ ์ˆซ์ž๋กœ ์ž…๋ ฅ)",
302
+ info="์–‘๋ ฅ ๊ธฐ์ค€์œผ๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”"
303
+ )
304
+ birth_time = gr.Textbox(
305
+ label="์ƒ์‹œ (ํƒœ์–ด๋‚œ ์‹œ๊ฐ„)",
306
+ placeholder="1430 (4์ž๋ฆฌ ์ˆซ์ž๋กœ ์ž…๋ ฅ)",
307
+ info="24์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” (์˜ˆ: ์˜คํ›„ 2์‹œ 30๋ถ„ = 1430)"
308
+ )
309
+ analyze_btn = gr.Button("๐Ÿ”ฎ ์‚ฌ์ฃผ ๋ถ„์„ํ•˜๊ธฐ", variant="primary", size="lg")
310
+
311
+ with gr.Column():
312
+ gr.Markdown("""
313
+ ### ๐Ÿ“ ์ž…๋ ฅ ๊ฐ€์ด๋“œ
314
+ - **์ƒ๋…„์›”์ผ**: ์–‘๋ ฅ ๊ธฐ์ค€ 8์ž๋ฆฌ (์˜ˆ: 19900315)
315
+ - **์ƒ์‹œ**: 24์‹œ๊ฐ„ ๊ธฐ์ค€ 4์ž๋ฆฌ (์˜ˆ: 1430)
316
+ - ์ •ํ™•ํ•œ ์ถœ์ƒ ์‹œ๊ฐ„์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค!
317
+ """)
318
+
319
+ gr.Markdown("---")
320
+
321
+ # ๊ฒฐ๊ณผ ์ถœ๋ ฅ ์˜์—ญ
322
+ with gr.Row():
323
+ saju_result = gr.Textbox(
324
+ label="๐ŸŽฏ ์‚ฌ์ฃผ ์ •๋ณด",
325
+ lines=8,
326
+ interactive=False
327
+ )
328
+
329
+ with gr.Row():
330
+ with gr.Column():
331
+ basic_analysis = gr.Textbox(
332
+ label="๐Ÿ“Š ๊ธฐ๋ณธ ์‚ฌ์ฃผ ๋ถ„์„",
333
+ lines=15,
334
+ interactive=False
335
+ )
336
+
337
+ with gr.Column():
338
+ gemini_analysis = gr.Textbox(
339
+ label="๐Ÿค– AI ์ƒ์„ธ ๋ถ„์„ (Gemini)",
340
+ lines=15,
341
+ interactive=False
342
+ )
343
+
344
+ with gr.Row():
345
+ fortune_analysis = gr.Textbox(
346
+ label="๐ŸŒŸ ์ข…ํ•ฉ ์šด์„ธ ์กฐ์–ธ",
347
+ lines=10,
348
+ interactive=False
349
+ )
350
+
351
+ # ์ด๋ฒคํŠธ ์—ฐ๊ฒฐ
352
+ analyze_btn.click(
353
+ fn=analyze_saju,
354
+ inputs=[birth_date, birth_time],
355
+ outputs=[saju_result, basic_analysis, gemini_analysis, fortune_analysis]
356
+ )
357
+
358
+ # ์˜ˆ์‹œ ๋ฒ„ํŠผ๋“ค
359
+ gr.Markdown("---")
360
+ gr.Markdown("### ๐Ÿ’ก ์˜ˆ์‹œ๋กœ ์ฒดํ—˜ํ•ด๋ณด๊ธฐ")
361
+
362
+ with gr.Row():
363
+ example1_btn = gr.Button("์˜ˆ์‹œ 1: 1990.03.15 14:30")
364
+ example2_btn = gr.Button("์˜ˆ์‹œ 2: 1985.07.22 09:15")
365
+ example3_btn = gr.Button("์˜ˆ์‹œ 3: 1992.11.08 21:45")
366
+
367
+ # ์˜ˆ์‹œ ๋ฒ„ํŠผ ์ด๋ฒคํŠธ
368
+ example1_btn.click(
369
+ lambda: ("19900315", "1430"),
370
+ outputs=[birth_date, birth_time]
371
+ )
372
+
373
+ example2_btn.click(
374
+ lambda: ("19850722", "0915"),
375
+ outputs=[birth_date, birth_time]
376
+ )
377
+
378
+ example3_btn.click(
379
+ lambda: ("19921108", "2145"),
380
+ outputs=[birth_date, birth_time]
381
+ )
382
+
383
+ gr.Markdown("""
384
+ ---
385
+ ### โš ๏ธ ์ฃผ์˜์‚ฌํ•ญ
386
+ - ์‚ฌ์ฃผ ์šด์„ธ๋Š” ์ฐธ๊ณ  ์ž๋ฃŒ๋กœ๋งŒ ํ™œ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
387
+ - ์ •ํ™•ํ•œ ์ถœ์ƒ ์‹œ๊ฐ„์ด ์ค‘์š”ํ•˜๋‹ˆ ํ™•์ธ ํ›„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.
388
+ - AI ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ์ „ํ†ต ์‚ฌ์ฃผํ•™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋˜, ํ˜„๋Œ€์  ํ•ด์„์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
389
+
390
+ ### ๐Ÿ”ง ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜
391
+ `.env` ํŒŒ์ผ์— ๋‹ค์Œ์„ ์„ค์ •ํ•ด์ฃผ์„ธ์š”:
392
+ ```
393
+ GEMINI_API_KEY=your_gemini_api_key_here
394
+ ```
395
+ """)
396
+
397
+ # ์‹คํ–‰
398
  if __name__ == "__main__":
399
+ demo.launch(
400
+ share=True,
401
+ server_name="0.0.0.0",
402
+ server_port=7860,
403
+ show_error=True
404
+ )