|
|
|
from flask import Flask, render_template, request |
|
import yt_dlp |
|
|
|
app = Flask(__name__) |
|
|
|
|
|
def search_youtube(query, order="relevance", page=1, results_per_page=10): |
|
ydl_opts = { |
|
"quiet": True, |
|
"extract_flat": True, |
|
"force_generic_extractor": True, |
|
"default_search": "ytsearch", |
|
"noplaylist": True, |
|
} |
|
|
|
with yt_dlp.YoutubeDL(ydl_opts) as ydl: |
|
result = ydl.extract_info(f"ytsearch{page * results_per_page}:{query}", download=False) |
|
|
|
videos = result.get("entries", []) |
|
|
|
|
|
if order == "date": |
|
videos.sort(key=lambda x: x.get("upload_date", "0"), reverse=True) |
|
elif order == "view_count": |
|
videos.sort(key=lambda x: x.get("view_count", 0), reverse=True) |
|
|
|
return videos[:results_per_page] |
|
|
|
@app.route("/", methods=["GET", "POST"]) |
|
def index(): |
|
query = request.args.get("q", "") |
|
order = request.args.get("order", "relevance") |
|
page = int(request.args.get("page", 1)) |
|
|
|
videos = search_youtube(query, order, page) if query else [] |
|
|
|
return render_template("index.html", query=query, order=order, page=page, videos=videos) |
|
|
|
if __name__ == "__main__": |
|
app.run(debug=True, host="0.0.0.0", port=7860) |