added support for movie search
This commit is contained in:
parent
3117bac8a9
commit
29f0e73c0b
18 changed files with 198 additions and 32 deletions
0
movie_db/__init__.py
Normal file
0
movie_db/__init__.py
Normal file
3
movie_db/admin.py
Normal file
3
movie_db/admin.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
6
movie_db/apps.py
Normal file
6
movie_db/apps.py
Normal file
|
@ -0,0 +1,6 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class MoviedbConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'movie_db'
|
39
movie_db/db_providers/omdb.py
Normal file
39
movie_db/db_providers/omdb.py
Normal file
|
@ -0,0 +1,39 @@
|
|||
import logging
|
||||
import os
|
||||
|
||||
from movie_db.movie_db import MovieDB
|
||||
import requests
|
||||
|
||||
from movie_db.serializers import MovieSerializer, MovieResultSerializer
|
||||
|
||||
|
||||
class OMDb(MovieDB):
|
||||
def __init__(self):
|
||||
api_key = os.getenv("OMDB_API_KEY")
|
||||
logging.log(1, f"WTF: {api_key}")
|
||||
self.api_key = f"{api_key}"
|
||||
self.base_url = "https://www.omdbapi.com/?apikey=" + self.api_key
|
||||
super().__init__()
|
||||
|
||||
def search(self, query, options=None):
|
||||
if options["type"] == "imdb_id":
|
||||
return self.search_by_imdb_id(query)
|
||||
elif options["type"] == "title":
|
||||
return self.search_by_title(query)
|
||||
else:
|
||||
return self.search_by_term(query)
|
||||
|
||||
def search_by_title(self, title):
|
||||
response = requests.get(self.base_url + "&t=" + title).json()
|
||||
return MovieSerializer(response).data
|
||||
|
||||
def search_by_imdb_id(self, imdb_id):
|
||||
response = requests.get(self.base_url + "&i=" + imdb_id).json()
|
||||
return MovieSerializer(response).data
|
||||
|
||||
def search_by_term(self, term):
|
||||
response = requests.get(self.base_url + "&s=" + term).json()
|
||||
try:
|
||||
return MovieResultSerializer(response["Search"], many=True).data
|
||||
except KeyError:
|
||||
return {"error": response}
|
0
movie_db/migrations/__init__.py
Normal file
0
movie_db/migrations/__init__.py
Normal file
3
movie_db/models.py
Normal file
3
movie_db/models.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.db import models
|
||||
|
||||
# Create your models here.
|
8
movie_db/movie_db.py
Normal file
8
movie_db/movie_db.py
Normal file
|
@ -0,0 +1,8 @@
|
|||
from abc import ABC
|
||||
|
||||
class MovieDB(ABC):
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def search(self, query, options=None):
|
||||
pass
|
22
movie_db/serializers.py
Normal file
22
movie_db/serializers.py
Normal file
|
@ -0,0 +1,22 @@
|
|||
from rest_framework import serializers
|
||||
|
||||
|
||||
class MovieSerializer(serializers.Serializer):
|
||||
director = serializers.CharField(source="Director")
|
||||
genre = serializers.CharField(source="Genre")
|
||||
imdb_id = serializers.CharField(source="imdbID")
|
||||
imdb_rating = serializers.CharField(source="imdbRating")
|
||||
media_type = serializers.CharField(source="Type")
|
||||
plot = serializers.CharField(source="Plot")
|
||||
poster = serializers.CharField(source="Poster")
|
||||
runtime = serializers.CharField(source="Runtime")
|
||||
title = serializers.CharField(source="Title")
|
||||
year = serializers.CharField(source="Year")
|
||||
|
||||
|
||||
class MovieResultSerializer(serializers.Serializer):
|
||||
title = serializers.CharField(source="Title")
|
||||
year = serializers.CharField(source="Year")
|
||||
imdb_id = serializers.CharField(source="imdbID")
|
||||
media_type = serializers.CharField(source="Type")
|
||||
poster = serializers.CharField(source="Poster")
|
3
movie_db/tests.py
Normal file
3
movie_db/tests.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
12
movie_db/views.py
Normal file
12
movie_db/views.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
from django.http import JsonResponse
|
||||
from movie_db.db_providers.omdb import OMDb
|
||||
|
||||
|
||||
def omdb_search(request):
|
||||
query = request.GET.get("q")
|
||||
if not query:
|
||||
return JsonResponse({"Error": "Missing query"}, status=400)
|
||||
|
||||
search_type = request.GET.get("type")
|
||||
omdb = OMDb()
|
||||
return JsonResponse(omdb.search(query, {"type": search_type}), safe=False)
|
Loading…
Add table
Add a link
Reference in a new issue