youtube-search / app.py
adarshajay's picture
Update app.py
219c988 verified
raw
history blame
2.01 kB
import gradio as gr
import requests
import numpy as np
import os
from pathlib import Path
from PIL import Image
from dotenv import load_dotenv
load_dotenv()
# YouTube Tool
API_URL = "https://youtube138.p.rapidapi.com/search/"
HEADERS = {
"x-rapidapi-key": os.getenv("Rapidapi"),
"x-rapidapi-host": "youtube138.p.rapidapi.com"
}
def search_youtube(query: str) -> str:
params = {"q": query, "hl": "en", "gl": "US"}
try:
response = requests.get(API_URL, headers=HEADERS, params=params)
response.raise_for_status()
data = response.json()
videos = data.get("contents", [])
results = []
for video in videos:
if "video" in video:
v = video["video"]
title = v.get("title", "")
video_id = v.get("videoId", "")
link = f"https://www.youtube.com/watch?v={video_id}"
results.append(f"{title}\n{link}\n")
if len(results) >= 5:
break
return "\n".join(results) if results else "No videos found."
except Exception as e:
return f"Error: {str(e)}"
# Other Tools
def prime_factors(n):
n = int(n)
if n <= 1:
raise ValueError("Input must be an integer greater than 1.")
factors = []
while n % 2 == 0:
factors.append(2)
n //= 2
divisor = 3
while divisor * divisor <= n:
while n % divisor == 0:
factors.append(divisor)
n //= divisor
divisor += 2
if n > 1:
factors.append(n)
return factors
# Tabbed Tool Interface
demo = gr.TabbedInterface(
[
gr.Interface(search_youtube, gr.Textbox(label="YouTube Query"), gr.Textbox(label="Top 5 Results"), api_name="youtube_search"),
gr.Interface(prime_factors, gr.Textbox(), gr.Textbox(), api_name="prime_factors"),
],
[
"YouTube Search",
"Prime Factors",
]
)
if __name__ == "__main__":
demo.launch(mcp_server=True)