diff --git a/source/main/models.py b/source/main/models.py index c8d3335..70be90f 100644 --- a/source/main/models.py +++ b/source/main/models.py @@ -200,6 +200,8 @@ class MovieQuerySet(models.QuerySet): html = BeautifulSoup(raw, "lxml") for ref in html.find_all("sup", "reference"): ref.decompose() + for crossref in html.find_all("dl"): + crossref.decompose() clean = list(map(lambda x: str(x), html.body.children)) return " ".join(clean) @@ -429,6 +431,40 @@ class MovieQuerySet(models.QuerySet): else: return None + def api(self, request): + """ + Obtiene resultados de la API. + """ + msg = f"Vista {request.get_host()}/help/#api para más información." + result = {"ERROR": msg} + try: + if request.GET.get("q"): + query = request.GET["q"] + result = {"movies": Movie.objects.get_movies(query)} + elif request.GET.get("id"): + query = request.GET["id"] + result = {"movie": Movie.objects.get_movie_by_id(query)} + else: + result["Exception"] = f"Invalid {request.GET}" + except Exception: + result["Exception"] = f"Invalid {request.GET}" + if request.user.is_authenticated: + return result + else: + return self.clean_api_response(result) + + def clean_api_response(self, result): + """ + Elimina la URL de la película para usuarios no autenticados. + """ + url = "file_name" + if "movies" in result: + for movie in result["movies"]: + del movie[url] + elif "movie" in result: + del result["movie"][url] + return result + def upload_cartel(instance, filename): first = filename[0].upper() diff --git a/source/main/views.py b/source/main/views.py index 6e51182..0cb8760 100644 --- a/source/main/views.py +++ b/source/main/views.py @@ -1,5 +1,6 @@ from django.shortcuts import render from django.http import HttpResponse +from django.http import JsonResponse from django.db.models import F from django.views.decorators.csrf import csrf_exempt @@ -38,3 +39,8 @@ def bugs(request): def movie(request, id): context = {"movie": Movie.objects.get_movie_by_id(id)} return render(request, "movie.html", context) + + +def api(request): + context = Movie.objects.api(request) + return JsonResponse(context) diff --git a/source/mauflix/urls.py b/source/mauflix/urls.py index 5a4e6ec..f5a2e96 100644 --- a/source/mauflix/urls.py +++ b/source/mauflix/urls.py @@ -4,26 +4,17 @@ from django.conf import settings from django.conf.urls.static import static from django.conf.urls import include -# ~ from tastypie.api import Api - from main import views from main.feeds import LatestMoviesFeed -# ~ from main.api import ResourceMovies - - -# ~ v1_api = Api(api_name="v1") -# ~ v1_api.register(ResourceMovies()) - - urlpatterns = [ path("", views.home, name="home"), path("search/", views.search, name="search"), + path("api/", views.api, name="api"), path("about/", views.about, name="about"), path("help/", views.help, name="help"), path("bugs/", views.bugs, name="bugs"), path("movie/", views.movie, name="movie"), path("ultimas/rss/", LatestMoviesFeed()), path("admin/", admin.site.urls), - # path('api/', include(v1_api.urls)), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/source/templates/help.html b/source/templates/help.html index 5bc1b08..75a1a97 100644 --- a/source/templates/help.html +++ b/source/templates/help.html @@ -12,14 +12,19 @@ Las búsquedas tienen un límite de cien resultados.
  • - Cualquier búsqueda ignora tildes, mayúsculas y eñes, - así que «Iñarritú» + Las búsquedas ignoran mayúsculas, tildes, eñes y signos de puntuación, + así que «¡Iñarritú!» es lo mismo que «inarritu».
  • +
  • + Las búsquedas no buscan palabras exactas, sino las palabras que comienzan + con el término de búsqueda, así que «perro» + también incluye los resultados de «perros». +
  • Cuando una búsqueda encuentra más de cien películas, los cien resultados son seleccionados y ordenados de manera aleatoria: - nunca obtendrás los mismos resultados. + nunca obtendrás los mismos resultados.
  • Refinamiento en las búsquedas

    @@ -34,31 +39,31 @@ t:lucio - Busca «lucio» en los títulos + Busca «lucio» en los títulos o:monkey - Busca «monkey» en los títulos en idioma original + Busca «monkey» en los títulos en idioma original y:1989 - Busca películas publicadas en el año (year) «1989» + Busca películas publicadas en el año (year) «1989» p:México - Busca películas hechas en el país «México» + Busca películas hechas en el país «México» d:varda - Busca películas dirigidas por «varda» + Busca películas dirigidas por «varda» a:uma - Busca películas en donde actúe «uma» + Busca películas en donde actúe «uma» g:drama - Busca películas del género «drama» + Busca películas del género «drama» @@ -73,6 +78,19 @@ Se pueden usar varias palabras con prefijos o no para restringir la búsqueda, como en «p:mexico d:buñuel cielo». +
  • + La inexactitud en los resultados permite búsquedas más generales en los campos. + +
  • API

    @@ -87,14 +105,14 @@

    Es decir, en lugar de search/?q=p:mexico+d:cuaron usa - api/?q=p:mexico+d:cuaron. + api/?q=p:mexico+d:cuaron.

    Obtención de ficha

    Para obtener una película en específico solo necesitas su ID.

    Por ejemplo, para obtener la ficha de Gremlins usa - api/?id=1596. + api/?id=1596.

    Happy hacking 😎