File size: 1,398 Bytes
64dddeb 3228b7c a8d6ea8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#contents.twoColumnSearchResultsRenderer.primaryContents.sectionListRenderer.contents[0].itemSectionRenderer.contents
from flask import Flask, render_template, request
import yt_dlp
app = Flask(__name__)
# YouTubeの検索を行う関数
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) |