new_episodes added

This commit is contained in:
ayxan
2022-09-01 07:13:27 +04:00
parent d8fe62b23e
commit ad2d78a766
12 changed files with 229 additions and 52 deletions

View File

@@ -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

View File

@@ -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)

View 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')

View File

@@ -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)