From 58ad3f729c5dd3cafd7c897c8c07881a9969a1e0 Mon Sep 17 00:00:00 2001 From: Arti Zirk Date: Sun, 27 Nov 2016 14:44:31 +0200 Subject: [PATCH] Add api endpoint for getting the stream url --- api/karumedia/__init__.py | 18 +++++++++++++++++- api/karumedia/controllers.py | 26 +++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/api/karumedia/__init__.py b/api/karumedia/__init__.py index 47a36a9..8c91a9a 100644 --- a/api/karumedia/__init__.py +++ b/api/karumedia/__init__.py @@ -17,7 +17,20 @@ class AboutResource(): } r.update({"endpoints":[ {"url":"/", - "description":"About this API"} + "method":"GET", + "description":"About this API"}, + {"url":"/movies", + "method":"GET", + "description":"All movies on this server"}, + {"url":"/movies/{movie}", + "method":"GET", + "description":"Movie details"}, + {"url":"/movies/{movie}/stream", + "method":"GET", + "description":"Returns list of stream urls for the movie"}, + {"url":"/magnet", + "method":"POST", + "description":"Add a movie via magnet hash"} ]}) resp.body = json.dumps(r, indent=4) @@ -31,3 +44,6 @@ path = Path("/home/arti/Videod") app.add_route("/movies", MoviesCollection(path)) app.add_route("/movies/{movie}", MoviesResource(path)) +app.add_route("/movies/{movie}/stream", MovieStreamUrlResource(path)) + +app.add_route("/magnet", MagnetResource()) diff --git a/api/karumedia/controllers.py b/api/karumedia/controllers.py index dd3b5f9..42353ac 100644 --- a/api/karumedia/controllers.py +++ b/api/karumedia/controllers.py @@ -1,3 +1,4 @@ +import os import re import json from falcon import HTTPInternalServerError, HTTP_201 @@ -5,11 +6,11 @@ from .tools import TODOException movie_name_and_year = re.compile("(.*)\((.*)\)") -class BaseResource(): +class BaseMovieResource(): def __init__(self, path): self.path = path -class MoviesCollection(BaseResource): +class MoviesCollection(BaseMovieResource): def on_get(self, req, resp): movie_paths = [p for p in (self.path / 'Filmid').iterdir() if p.is_dir()] @@ -69,7 +70,26 @@ class MoviesCollection(BaseResource): } resp.json = jobj -class MoviesResource(BaseResource): +class MoviesResource(BaseMovieResource): def on_get(self, req, resp, movie): resp.json = [{"path": self.path, "movie":movie}] + +class MovieStreamUrlResource(BaseMovieResource): + + def on_get(self, req, resp, movie): + movie_name = movie + path = self.path / "Filmid" + movie_files = os.listdir(str(path / movie_name)) + sizes = [] + for movie_file in movie_files: + sizes.append((os.path.getsize(str(path / movie_name / movie_file)), movie_file)) + file_name = sorted(sizes)[-1][1] + resp.json = { + "default": 'https://media.arti.ee/Filmid/{}/{}'.format(movie_name.replace(" ", "%20"), file_name.replace(" ", "%20")) + } + +class MagnetResource(): + + def on_post(self, req, resp): + resp.json = [req.json]