mirror of
https://github.com/aykhans/series-robot-web.git
synced 2025-09-09 15:50:44 +00:00
new_episodes added
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from .homepage import homepage_view
|
||||
from .add_series import AddSeriesView
|
||||
from .update_series import UpdateSeriesView
|
||||
from .delete_series import SeriesDeleteView
|
||||
from .delete_series import SeriesDeleteView
|
||||
from .new_episodes import new_episodes_view
|
@@ -5,6 +5,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.contrib import messages
|
||||
from django.shortcuts import redirect
|
||||
from requests import get
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class AddSeriesView(LoginRequiredMixin, CreateView):
|
||||
@@ -28,11 +29,10 @@ class AddSeriesView(LoginRequiredMixin, CreateView):
|
||||
return redirect('add-series')
|
||||
data = raw_data.json()
|
||||
|
||||
if 'Maximum usage' in data['errorMessage']:
|
||||
messages.info(self.request, f"IMDB API: {data['errorMessage']}")
|
||||
return redirect('add-series')
|
||||
|
||||
if data['errorMessage']:
|
||||
if 'Maximum usage' in data['errorMessage']:
|
||||
messages.info(self.request, f"IMDB API: {data['errorMessage']}")
|
||||
return redirect('add-series')
|
||||
form.add_error('imdb_id', 'ID is not correct.')
|
||||
return self.form_invalid(form)
|
||||
|
||||
@@ -49,13 +49,31 @@ class AddSeriesView(LoginRequiredMixin, CreateView):
|
||||
if raw_data.status_code != 200:
|
||||
messages.info(self.request, 'TV Series can not added. Please try again.')
|
||||
return redirect('add-series')
|
||||
episodes = raw_data.json()['episodes']
|
||||
data = raw_data.json()
|
||||
|
||||
if data['errorMessage']:
|
||||
if 'Maximum usage' in data['errorMessage']:
|
||||
messages.info(self.request, f"IMDB API: {data['errorMessage']}")
|
||||
return redirect('add-series')
|
||||
form.add_error('imdb_id', 'ID is not correct.')
|
||||
return self.form_invalid(form)
|
||||
episodes = data['episodes']
|
||||
|
||||
episodes_count = len(episodes)
|
||||
if series.last_episode > episodes_count:
|
||||
form.add_error('last_episode', 'The episode number is not correct.')
|
||||
return self.form_invalid(form)
|
||||
|
||||
released_date = episodes[int(series.last_episode) - 1]['released'].replace('.', '')
|
||||
now_date = datetime.strptime(datetime.strftime(datetime.utcnow(),'%d %b %Y'), '%d %b %Y')
|
||||
try:
|
||||
last_episode_date = datetime.strptime(released_date, '%d %b %Y')
|
||||
if (last_episode_date - now_date).days > 0:
|
||||
raise ValueError
|
||||
except ValueError:
|
||||
form.add_error('last_episode', 'This episode has not been published yet.')
|
||||
return self.form_invalid(form)
|
||||
|
||||
series.save()
|
||||
form.save_m2m()
|
||||
return super().form_valid(form)
|
||||
|
68
src/series/views/new_episodes.py
Normal file
68
src/series/views/new_episodes.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from django.shortcuts import (render,
|
||||
redirect)
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib import messages
|
||||
from account.models import User
|
||||
from requests import get
|
||||
from datetime import datetime
|
||||
from django.core.paginator import Paginator
|
||||
|
||||
|
||||
def get_request(request, link):
|
||||
raw_data = get(link)
|
||||
|
||||
if raw_data.status_code != 200:
|
||||
messages.info(request, "Can't search for TV Series. Please try again.")
|
||||
return redirect('homepage')
|
||||
data = raw_data.json()
|
||||
|
||||
if data['errorMessage']:
|
||||
messages.info(request, f"IMDB API: {data['errorMessage']}")
|
||||
return redirect('homepage')
|
||||
return data
|
||||
|
||||
def episode_counter(request, s, data):
|
||||
now_date = datetime.strptime(datetime.strftime(datetime.utcnow(),'%d %b %Y'), '%d %b %Y')
|
||||
new_episodes_count = 0
|
||||
|
||||
for n in data['tvSeriesInfo']['seasons'][data['tvSeriesInfo']['seasons'].index(str(s.last_season)):]:
|
||||
data = get_request(request, f"https://imdb-api.com/en/API/SeasonEpisodes/{request.user.imdb_api_key}/{s.imdb_id}/{n}")
|
||||
if type(data) is not dict: return data
|
||||
|
||||
episodes = data['episodes']
|
||||
for i in range(int(s.last_episode) if n == str(s.last_season) else 0, len(episodes)):
|
||||
released_date = episodes[i]['released'].replace('.', '')
|
||||
try:
|
||||
episode_date = datetime.strptime(released_date, '%d %b %Y')
|
||||
if (episode_date - now_date).days > 0:
|
||||
raise ValueError
|
||||
except ValueError: return new_episodes_count, last_n, last_i+1
|
||||
last_i = i
|
||||
new_episodes_count += 1
|
||||
last_n = n
|
||||
|
||||
return new_episodes_count, n, i+1
|
||||
|
||||
@login_required(login_url='/account/login')
|
||||
def new_episodes_view(request):
|
||||
series = User.objects.get(id=request.user.id).series.filter(show=True).order_by('-id')
|
||||
series_new_episodes = []
|
||||
|
||||
for s in series:
|
||||
data = get_request(request, f"https://imdb-api.com/en/API/Title/{request.user.imdb_api_key}/{s.imdb_id}")
|
||||
if type(data) is not dict: return data
|
||||
data = episode_counter(request, s, data)
|
||||
if type(data) is not list: return data
|
||||
if data[0]:
|
||||
series_new_episodes.append([s,
|
||||
{'count': data[0],
|
||||
'last_season': data[1],
|
||||
'last_episode': data[2]}
|
||||
])
|
||||
|
||||
if series_new_episodes:
|
||||
page = request.GET.get('page')
|
||||
paginator = Paginator(series_new_episodes, 1)
|
||||
return render(request, 'new_episodes.html', context={'data': paginator.get_page(page)})
|
||||
messages.warning(request, "There are no new episodes of any series :(")
|
||||
return redirect('homepage')
|
@@ -6,6 +6,7 @@ from django.contrib import messages
|
||||
from django.shortcuts import (get_object_or_404,
|
||||
redirect)
|
||||
from requests import get
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class UpdateSeriesView(LoginRequiredMixin, UpdateView):
|
||||
@@ -24,18 +25,22 @@ class UpdateSeriesView(LoginRequiredMixin, UpdateView):
|
||||
series = form.save(commit=False)
|
||||
series.user = self.request.user
|
||||
|
||||
if not {'imdb_id', 'last_season', 'last_episode'} & set(form.changed_data):
|
||||
series.save()
|
||||
form.save_m2m()
|
||||
return super().form_valid(form)
|
||||
|
||||
raw_data = get(f"https://imdb-api.com/en/API/Title/{series.user.imdb_api_key}/{series.imdb_id}")
|
||||
|
||||
if raw_data.status_code != 200:
|
||||
messages.info(self.request, 'TV Series can not updated. Please try again.')
|
||||
return redirect('add-series')
|
||||
return redirect('update-series', self.kwargs.get('slug'))
|
||||
data = raw_data.json()
|
||||
|
||||
if 'Maximum usage' in data['errorMessage']:
|
||||
messages.info(self.request, f"IMDB Key: {data['errorMessage']}")
|
||||
return redirect('add-series')
|
||||
|
||||
if data['errorMessage']:
|
||||
if 'Maximum usage' in data['errorMessage']:
|
||||
messages.info(self.request, f"IMDB Key: {data['errorMessage']}")
|
||||
return redirect("update-series", self.kwargs.get('slug'))
|
||||
form.add_error('imdb_id', 'ID is not correct.')
|
||||
return self.form_invalid(form)
|
||||
|
||||
@@ -51,15 +56,32 @@ class UpdateSeriesView(LoginRequiredMixin, UpdateView):
|
||||
raw_data = get(f"https://imdb-api.com/en/API/SeasonEpisodes/{series.user.imdb_api_key}/{series.imdb_id}/{series.last_season}")
|
||||
if raw_data.status_code != 200:
|
||||
messages.info(self.request, 'TV Series can not added. Please try again.')
|
||||
return redirect('add-series')
|
||||
episodes = raw_data.json()['episodes']
|
||||
return redirect('update-series', self.kwargs.get('slug'))
|
||||
data = raw_data.json()
|
||||
|
||||
if data['errorMessage']:
|
||||
if 'Maximum usage' in data['errorMessage']:
|
||||
messages.info(self.request, f"IMDB API: {data['errorMessage']}")
|
||||
return redirect('update-series', self.kwargs.get('slug'))
|
||||
form.add_error('imdb_id', 'ID is not correct.')
|
||||
return self.form_invalid(form)
|
||||
episodes = data['episodes']
|
||||
|
||||
episodes_count = len(episodes)
|
||||
if series.last_episode > episodes_count:
|
||||
form.add_error('last_episode', 'The episode number is not correct.')
|
||||
return self.form_invalid(form)
|
||||
|
||||
released_date = episodes[int(series.last_episode) - 1]['released'].replace('.', '')
|
||||
now_date = datetime.strptime(datetime.strftime(datetime.utcnow(),'%d %b %Y'), '%d %b %Y')
|
||||
try:
|
||||
last_episode_date = datetime.strptime(released_date, '%d %b %Y')
|
||||
if (last_episode_date - now_date).days > 0:
|
||||
raise ValueError
|
||||
except ValueError:
|
||||
form.add_error('last_episode', 'This episode has not been published yet.')
|
||||
return self.form_invalid(form)
|
||||
|
||||
series.save()
|
||||
form.save_m2m()
|
||||
return super().form_valid(form)
|
||||
|
||||
return super().form_valid(form)
|
Reference in New Issue
Block a user