miniwebapp / app.py
dragxd's picture
Add all project files for Telegram Mini Web App
b519558
from fastapi import FastAPI, Query, HTTPException
from fastapi.responses import JSONResponse, RedirectResponse
from fastapi.staticfiles import StaticFiles
from youtube_api import YouTubeAPI
import uvicorn
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
yt_api = YouTubeAPI()
@app.get("/")
def root():
return RedirectResponse(url="/static/index.html")
@app.get("/search")
async def search(q: str = Query(..., description="Search query")):
results = await yt_api.search(q, limit=10)
# Only return relevant fields
filtered = [
{
"title": r["title"],
"duration": r["duration"],
"id": r["id"],
"link": r["link"],
"thumbnails": r["thumbnails"],
}
for r in results
]
return JSONResponse(filtered)
@app.get("/stream")
async def stream(url: str = Query(..., description="YouTube video URL")):
try:
stream_url = await yt_api.get_stream_url(url, audio_only=True)
return RedirectResponse(url=stream_url)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__":
uvicorn.run("app:app", host="0.0.0.0", port=7860, reload=True)