Merge branch 'main' into dev

This commit is contained in:
JackDandy 2024-01-02 11:14:42 +00:00
commit 29dd2e84c6
4 changed files with 26 additions and 20 deletions

View file

@ -15,7 +15,7 @@ jobs:
matrix: matrix:
os: os:
- windows-latest - windows-latest
python-version: ['3.8', '3.9', '3.10', '3.11'] python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
steps: steps:
- name: 'Set up Python ${{ matrix.python-version }}' - name: 'Set up Python ${{ matrix.python-version }}'
uses: actions/setup-python@v4 uses: actions/setup-python@v4
@ -34,7 +34,7 @@ jobs:
matrix: matrix:
os: os:
- ubuntu-latest - ubuntu-latest
python-version: ['3.8', '3.9', '3.10', '3.11'] python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
steps: steps:
- name: 'Set up Python ${{ matrix.python-version }}' - name: 'Set up Python ${{ matrix.python-version }}'
uses: actions/setup-python@v4 uses: actions/setup-python@v4
@ -55,7 +55,7 @@ jobs:
matrix: matrix:
os: os:
- macos-latest - macos-latest
python-version: ['3.8', '3.9', '3.10', '3.11'] python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
steps: steps:
- name: 'Set up Python ${{ matrix.python-version }}' - name: 'Set up Python ${{ matrix.python-version }}'
uses: actions/setup-python@v4 uses: actions/setup-python@v4

View file

@ -24,6 +24,13 @@
* Fix media process being ignored by Plex extras * Fix media process being ignored by Plex extras
### 3.30.6 (2024-01-02 11:05:00 UTC)
* Fix Shows IMDb cards to new layout at IMDb
* Change update fallback zoneinfo to 2023d
* Change add Python 3.12 to the unit tests
### 3.30.5 (2023-12-10 05:00:00 UTC) ### 3.30.5 (2023-12-10 05:00:00 UTC)
* Change allow Python 3.12.1 * Change allow Python 3.12.1

View file

@ -4709,7 +4709,7 @@ class AddShows(Home):
@staticmethod @staticmethod
def parse_imdb_overview(tag): def parse_imdb_overview(tag):
paragraphs = tag.select('.lister-item-content p') paragraphs = tag.select('.dli-plot-container .ipc-html-content-inner-div')
filtered = [] filtered = []
for item in paragraphs: for item in paragraphs:
if not (item.select('span.certificate') or item.select('span.genre') or if not (item.select('span.certificate') or item.select('span.genre') or
@ -4724,7 +4724,7 @@ class AddShows(Home):
filtered = [item_lines] filtered = [item_lines]
elif len(item_lines) == least_lines: elif len(item_lines) == least_lines:
filtered.append(item_lines) filtered.append(item_lines)
overview = None overview = ''
for item_lines in filtered: for item_lines in filtered:
text = ' '.join([item_lines.strip() for item_lines in item_lines]).strip() text = ' '.join([item_lines.strip() for item_lines in item_lines]).strip()
if len(text) and (not overview or (len(text) > len(overview))): if len(text) and (not overview or (len(text) > len(overview))):
@ -4799,19 +4799,19 @@ class AddShows(Home):
img_size = re.compile(r'(?im)(V1[^XY]+([XY]))(\d+)(\D+)(\d+)(\D+)(\d+)(\D+)(\d+)(\D+)(\d+)(.*?)$') img_size = re.compile(r'(?im)(V1[^XY]+([XY]))(\d+)(\D+)(\d+)(\D+)(\d+)(\D+)(\d+)(\D+)(\d+)(.*?)$')
with BS4Parser(html, features=['html5lib', 'permissive']) as soup: with BS4Parser(html, features=['html5lib', 'permissive']) as soup:
show_list = soup.select('.lister-list') show_list = soup.select('.detailed-list-view ')
shows = [] if not show_list else show_list[0].select('.lister-item') shows = [] if not show_list else show_list[0].select('li')
oldest, newest, oldest_dt, newest_dt = None, None, 9999999, 0 oldest, newest, oldest_dt, newest_dt = None, None, 9999999, 0
for row in shows: for row in shows:
try: try:
title = row.select('.lister-item-header a[href*=title]')[0] title = re.sub(r'\d+\.\s(.*)', r'\1', row.select('.ipc-title__text')[0].get_text(strip=True))
url_path = title['href'].strip('/') url_path = re.sub(r'(.*?)(\?ref_=.*)?', r'\1', row.select('.ipc-title-link-wrapper')[0]['href'])
ids = dict(imdb=helpers.parse_imdb_id(url_path)) ids = dict(imdb=helpers.parse_imdb_id(url_path))
year, ended = 2 * [None] year, ended = 2 * [None]
first_aired = row.select('.lister-item-header .lister-item-year') first_aired = row.select('.dli-title-metadata .dli-title-metadata-item')
if len(first_aired): if len(first_aired):
years = re.findall(r'.*?(\d{4})(?:.*?(\d{4}))?.*', first_aired[0].get_text()) years = re.findall(r'.*?(\d{4})(?:.*?(\d{4}))?.*', first_aired[0].get_text(strip=True))
year, ended = years and years[0] or 2 * [None] year, ended = years and years[0] or 2 * [None]
ord_premiered = 0 ord_premiered = 0
started_past = False started_past = False
@ -4821,15 +4821,15 @@ class AddShows(Home):
genres = row.select('.genre') genres = row.select('.genre')
images = {} images = {}
img = row.select('.lister-item-image img') img = row.select('img.ipc-image')
overview = self.parse_imdb_overview(row) overview = self.parse_imdb_overview(row)
rating = row.find('meta', attrs={'itemprop': 'ratingValue'}) rating = row.select_one('.ipc-rating-star').get_text()
rating = None is not rating and rating.get('content') or '' rating = rating and rating.split()[0] or ''
voting = row.find('meta', attrs={'itemprop': 'ratingCount'}) voting = row('span', text=re.compile(r'(?i)vote'))
voting = None is not voting and voting.get('content') or '' voting = voting and re.sub(r'\D', '', voting[0].find_parent('div').get_text()) or ''
img_uri = None img_uri = None
if len(img): if len(img):
img_uri = img[0].get('loadlate') img_uri = img[0].get('src')
match = img_size.search(img_uri) match = img_size.search(img_uri)
if match and 'tv_series.gif' not in img_uri and 'nopicture' not in img_uri: if match and 'tv_series.gif' not in img_uri and 'nopicture' not in img_uri:
scale = (lambda low1, high1: int((float(450) / high1) * low1)) scale = (lambda low1, high1: int((float(450) / high1) * low1))
@ -4849,13 +4849,12 @@ class AddShows(Home):
str_premiered=year or 'No year', str_premiered=year or 'No year',
ended_str=ended or '', ended_str=ended or '',
started_past=started_past, # air time not poss. 16.11.2015 started_past=started_past, # air time not poss. 16.11.2015
genres=('No genre yet' if not len(genres) else genres='',
genres[0].get_text().strip().lower().replace(' |', ',')),
ids=ids, ids=ids,
images='' if not img_uri else images, images='' if not img_uri else images,
overview='No overview yet' if not overview else helpers.xhtml_escape(overview[:250:]), overview='No overview yet' if not overview else helpers.xhtml_escape(overview[:250:]),
rating=0 if not len(rating) else int(helpers.try_float(rating) * 10), rating=0 if not len(rating) else int(helpers.try_float(rating) * 10),
title=title.get_text().strip(), title=title,
url_src_db='https://www.imdb.com/%s/' % url_path.strip('/'), url_src_db='https://www.imdb.com/%s/' % url_path.strip('/'),
votes=0 if not len(voting) else helpers.try_int(voting, 'TBA'))) votes=0 if not len(voting) else helpers.try_int(voting, 'TBA')))