Spaces:
Sleeping
Sleeping
import gradio as gr | |
from scrape_fake_app import get_homework,get_timetable | |
import subprocess | |
import os | |
from dotenv import load_dotenv | |
if os.getenv('ENVIRONMENT')=="PROD": | |
print("installing playwright firefox") | |
subprocess.run(["playwright","install","firefox"]) | |
def fetch_homework(date:str='today') -> str: | |
""" | |
description: | |
fetch the homeworks. | |
Args: | |
date: any string, default "today" | |
Returns: | |
The string describing the homeworks | |
""" | |
return get_homework() | |
def fetch_timetable(date:str='today') -> str: | |
""" | |
description: | |
fetch the timetable | |
Args: | |
date: any string, default "today" | |
Returns: | |
The string describing the timetable | |
""" | |
return get_timetable() | |
title="<h2>Gradio MCP Hackathon: fake-app-scraper</h2>" | |
description="""<div style="font-family: sans-serif; line-height: 1.6;"> | |
<p> | |
This app uses Playwright to log in and scrape the content of the dashboard of the fake app | |
<a href="https://fake-app-omega.vercel.app" target="_blank">fake-app-omega.vercel.app</a>. | |
</p> | |
<p> | |
The starting point was to provide an LLM-friendly, API-fied version of a real app that does not provide any API. Used as an MCP server, any user of the app could simply ask their AI assistant to fetch information from their dashboard. | |
</p> | |
<h3>Problem</h3> | |
<p> | |
When run locally, the app can take the credentials as environment variables to log into the user's dashboard. However, when hosted as a Hugging Face Space, I couldn't find a way to send the credentials securely—i.e., without explicitly providing them to the LLM. | |
</p> | |
<p> | |
In conclusion, as it stands, this app together with the fake Next.js app only serves demonstration or educational purposes and does not solve a real-life problem. | |
</p> | |
<p><strong>I’d be happy to get any suggestions on how to send credentials in the context of a Gradio HF Space–hosted app.</strong></p> | |
</div> | |
""" | |
images="""<img src="gradio_api/file=login.png" alt="login" style="max-width: 35%; margin-right: 10px;" /> | |
<img src="gradio_api/file=dashboard.png" alt="dashboard" style="max-width: 35%;" /> | |
""" | |
with gr.Blocks() as demo: | |
# Add title and markdown | |
with gr.Row(): | |
gr.HTML(title) | |
with gr.Row(): | |
with gr.Column(): | |
homeworks_btn = gr.Button("Homeworks") | |
homeworks_output = gr.Textbox(label="Homeworks Result", lines=5) | |
with gr.Column(): | |
timetable_btn = gr.Button("Timetable") | |
timetable_output = gr.Textbox(label="Timetable Result", lines=5) | |
with gr.Row(): | |
date = gr.Textbox(label="date",visible=False) | |
with gr.Row(): | |
gr.HTML(description) | |
gr.HTML(images) | |
homeworks_btn.click(fn=fetch_homework, | |
inputs=[date], | |
outputs=homeworks_output) | |
timetable_btn.click(fn=fetch_timetable, | |
inputs=[date], | |
outputs=timetable_output) | |
demo.launch(mcp_server=True,allowed_paths=["/"]) | |