File size: 4,125 Bytes
f61429a 514cd38 f61429a 060cebe 059f849 514cd38 059f849 514cd38 d51b0b3 059f849 060cebe 059f849 060cebe 059f849 060cebe d51b0b3 060cebe d51b0b3 060cebe d51b0b3 514cd38 059f849 060cebe f61429a 060cebe fbd7b3f 060cebe f61429a 060cebe f61429a 060cebe 2d1b715 060cebe d51b0b3 060cebe 514cd38 060cebe f61429a 514cd38 059f849 514cd38 d51b0b3 514cd38 f61429a 514cd38 d51b0b3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 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 112 113 114 115 116 117 118 |
import requests
import gradio as gr
from datetime import datetime
# ํ
์คํธ๋ฅผ ์ํด Gradio ๊ณต์ ๊ณ์ ์ผ๋ก ๋ณ๊ฒฝ
USERNAME = "gradio"
def format_timestamp(timestamp):
if timestamp:
dt = datetime.fromisoformat(timestamp.replace('Z', '+00:00'))
return dt.strftime('%Y-%m-%d %H:%M')
return 'N/A'
def get_space_card(space):
"""Generate HTML card for a space"""
return f"""
<div style='border: 1px solid #ddd; padding: 15px; margin: 10px; border-radius: 8px;
background-color: white; box-shadow: 2px 2px 5px rgba(0,0,0,0.1);
transition: transform 0.2s ease-in-out;'
onmouseover='this.style.transform="scale(1.02)"'
onmouseout='this.style.transform="scale(1)"'>
<h3 style='color: #2d2d2d; margin: 0 0 10px 0;'>
<a href='{space.get("url", "#")}' target='_blank'
style='text-decoration: none; color: #2d2d2d;'>
{space.get('title', 'Unnamed Space')}
</a>
</h3>
<p style='margin: 5px 0; color: #666;'>{space.get('description', 'No description available')}</p>
<div style='margin-top: 10px; display: flex; justify-content: space-between; align-items: center;'>
<a href='{space.get("url", "#")}' target='_blank'
style='background-color: #0084ff; color: white; padding: 5px 10px;
border-radius: 5px; text-decoration: none;'>
View Space
</a>
<span style='color: #666;'>
โค๏ธ {space.get('likes', 0)}
</span>
</div>
</div>
"""
def get_user_spaces():
# Hugging Face search API ์ฌ์ฉ
url = "https://huggingface.co/api/spaces"
params = {
"author": USERNAME,
"limit": 100,
"full": True
}
try:
response = requests.get(url, params=params)
print(f"Status Code: {response.status_code}") # ๋๋ฒ๊น
์ฉ
print(f"URL: {response.url}") # ๋๋ฒ๊น
์ฉ
print(f"Response: {response.text[:500]}...") # ๋๋ฒ๊น
์ฉ
if response.status_code != 200:
return f"Error: Failed to fetch spaces (Status Code: {response.status_code})"
spaces = response.json()
if not spaces:
# ๋ค๋ฅธ API ์๋ํฌ์ธํธ ์๋
alternate_url = f"https://huggingface.co/api/spaces/{USERNAME}"
response = requests.get(alternate_url)
spaces = response.json() if response.status_code == 200 else []
if not spaces:
return "No public Spaces found for this user."
if not isinstance(spaces, list):
spaces = [spaces]
# Create HTML grid layout
html_content = f"""
<div style='padding: 20px; background-color: #f5f5f5;'>
<div style='margin-bottom: 20px;'>
<p style='color: #666; margin: 0;'>Found {len(spaces)} public spaces for {USERNAME}</p>
</div>
<div style='
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 20px;
'>
{"".join(get_space_card({
'title': space.get('id', '').split('/')[-1],
'description': space.get('description', ''),
'url': f"https://huggingface.co/spaces/{space.get('id', '')}",
'likes': space.get('likes', 0)
}) for space in spaces)}
</div>
</div>
"""
return html_content
except Exception as e:
print(f"Error: {str(e)}") # ๋๋ฒ๊น
์ฉ
return f"Error occurred: {str(e)}"
# Creating the Gradio interface
app = gr.Interface(
fn=get_user_spaces,
inputs=None,
outputs=gr.HTML(),
title=f"Hugging Face Public Spaces - {USERNAME}",
description=f"Displays public Spaces from {USERNAME}",
theme=gr.themes.Soft(),
css="""
.gradio-container {
max-width: 100% !important;
}
"""
)
# Launch the Gradio app
if __name__ == "__main__":
app.launch() |