File size: 4,548 Bytes
f61429a
 
514cd38
f61429a
4805e44
060cebe
059f849
514cd38
 
 
 
 
 
4805e44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
514cd38
059f849
4805e44
 
 
514cd38
 
d51b0b3
 
 
 
059f849
4805e44
059f849
4805e44
059f849
 
4805e44
 
 
 
 
d51b0b3
4805e44
d51b0b3
 
 
514cd38
 
 
059f849
4805e44
 
060cebe
4805e44
 
 
 
 
 
 
 
 
 
 
 
 
 
f61429a
4805e44
 
 
 
 
 
 
 
 
 
d51b0b3
060cebe
514cd38
4805e44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
060cebe
4805e44
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
119
120
121
122
123
124
125
126
127
128
129
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 search_spaces():
    """Search for spaces using the Hugging Face search API"""
    url = "https://huggingface.co/api/spaces"
    headers = {"Accept": "application/json"}
    
    try:
        # First, try to get all spaces
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            all_spaces = response.json()
            # Filter spaces by username
            user_spaces = [space for space in all_spaces 
                         if space.get('author', '').lower() == USERNAME.lower()]
            return user_spaces
    except Exception as e:
        print(f"Error in search_spaces: {e}")
    return []

def get_space_card(space):
    """Generate HTML card for a space"""
    space_id = space.get('id', '')
    space_name = space_id.split('/')[-1] if space_id else 'Unknown'
    
    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='https://huggingface.co/spaces/{space_id}' target='_blank' 
               style='text-decoration: none; color: #2d2d2d;'>
                {space_name}
            </a>
        </h3>
        <p style='margin: 5px 0;'><strong>Author:</strong> {space.get('author', 'Unknown')}</p>
        <p style='margin: 5px 0;'><strong>SDK:</strong> {space.get('sdk', 'N/A')}</p>
        <p style='margin: 5px 0;'><strong>Likes:</strong> {space.get('likes', 0)} โค๏ธ</p>
        <div style='margin-top: 10px;'>
            <a href='https://huggingface.co/spaces/{space_id}' target='_blank' 
               style='background-color: #0084ff; color: white; padding: 5px 10px; 
                      border-radius: 5px; text-decoration: none; display: inline-block;'>
                View Space
            </a>
        </div>
    </div>
    """

def get_user_spaces():
    # Get spaces for the user
    spaces = search_spaces()
    
    if not spaces:
        # Try alternative search method
        try:
            response = requests.get(
                f"https://huggingface.co/search/full-text",
                params={"q": f"user:{USERNAME} type:space"},
                headers={"Accept": "application/json"}
            )
            if response.status_code == 200:
                search_results = response.json()
                if 'hits' in search_results:
                    spaces = search_results['hits']
        except Exception as e:
            print(f"Error in alternative search: {e}")

    if not spaces:
        return """
        <div style='padding: 20px; text-align: center; color: #666;'>
            <h2>No public Spaces found for user: {USERNAME}</h2>
            <p>This could be because:</p>
            <ul style='list-style: none; padding: 0;'>
                <li>The user has no public spaces</li>
                <li>The username might be incorrect</li>
                <li>There might be an issue with the API</li>
            </ul>
        </div>
        """

    # 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(space) for space in spaces)}
        </div>
    </div>
    """

    return html_content

# 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()