openfree commited on
Commit
c5437a5
1 Parent(s): 4bd3dc3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -32
app.py CHANGED
@@ -2,7 +2,6 @@ import requests
2
  import gradio as gr
3
  from datetime import datetime
4
 
5
- # 테스트를 위해 Gradio 공식 계정으로 설정
6
  USERNAME = "openfree"
7
 
8
  def format_timestamp(timestamp):
@@ -13,57 +12,63 @@ def format_timestamp(timestamp):
13
 
14
  def get_space_card(space):
15
  """Generate HTML card for a space"""
 
 
 
 
 
 
16
  return f"""
17
- <div style='border: 1px solid #ddd; padding: 15px; margin: 10px; border-radius: 8px;
18
- background-color: white; box-shadow: 2px 2px 5px rgba(0,0,0,0.1);
19
  transition: transform 0.2s ease-in-out;'
20
  onmouseover='this.style.transform="scale(1.02)"'
21
  onmouseout='this.style.transform="scale(1)"'>
22
- <h3 style='color: #2d2d2d; margin: 0 0 10px 0;'>
23
- <a href='{space["url"]}' target='_blank'
24
  style='text-decoration: none; color: #2d2d2d;'>
25
- {space["title"]}
26
  </a>
27
  </h3>
28
- <p style='margin: 5px 0;'>{space.get("description", "No description available")}</p>
29
- <div style='margin-top: 10px; display: flex; justify-content: space-between; align-items: center;'>
30
- <a href='{space["url"]}' target='_blank'
31
- style='background-color: #0084ff; color: white; padding: 5px 10px;
32
- border-radius: 5px; text-decoration: none;'>
 
 
 
 
 
 
 
33
  View Space
34
  </a>
 
 
 
35
  </div>
36
  </div>
37
  """
38
 
39
  def get_user_spaces():
40
- # Hugging Face API v2 사용
41
- url = f"https://huggingface.co/api/spaces?search={USERNAME}"
42
  headers = {
43
  "Accept": "application/json",
44
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
45
  }
46
 
47
  try:
48
  response = requests.get(url, headers=headers)
49
- print(f"Status Code: {response.status_code}") # 디버깅용
50
- print(f"Response: {response.text[:500]}...") # 디버깅용
51
 
52
  if response.status_code != 200:
53
  return f"Error: Failed to fetch spaces (Status Code: {response.status_code})"
54
 
55
  spaces_data = response.json()
56
 
57
- # 사용자의 spaces 필터링
58
- user_spaces = []
59
- for space in spaces_data:
60
- if space.get('author', {}).get('name', '').lower() == USERNAME.lower():
61
- space_info = {
62
- "title": space.get('id', '').split('/')[-1],
63
- "description": space.get('description', ''),
64
- "url": f"https://huggingface.co/spaces/{space.get('id', '')}",
65
- }
66
- user_spaces.append(space_info)
67
 
68
  if not user_spaces:
69
  return f"""
@@ -74,11 +79,15 @@ def get_user_spaces():
74
  </div>
75
  """
76
 
 
 
 
77
  # Create HTML grid layout
78
  html_content = f"""
79
  <div style='padding: 20px; background-color: #f5f5f5;'>
80
  <div style='margin-bottom: 20px;'>
81
- <p style='color: #666; margin: 0;'>Found {len(user_spaces)} public spaces for {USERNAME}</p>
 
82
  </div>
83
  <div style='
84
  display: grid;
@@ -93,12 +102,12 @@ def get_user_spaces():
93
  return html_content
94
 
95
  except Exception as e:
96
- print(f"Error: {str(e)}") # 디버깅용
97
  return f"""
98
  <div style='padding: 20px; text-align: center; color: #666;'>
99
  <h2>Error occurred while fetching spaces</h2>
100
  <p>Error details: {str(e)}</p>
101
- <p>Please try again later or check if the username is correct.</p>
102
  </div>
103
  """
104
 
@@ -107,7 +116,7 @@ app = gr.Interface(
107
  fn=get_user_spaces,
108
  inputs=None,
109
  outputs=gr.HTML(),
110
- title=f"Hugging Face Public Spaces - {USERNAME}",
111
  description=f"Displays public Spaces from {USERNAME}",
112
  theme=gr.themes.Soft(),
113
  css="""
@@ -117,6 +126,6 @@ app = gr.Interface(
117
  """
118
  )
119
 
120
- # Launch the Gradio app with sharing enabled
121
  if __name__ == "__main__":
122
- app.launch(share=True) # share=True를 추가하여 공개 링크 생성
 
2
  import gradio as gr
3
  from datetime import datetime
4
 
 
5
  USERNAME = "openfree"
6
 
7
  def format_timestamp(timestamp):
 
12
 
13
  def get_space_card(space):
14
  """Generate HTML card for a space"""
15
+ space_id = space.get('id', '')
16
+ space_name = space_id.split('/')[-1]
17
+ likes = space.get('likes', 0)
18
+ created_at = format_timestamp(space.get('createdAt'))
19
+ sdk = space.get('sdk', 'N/A')
20
+
21
  return f"""
22
+ <div style='border: 1px solid #ddd; padding: 20px; margin: 10px; border-radius: 12px;
23
+ background-color: white; box-shadow: 2px 2px 10px rgba(0,0,0,0.1);
24
  transition: transform 0.2s ease-in-out;'
25
  onmouseover='this.style.transform="scale(1.02)"'
26
  onmouseout='this.style.transform="scale(1)"'>
27
+ <h3 style='color: #2d2d2d; margin: 0 0 15px 0; font-size: 1.3em;'>
28
+ <a href='https://huggingface.co/spaces/{space_id}' target='_blank'
29
  style='text-decoration: none; color: #2d2d2d;'>
30
+ {space_name}
31
  </a>
32
  </h3>
33
+ <div style='margin: 10px 0; color: #666;'>
34
+ <p style='margin: 5px 0;'><strong>SDK:</strong> {sdk}</p>
35
+ <p style='margin: 5px 0;'><strong>Created:</strong> {created_at}</p>
36
+ <p style='margin: 5px 0;'><strong>Likes:</strong> {likes} ❤️</p>
37
+ </div>
38
+ <div style='margin-top: 15px; display: flex; justify-content: space-between; align-items: center;'>
39
+ <a href='https://huggingface.co/spaces/{space_id}' target='_blank'
40
+ style='background-color: #0084ff; color: white; padding: 8px 16px;
41
+ border-radius: 6px; text-decoration: none; display: inline-block;
42
+ font-weight: 500; transition: background-color 0.2s;'
43
+ onmouseover='this.style.backgroundColor="#0066cc"'
44
+ onmouseout='this.style.backgroundColor="#0084ff"'>
45
  View Space
46
  </a>
47
+ <span style='color: #666; font-size: 0.9em;'>
48
+ ID: {space_id}
49
+ </span>
50
  </div>
51
  </div>
52
  """
53
 
54
  def get_user_spaces():
55
+ url = "https://huggingface.co/api/spaces"
 
56
  headers = {
57
  "Accept": "application/json",
58
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
59
  }
60
 
61
  try:
62
  response = requests.get(url, headers=headers)
63
+ print(f"Status Code: {response.status_code}")
 
64
 
65
  if response.status_code != 200:
66
  return f"Error: Failed to fetch spaces (Status Code: {response.status_code})"
67
 
68
  spaces_data = response.json()
69
 
70
+ # Filter spaces for the specific user
71
+ user_spaces = [space for space in spaces_data if space.get('id', '').startswith(f"{USERNAME}/")]
 
 
 
 
 
 
 
 
72
 
73
  if not user_spaces:
74
  return f"""
 
79
  </div>
80
  """
81
 
82
+ # Sort spaces by likes (most liked first)
83
+ user_spaces.sort(key=lambda x: x.get('likes', 0), reverse=True)
84
+
85
  # Create HTML grid layout
86
  html_content = f"""
87
  <div style='padding: 20px; background-color: #f5f5f5;'>
88
  <div style='margin-bottom: 20px;'>
89
+ <h2 style='color: #333; margin: 0 0 10px 0;'>Spaces by {USERNAME}</h2>
90
+ <p style='color: #666; margin: 0;'>Found {len(user_spaces)} public spaces</p>
91
  </div>
92
  <div style='
93
  display: grid;
 
102
  return html_content
103
 
104
  except Exception as e:
105
+ print(f"Error: {str(e)}")
106
  return f"""
107
  <div style='padding: 20px; text-align: center; color: #666;'>
108
  <h2>Error occurred while fetching spaces</h2>
109
  <p>Error details: {str(e)}</p>
110
+ <p>Please try again later.</p>
111
  </div>
112
  """
113
 
 
116
  fn=get_user_spaces,
117
  inputs=None,
118
  outputs=gr.HTML(),
119
+ title=f"Hugging Face Spaces Dashboard - {USERNAME}",
120
  description=f"Displays public Spaces from {USERNAME}",
121
  theme=gr.themes.Soft(),
122
  css="""
 
126
  """
127
  )
128
 
129
+ # Launch the Gradio app
130
  if __name__ == "__main__":
131
+ app.launch()