Files
you-music/backend/app/api/search.py
T
2025-10-30 14:45:41 +11:00

53 lines
1.6 KiB
Python

from fastapi import APIRouter, Query
from typing import List
from app.services.search import music_searcher
from app.schemas.schemas import SearchResult
router = APIRouter()
@router.get("/", response_model=dict)
async def search_music(
q: str = Query(..., min_length=1),
source: str = Query("all", regex="^(all|youtube|bilibili)$"),
limit: int = Query(10, ge=1, le=50)
):
"""
Search for music across different sources
- **q**: Search query (song name, artist, etc.)
- **source**: Source to search (all, youtube, bilibili)
- **limit**: Maximum number of results per source
"""
if source == "all":
results = await music_searcher.search_all(q, limit)
elif source == "youtube":
youtube_results = await music_searcher.search_youtube(q, limit)
results = {"youtube": youtube_results, "bilibili": []}
elif source == "bilibili":
bilibili_results = await music_searcher.search_bilibili(q, limit)
results = {"youtube": [], "bilibili": bilibili_results}
else:
results = {"youtube": [], "bilibili": []}
return results
@router.get("/youtube", response_model=List[SearchResult])
async def search_youtube(
q: str = Query(..., min_length=1),
limit: int = Query(10, ge=1, le=50)
):
"""Search YouTube for music"""
return await music_searcher.search_youtube(q, limit)
@router.get("/bilibili", response_model=List[SearchResult])
async def search_bilibili(
q: str = Query(..., min_length=1),
limit: int = Query(10, ge=1, le=50)
):
"""Search Bilibili for music"""
return await music_searcher.search_bilibili(q, limit)