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)