|
from flask import Flask, render_template, jsonify, request |
|
from ytmusicapi import YTMusic |
|
import os |
|
import logging |
|
import requests |
|
from datetime import datetime, timedelta |
|
import time |
|
import asyncio |
|
|
|
|
|
app = Flask(__name__) |
|
ytmusic = YTMusic() |
|
|
|
@app.route('/') |
|
def index(): |
|
return render_template('index.html') |
|
|
|
@app.route('/search', methods=['POST']) |
|
def search(): |
|
query = request.json.get('query', '') |
|
search_results = ytmusic.search(query, filter="songs") |
|
return jsonify(search_results) |
|
|
|
@app.route('/searcht', methods=['POST']) |
|
def searcht(): |
|
query = request.json.get('query', '') |
|
search_results = ytmusic.search(query, filter="songs") |
|
first_song = next((song for song in search_results if 'videoId' in song and song['videoId']), {}) if search_results else {} |
|
return jsonify(first_song) |
|
|
|
|
|
async def get_track_download_url( |
|
apis = [ |
|
"https://cobalt-api.ayo.tf", |
|
"http://34.107.254.11" |
|
] |
|
|
|
for api_url in apis: |
|
try: |
|
logger.info(f"Attempting to get download URL from: {api_url}") |
|
response = requests.post(api_url, timeout=20, data={"url": "https://youtu.be/8nBFqZppIF0"}, headers={"Accept": "application/json", "Content-Type": "application/json"}) |
|
if response.status_code == 200: |
|
download_url = response.json().get("url") |
|
if download_url: |
|
logger.info(f"Successfully obtained download URL from {api_url}") |
|
return download_url |
|
except requests.exceptions.RequestException as e: |
|
logger.warning(f"Failed to get download URL from {api_url}: {str(e)}") |
|
continue |
|
|
|
logger.error(f"No download URL found for track {track_id}") |
|
raise HTTPException(status_code=404, detail="Download URL not found") |
|
) |
|
|
|
@app.post('/track_dl') |
|
def track_dl( |
|
track_id=request.json.get('track_id', '') |
|
dl_url = await get_track_download_url(url) |
|
result = {"url": dl_url} |
|
return jsonify(result) |
|
) |
|
|
|
|
|
@app.route('/get_artist', methods=['GET']) |
|
def get_artist(): |
|
artist_id = request.args.get('id') |
|
artist_info = ytmusic.get_artist(artist_id) |
|
return jsonify(artist_info) |
|
|
|
@app.route('/get_album', methods=['GET']) |
|
def get_album(): |
|
album_id = request.args.get('id') |
|
album_info = ytmusic.get_album(album_id) |
|
return jsonify(album_info) |
|
|
|
@app.route('/get_song', methods=['GET']) |
|
def get_song(): |
|
song_id = request.args.get('id') |
|
song_info = ytmusic.get_song(song_id) |
|
return jsonify(song_info) |
|
|
|
if __name__ == '__main__': |
|
app.run(host='0.0.0.0', port=7860) |
|
|