openfree commited on
Commit
f79dac7
1 Parent(s): 8dfed1a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +74 -5
app.py CHANGED
@@ -2,6 +2,32 @@ import requests
2
  import gradio as gr
3
  from datetime import datetime
4
  import random
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
 
6
  USERNAME = "openfree"
7
 
@@ -254,15 +280,55 @@ def get_vercel_deployments():
254
  return []
255
 
256
  def get_vercel_card(deployment, index):
257
- """Generate HTML card for a Vercel deployment with like button"""
258
  raw_url = deployment.get('url', '')
259
 
260
- # URL 처리 로직 수정
261
  if raw_url.startswith('http'):
262
- url = raw_url # 전체 URL이 제공된 경우 그대로 사용
263
  else:
264
- project_name = raw_url[:6] if len(raw_url) >= 6 else raw_url
265
- url = f"{project_name}.vercel.app"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
266
 
267
  # Hugging Face 스페이스 URL인 경우 직접 사용
268
  if 'huggingface.co' in url:
@@ -685,4 +751,7 @@ with demo:
685
  html_output = gr.HTML(value=get_user_spaces()) # 초기 로드 시 직접 함수 호출
686
 
687
  if __name__ == "__main__":
 
 
 
688
  demo.launch()
 
2
  import gradio as gr
3
  from datetime import datetime
4
  import random
5
+ from selenium import webdriver
6
+ from selenium.common.exceptions import WebDriverException
7
+ from PIL import Image
8
+ from io import BytesIO
9
+
10
+ def take_screenshot(url):
11
+ """웹사이트 스크린샷 촬영 함수"""
12
+ options = webdriver.ChromeOptions()
13
+ options.add_argument('--headless')
14
+ options.add_argument('--no-sandbox')
15
+ options.add_argument('--disable-dev-shm-usage')
16
+
17
+ try:
18
+ driver = webdriver.Chrome(options=options)
19
+ driver.set_window_size(1080, 720) # 스크린샷 크기 설정
20
+ driver.get(url)
21
+ driver.implicitly_wait(10)
22
+ screenshot = driver.get_screenshot_as_png()
23
+ return Image.open(BytesIO(screenshot))
24
+ except WebDriverException as e:
25
+ print(f"스크린샷 촬영 실패: {str(e)}")
26
+ return Image.new('RGB', (1, 1)) # 오류 시 빈 이미지 반환
27
+ finally:
28
+ if driver:
29
+ driver.quit()
30
+
31
 
32
  USERNAME = "openfree"
33
 
 
280
  return []
281
 
282
  def get_vercel_card(deployment, index):
283
+ """Vercel 배포 카드 HTML 생성 함수"""
284
  raw_url = deployment.get('url', '')
285
 
286
+ # URL 처리
287
  if raw_url.startswith('http'):
288
+ url = raw_url
289
  else:
290
+ url = f"https://{raw_url}"
291
+
292
+ name = deployment.get('name', '이름 없는 프로젝트')
293
+ created = format_timestamp(deployment.get('created'))
294
+ state = deployment.get('state', 'N/A')
295
+
296
+ # 카드 ID 생성
297
+ card_id = f"vercel-card-{url.replace('.', '-').replace('/', '-')}"
298
+
299
+
300
+ # 스크린샷 이미지 가져오기
301
+ try:
302
+ screenshot = take_screenshot(url)
303
+ screenshot_html = f"""
304
+ <div style="width: 100%; height: 200px; overflow: hidden; border-radius: 10px; margin-bottom: 15px;">
305
+ <img src="data:image/png;base64,{screenshot}"
306
+ style="width: 100%; height: 100%; object-fit: cover;"
307
+ alt="{name} 스크린샷"/>
308
+ </div>
309
+ """
310
+ except Exception as e:
311
+ print(f"스크린샷 처리 오류: {str(e)}")
312
+ screenshot_html = "" # 오류 시 스크린샷 영역 생략
313
+
314
+ # 나머지 카드 스타일링 코드는 기존과 동일...
315
+ return f"""
316
+ <div id="{card_id}" class="vercel-card"
317
+ style='border: none;
318
+ padding: 25px;
319
+ margin: 15px;
320
+ border-radius: 20px;
321
+ background-color: {get_pastel_color(index)};
322
+ box-shadow: 0 4px 15px rgba(0,0,0,0.1);'>
323
+ {screenshot_html}
324
+ <h3>{name}</h3>
325
+ <div style='margin: 15px 0;'>
326
+ <p>상태: {state}</p>
327
+ <p>생성일: {created}</p>
328
+ <p>URL: <a href="{url}" target="_blank">{url}</a></p>
329
+ </div>
330
+ </div>
331
+ """
332
 
333
  # Hugging Face 스페이스 URL인 경우 직접 사용
334
  if 'huggingface.co' in url:
 
751
  html_output = gr.HTML(value=get_user_spaces()) # 초기 로드 시 직접 함수 호출
752
 
753
  if __name__ == "__main__":
754
+ demo = gr.Blocks()
755
+ with demo:
756
+ gr.HTML(value=get_user_spaces())
757
  demo.launch()