AIRider commited on
Commit
23b09fc
Β·
verified Β·
1 Parent(s): 108f0d2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -10
app.py CHANGED
@@ -5,6 +5,7 @@ import logging
5
  import openai
6
  import os
7
  import re
 
8
 
9
  # λ‘œκΉ… μ„€μ •
10
  logging.basicConfig(filename='youtube_script_extractor.log', level=logging.DEBUG,
@@ -86,12 +87,13 @@ def summarize_text(title, description, text):
86
  [μ˜ˆμ‹œ]
87
  (λ³€κ²½μ „)
88
  - 유튜브λ₯Ό 처음 μ‹œμž‘ν•˜λŠ” μ‚¬λžŒλ“€μ€ κ΅¬λ…μž μˆ˜μ™€ μ‘°νšŒμˆ˜μ— 큰 관심을 두고 맀일 유튜브 μŠ€νŠœλ””μ˜€λ₯Ό ν™•μΈν•˜κ²Œ λœλ‹€. κ·ΈλŸ¬λ‚˜ κ΅¬λ…μžκ°€ 100λͺ…, 1,000λͺ…에 λ„λ‹¬ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλŠ” 지속적인 μ„±μž₯에 도움이 λ˜μ§€ μ•ŠλŠ”λ‹€. κ΅¬λ…μž μˆ˜κ°€ λŠ˜μ–΄λ‚œ 후에도 유튜브 채널 μš΄μ˜μ— λŒ€ν•œ 감을 μž‘μ§€ λͺ»ν•΄ ν¬κΈ°ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.
89
-
90
  (λ³€κ²½ν›„)
91
  - 유튜브λ₯Ό 처음 μ‹œμž‘ν•˜λŠ” μ‚¬λžŒλ“€μ€ κ΅¬λ…μž μˆ˜μ™€ μ‘°νšŒμˆ˜μ— 큰 관심을 두고 맀일 유튜브 μŠ€νŠœλ””μ˜€λ₯Ό ν™•μΈν•˜κ²Œ λœλ‹€.
92
  - κ·ΈλŸ¬λ‚˜ κ΅¬λ…μžκ°€ 100λͺ…, 1,000λͺ…에 λ„λ‹¬ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλŠ” 지속적인 μ„±μž₯에 도움이 λ˜μ§€ μ•ŠλŠ”λ‹€.
93
  - κ΅¬λ…μž μˆ˜κ°€ λŠ˜μ–΄λ‚œ 후에도 유튜브 채널 μš΄μ˜μ— λŒ€ν•œ 감을 μž‘μ§€ λͺ»ν•΄ ν¬κΈ°ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.
94
- 17. λ°˜λ“œμ‹œ **각 λ¬Έμž₯μ—μ„œ 핡심 뢀뢄은 [[μ€‘μš” λ‚΄μš©]] ν˜•νƒœλ‘œ ν‘œμ‹œν•˜λΌ**
 
 
95
 
96
  제λͺ©: {title}
97
  μ„€λͺ…: {description}
@@ -153,27 +155,45 @@ def analyze(url):
153
  # μš”μ•½ 생성
154
  summary = summarize_text(title, description, script)
155
 
156
- # λ§ˆν¬λ‹€μš΄ 기호 제거 및 HTML νƒœκ·Έλ‘œ λ³€ν™˜
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  lines = summary.split('\n')
158
  formatted_lines = []
159
  for line in lines:
160
  if line.startswith('# '):
161
- line = f"<h1>{line[2:]}</h1>"
162
  elif line.startswith('## '):
163
- line = f"<h2>{line[3:]}</h2>"
164
  elif line.startswith('### '):
165
- line = f"<h3>{line[4:]}</h3>"
166
  else:
167
- # 핡심 λΆ€λΆ„ ν•˜μ΄λΌμ΄νŠΈ 처리: [[μ€‘μš” λ‚΄μš©]]을 ν•˜μ΄λΌμ΄νŠΈλœ HTML둜 λ³€ν™˜
168
- line = line.replace('[[', '<span style="background-color: #FFDAB9; font-weight: bold;">').replace(']]', '</span>')
169
- line = f"<p>{line}</p>"
170
  formatted_lines.append(line)
171
 
172
  formatted_summary = '\n'.join(formatted_lines)
173
 
174
  summary_content = f"""<div style="background-color: #e6f3ff; padding: 20px; border-radius: 10px; margin-top: 20px;">
 
 
 
 
 
 
175
  <h3>μš”μ•½</h3>
176
- <h2>{title}</h2>
177
  {formatted_summary}
178
  </div>"""
179
 
 
5
  import openai
6
  import os
7
  import re
8
+ import html
9
 
10
  # λ‘œκΉ… μ„€μ •
11
  logging.basicConfig(filename='youtube_script_extractor.log', level=logging.DEBUG,
 
87
  [μ˜ˆμ‹œ]
88
  (λ³€κ²½μ „)
89
  - 유튜브λ₯Ό 처음 μ‹œμž‘ν•˜λŠ” μ‚¬λžŒλ“€μ€ κ΅¬λ…μž μˆ˜μ™€ μ‘°νšŒμˆ˜μ— 큰 관심을 두고 맀일 유튜브 μŠ€νŠœλ””μ˜€λ₯Ό ν™•μΈν•˜κ²Œ λœλ‹€. κ·ΈλŸ¬λ‚˜ κ΅¬λ…μžκ°€ 100λͺ…, 1,000λͺ…에 λ„λ‹¬ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλŠ” 지속적인 μ„±μž₯에 도움이 λ˜μ§€ μ•ŠλŠ”λ‹€. κ΅¬λ…μž μˆ˜κ°€ λŠ˜μ–΄λ‚œ 후에도 유튜브 채널 μš΄μ˜μ— λŒ€ν•œ 감을 μž‘μ§€ λͺ»ν•΄ ν¬κΈ°ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.
 
90
  (λ³€κ²½ν›„)
91
  - 유튜브λ₯Ό 처음 μ‹œμž‘ν•˜λŠ” μ‚¬λžŒλ“€μ€ κ΅¬λ…μž μˆ˜μ™€ μ‘°νšŒμˆ˜μ— 큰 관심을 두고 맀일 유튜브 μŠ€νŠœλ””μ˜€λ₯Ό ν™•μΈν•˜κ²Œ λœλ‹€.
92
  - κ·ΈλŸ¬λ‚˜ κ΅¬λ…μžκ°€ 100λͺ…, 1,000λͺ…에 λ„λ‹¬ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλŠ” 지속적인 μ„±μž₯에 도움이 λ˜μ§€ μ•ŠλŠ”λ‹€.
93
  - κ΅¬λ…μž μˆ˜κ°€ λŠ˜μ–΄λ‚œ 후에도 유튜브 채널 μš΄μ˜μ— λŒ€ν•œ 감을 μž‘μ§€ λͺ»ν•΄ ν¬κΈ°ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.
94
+ 17. λ°˜λ“œμ‹œ **각 λ¬Έμž₯μ—μ„œ 핡심 뢀뢄은 <highlight>μ€‘μš” λ‚΄μš©</highlight> ν˜•νƒœλ‘œ ν‘œμ‹œν•˜λΌ**
95
+ [μ˜ˆμ‹œ]
96
+ - μΉ΄λ©”λΌλŠ” [[2μ–΅ ν™”μ†Œ]]κ°€ νƒ‘μž¬λ  κ°€λŠ₯성이 있으며, 가격은 [[μ•½ 280λ§Œμ›]]으둜 μ˜ˆμƒλœλ‹€.
97
 
98
  제λͺ©: {title}
99
  μ„€λͺ…: {description}
 
155
  # μš”μ•½ 생성
156
  summary = summarize_text(title, description, script)
157
 
158
+ # HTML λ³€ν™˜ 및 μ΄μŠ€μΌ€μ΄ν”„ 처리
159
+ def escape_html_except_highlights(text):
160
+ parts = text.split('<highlight>')
161
+ escaped_parts = []
162
+ for i, part in enumerate(parts):
163
+ if i % 2 == 0: # ν•˜μ΄λΌμ΄νŠΈ νƒœκ·Έ μ™ΈλΆ€
164
+ escaped_parts.append(html.escape(part))
165
+ else: # ν•˜μ΄λΌμ΄νŠΈ νƒœκ·Έ λ‚΄λΆ€
166
+ highlight_parts = part.split('</highlight>')
167
+ if len(highlight_parts) > 1:
168
+ escaped_parts.append(f'<span class="highlight">{html.escape(highlight_parts[0])}</span>{html.escape(highlight_parts[1])}')
169
+ else:
170
+ escaped_parts.append(html.escape(part))
171
+ return ''.join(escaped_parts)
172
+
173
  lines = summary.split('\n')
174
  formatted_lines = []
175
  for line in lines:
176
  if line.startswith('# '):
177
+ line = f"<h1>{escape_html_except_highlights(line[2:])}</h1>"
178
  elif line.startswith('## '):
179
+ line = f"<h2>{escape_html_except_highlights(line[3:])}</h2>"
180
  elif line.startswith('### '):
181
+ line = f"<h3>{escape_html_except_highlights(line[4:])}</h3>"
182
  else:
183
+ line = f"<p>{escape_html_except_highlights(line)}</p>"
 
 
184
  formatted_lines.append(line)
185
 
186
  formatted_summary = '\n'.join(formatted_lines)
187
 
188
  summary_content = f"""<div style="background-color: #e6f3ff; padding: 20px; border-radius: 10px; margin-top: 20px;">
189
+ <style>
190
+ .highlight {{
191
+ background-color: #FFDAB9;
192
+ font-weight: bold;
193
+ }}
194
+ </style>
195
  <h3>μš”μ•½</h3>
196
+ <h2>{html.escape(title)}</h2>
197
  {formatted_summary}
198
  </div>"""
199