from playwright.sync_api import sync_playwright
import time
import webbrowser
import pyautogui
def _wait_for_browser_close():
# This function just waits until user closes the browser
while True:
try:
# if browser closed -> error
time.sleep(1)
except:
break
def play_youtube_direct(query: str):
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto(
f"https://www.youtube.com/results?search_query={query.replace(' ', '+')}",
wait_until="domcontentloaded"
)
page.wait_for_timeout(4000)
# Click the first video ONLY (not shorts)
page.locator("ytd-video-renderer").first.click()
# Wait until user closes browser
while True:
try:
browser.is_connected()
time.sleep(1)
except:
break
return {"status": "success", "message": "Playing song in VIDEO section. Response returns after browser close."}
def play_trending_music():
url = "https://www.youtube.com/feed/trending"
webbrowser.open(url)
time.sleep(5)
pyautogui.press("tab")
time.sleep(0.3)
pyautogui.press("enter")
_wait_for_browser_close()
return {"status": "success", "message": "Trending music playing (Browser closed)"}
def play_youtube_from_favourites(favourite: str):
url = f"https://www.youtube.com/results?search_query={favourite}"
webbrowser.open(url)
time.sleep(5)
pyautogui.press("tab")
time.sleep(0.3)
pyautogui.press("enter")
_wait_for_browser_close()
return {"status": "success", "message": "Favourite music playing (Browser closed)"}
def play_youtube_mood(mood: str):
url = f"https://www.youtube.com/results?search_query={mood} music"
webbrowser.open(url)
time.sleep(5)
pyautogui.press("tab")
time.sleep(0.3)
pyautogui.press("enter")
_wait_for_browser_close()
return {"status": "success", "message": "Mood music playing (Browser closed)"}