diff options
Diffstat (limited to 'api/video.php')
-rw-r--r-- | api/video.php | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/api/video.php b/api/video.php new file mode 100644 index 0000000..7ac32a1 --- /dev/null +++ b/api/video.php @@ -0,0 +1,39 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; 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)); +}
\ No newline at end of file |