Spaces:
Runtime error
Runtime error
import gradio as gr | |
import requests | |
from datetime import datetime, timedelta | |
import pandas as pd | |
import plotly.express as px | |
def get_user_spaces(token): | |
"""์ฌ์ฉ์์ ๋ชจ๋ Space ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค.""" | |
headers = {"Authorization": f"Bearer {token}"} | |
try: | |
# ์ฌ์ฉ์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ | |
user_info = requests.get("https://huggingface.co/api/whoami", headers=headers) | |
user_info.raise_for_status() | |
username = user_info.json().get('name') | |
if not username: | |
return None, "์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค." | |
# ์ฌ์ฉ์์ Space ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ | |
spaces_url = f"https://huggingface.co/api/spaces/{username}" | |
spaces_response = requests.get(spaces_url, headers=headers) | |
spaces_response.raise_for_status() | |
return username, spaces_response.json() | |
except requests.exceptions.RequestException as e: | |
return None, f"API ์์ฒญ ์คํจ: {str(e)}" | |
def get_space_visitors(owner, space_name, token): | |
"""ํน์ Space์ ๋ฐฉ๋ฌธ์ ํต๊ณ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.""" | |
url = f"https://huggingface.co/api/spaces/{owner}/{space_name}/metrics" | |
headers = {"Authorization": f"Bearer {token}"} | |
try: | |
response = requests.get(url, headers=headers) | |
response.raise_for_status() | |
# ์ต๊ทผ 7์ผ๊ฐ์ ๋ฐ์ดํฐ๋ง ํํฐ๋ง | |
today = datetime.now() | |
week_ago = today - timedelta(days=7) | |
daily_visits = {} | |
total_visits = 0 | |
for record in response.json(): | |
date = datetime.fromtimestamp(record['timestamp']) | |
if date >= week_ago: | |
date_str = date.strftime('%Y-%m-%d') | |
visits = record.get('visits', 0) | |
daily_visits[date_str] = daily_visits.get(date_str, 0) + visits | |
total_visits += visits | |
return { | |
'name': space_name, | |
'total_visits': total_visits, | |
'daily_visits': daily_visits | |
} | |
except requests.exceptions.RequestException: | |
return None | |
def analyze_spaces(token): | |
"""๋ชจ๋ Space์ ๋ฐฉ๋ฌธ์ ํต๊ณ๋ฅผ ๋ถ์ํฉ๋๋ค.""" | |
if not token: | |
return "API ํ ํฐ์ ์ ๋ ฅํด์ฃผ์ธ์.", None, None | |
# ์ฌ์ฉ์ ์ ๋ณด์ Space ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ | |
username, spaces_data = get_user_spaces(token) | |
if not username: | |
return f"์ค๋ฅ: {spaces_data}", None, None | |
if not isinstance(spaces_data, list): | |
return "Space ๋ชฉ๋ก์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.", None, None | |
# ๊ฐ Space์ ๋ฐฉ๋ฌธ์ ํต๊ณ ์์ง | |
all_stats = [] | |
daily_data = [] | |
for space in spaces_data: | |
space_name = space.get('id') | |
if space_name: | |
stats = get_space_visitors(username, space_name, token) | |
if stats: | |
all_stats.append(stats) | |
for date, visits in stats['daily_visits'].items(): | |
daily_data.append({ | |
'date': date, | |
'space': space_name, | |
'visits': visits | |
}) | |
if not all_stats: | |
return "๋ฐฉ๋ฌธ์ ํต๊ณ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.", None, None | |
# ๊ฒฐ๊ณผ ํ ์คํธ ์์ฑ | |
result_text = f"๊ณ์ : {username}\n\n" | |
for stats in sorted(all_stats, key=lambda x: x['total_visits'], reverse=True): | |
result_text += f"Space: {stats['name']}\n" | |
result_text += f"์ด ๋ฐฉ๋ฌธ์ ์: {stats['total_visits']}๋ช \n\n" | |
# ๊ทธ๋ํ ์์ฑ | |
if daily_data: | |
df = pd.DataFrame(daily_data) | |
fig = px.line(df, x='date', y='visits', color='space', | |
title=f'Space๋ณ ์ผ์ผ ๋ฐฉ๋ฌธ์ ์', | |
labels={'date': '๋ ์ง', 'visits': '๋ฐฉ๋ฌธ์ ์', 'space': 'Space ์ด๋ฆ'}) | |
# ๋ง๋ ๊ทธ๋ํ ์์ฑ | |
summary_df = pd.DataFrame([(s['name'], s['total_visits']) for s in all_stats], | |
columns=['space', 'total_visits']) | |
summary_fig = px.bar(summary_df, x='space', y='total_visits', | |
title='Space๋ณ ์ด ๋ฐฉ๋ฌธ์ ์', | |
labels={'space': 'Space ์ด๋ฆ', 'total_visits': '์ด ๋ฐฉ๋ฌธ์ ์'}) | |
return result_text, fig, summary_fig | |
return result_text, None, None | |
# Gradio ์ธํฐํ์ด์ค ์์ฑ | |
with gr.Blocks() as app: | |
gr.Markdown(""" | |
# Hugging Face Space ๋ฐฉ๋ฌธ์ ํต๊ณ | |
API ํ ํฐ์ ์ ๋ ฅํ๋ฉด ๋ชจ๋ Space์ ๋ฐฉ๋ฌธ์ ํต๊ณ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. | |
""") | |
with gr.Row(): | |
token_input = gr.Textbox(label="API ํ ํฐ", type="password") | |
submit_btn = gr.Button("ํต๊ณ ํ์ธ") | |
stats_output = gr.Textbox(label="ํต๊ณ ์ ๋ณด", lines=10) | |
plot_output = gr.Plot(label="์ผ๋ณ ๋ฐฉ๋ฌธ์ ์") | |
summary_plot = gr.Plot(label="์ด ๋ฐฉ๋ฌธ์ ์") | |
submit_btn.click( | |
analyze_spaces, | |
inputs=[token_input], | |
outputs=[stats_output, plot_output, summary_plot] | |
) | |
if __name__ == "__main__": | |
app.launch() |