Spaces:
Building
on
CPU Upgrade
Building
on
CPU Upgrade
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() |