#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)