summaryrefslogtreecommitdiff
path: root/api/video.php
blob: 00c8214249354bcc541b692ad864e5c2cda2cc62 (plain)
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
<?php

require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.inc"; global $isLoggedIn;
if (!$isLoggedIn) header("Location: /-/login") and die();

if (isset($_GET['id'])) {
    header("Content-Type: application/json");
    $data = json_decode(exec("yt-dlp -q -x --no-playlist --skip-download --dump-json \"https://www.youtube.com/watch?v=" . str_replace('"', '\'', $_GET['id']) . "\""), true);
    $qualities = array_values(array_filter(array_map(function ($i) {
        return [
            "quality" => $i["height"],
            "id" => $i['format_id']
        ];
    }, $data["formats"]), function ($i) {
        return !is_null($i["quality"]);
    }));
    $hd = array_values(array_filter($qualities, function ($i) {
        return $i["quality"] >= 720;
    }));
    $selected = count($hd) > 0 ? $hd[0] : $qualities[count($qualities) - 1];
    $stream = array_values(array_filter($data["formats"], function ($i) use ($selected) {
        return $i["height"] === $selected["quality"] && $i["acodec"] !== null && $i["acodec"] !== "none";
    }))[0];

    echo(json_encode([
        "title" => $data["fulltitle"],
        "author" => $data["channel"],
        "count" => [
            "channel" => $data["channel_follower_count"],
            "likes" => $data["like_count"],
            "views" => $data["view_count"]
        ],
        "duration" => $data["duration"],
        "stream" => $selected,
        "url" => $stream["url"],
        "duration_pretty" => $stream["duration_string"],
        "poster" => $data["thumbnail"],
    ], JSON_PRETTY_PRINT));
}