[68] IMDb Fix

pull/1501/head
meisnate12 1 year ago
parent 27f94c1610
commit b37d1ebb04

@ -1 +1 @@
1.19.0-develop67 1.19.0-develop68

@ -2605,7 +2605,7 @@ class CollectionBuilder:
return False return False
if self.has_imdb_filters and tmdb_item and tmdb_item.imdb_id: if self.has_imdb_filters and tmdb_item and tmdb_item.imdb_id:
try: try:
imdb_info = self.config.IMDb.keywords(tmdb_item.imdb_id) imdb_info = self.config.IMDb.keywords(tmdb_item.imdb_id, self.language)
except Failed as e: except Failed as e:
logger.error(e) logger.error(e)
return False return False
@ -2678,7 +2678,7 @@ class CollectionBuilder:
or_result = False or_result = False
else: else:
try: try:
imdb_info = self.config.IMDb.keywords(self.library.imdb_rating_key_map[item.ratingKey]) imdb_info = self.config.IMDb.keywords(self.library.imdb_rating_key_map[item.ratingKey], self.language)
except Failed as e: except Failed as e:
logger.error(e) logger.error(e)
or_result = False or_result = False

@ -34,6 +34,14 @@ class IMDb:
self._genres = None self._genres = None
self._episode_ratings = None self._episode_ratings = None
def _request(self, url, language=None, xpath=None, params=None):
logger.trace(f"URL: {url}")
if params:
logger.trace(f"Params: {params}")
headers = util.header(language) if language else util.header()
response = self.config.get_html(url, headers=headers, params=params)
return response.xpath(xpath) if xpath else response
def validate_imdb_lists(self, err_type, imdb_lists, language): def validate_imdb_lists(self, err_type, imdb_lists, language):
valid_lists = [] valid_lists = []
for imdb_dict in util.get_list(imdb_lists, split=False): for imdb_dict in util.get_list(imdb_lists, split=False):
@ -85,8 +93,7 @@ class IMDb:
def _watchlist(self, user, language): def _watchlist(self, user, language):
imdb_url = f"{base_url}/user/{user}/watchlist" imdb_url = f"{base_url}/user/{user}/watchlist"
response = self.config.get_html(imdb_url, headers=util.header(language)) group = self._request(imdb_url, language=language, xpath="//span[@class='ab_widget']/script[@type='text/javascript']/text()")
group = response.xpath("//span[@class='ab_widget']/script[@type='text/javascript']/text()")
if group: if group:
return [k for k in json.loads(str(group[0]).split("\n")[5][35:-2])["titles"]] return [k for k in json.loads(str(group[0]).split("\n")[5][35:-2])["titles"]]
raise Failed(f"IMDb Error: Failed to parse URL: {imdb_url}") raise Failed(f"IMDb Error: Failed to parse URL: {imdb_url}")
@ -104,7 +111,7 @@ class IMDb:
else: else:
xpath_total = "//div[@class='desc']/text()" xpath_total = "//div[@class='desc']/text()"
per_page = 50 per_page = 50
results = self.config.get_html(imdb_url, headers=util.header(language)).xpath(xpath_total) results = self._request(imdb_url, language=language, xpath=xpath_total)
total = 0 total = 0
for result in results: for result in results:
if "title" in result: if "title" in result:
@ -119,7 +126,6 @@ class IMDb:
def _ids_from_url(self, imdb_url, language, limit): def _ids_from_url(self, imdb_url, language, limit):
total, item_count = self._total(imdb_url, language) total, item_count = self._total(imdb_url, language)
headers = util.header(language)
imdb_ids = [] imdb_ids = []
parsed_url = urlparse(imdb_url) parsed_url = urlparse(imdb_url)
params = parse_qs(parsed_url.query) params = parse_qs(parsed_url.query)
@ -146,8 +152,7 @@ class IMDb:
params["start"] = start_num # noqa params["start"] = start_num # noqa
else: else:
params["page"] = i # noqa params["page"] = i # noqa
response = self.config.get_html(imdb_base, headers=headers, params=params) ids_found = self._request(imdb_base, language=language, xpath="//div[contains(@class, 'lister-item-image')]//a/img//@data-tconst", params=params)
ids_found = response.xpath("//div[contains(@class, 'lister-item-image')]//a/img//@data-tconst")
if not search_url and i == num_of_pages: if not search_url and i == num_of_pages:
ids_found = ids_found[:remainder] ids_found = ids_found[:remainder]
imdb_ids.extend(ids_found) imdb_ids.extend(ids_found)
@ -157,15 +162,14 @@ class IMDb:
return imdb_ids return imdb_ids
raise Failed(f"IMDb Error: No IMDb IDs Found at {imdb_url}") raise Failed(f"IMDb Error: No IMDb IDs Found at {imdb_url}")
def keywords(self, imdb_id, ignore_cache=False): def keywords(self, imdb_id, language, ignore_cache=False):
imdb_keywords = {} imdb_keywords = {}
expired = None expired = None
if self.config.Cache and not ignore_cache: if self.config.Cache and not ignore_cache:
imdb_keywords, expired = self.config.Cache.query_imdb_keywords(imdb_id, self.config.Cache.expiration) imdb_keywords, expired = self.config.Cache.query_imdb_keywords(imdb_id, self.config.Cache.expiration)
if imdb_keywords and expired is False: if imdb_keywords and expired is False:
return imdb_keywords return imdb_keywords
response = self.config.get_html(f"https://www.imdb.com/title/{imdb_id}/keywords") keywords = self._request(f"https://www.imdb.com/title/{imdb_id}/keywords", language=language, xpath="//td[@class='soda sodavote']")
keywords = response.xpath("//td[@class='soda sodavote']")
if not keywords: if not keywords:
raise Failed(f"IMDb Error: No Item Found for IMDb ID: {imdb_id}") raise Failed(f"IMDb Error: No Item Found for IMDb ID: {imdb_id}")
for k in keywords: for k in keywords:
@ -187,7 +191,7 @@ class IMDb:
parental_dict, expired = self.config.Cache.query_imdb_parental(imdb_id, self.config.Cache.expiration) parental_dict, expired = self.config.Cache.query_imdb_parental(imdb_id, self.config.Cache.expiration)
if parental_dict and expired is False: if parental_dict and expired is False:
return parental_dict return parental_dict
response = self.config.get_html(f"https://www.imdb.com/title/{imdb_id}/parentalguide") response = self._request(f"https://www.imdb.com/title/{imdb_id}/parentalguide")
for ptype in util.parental_types: for ptype in util.parental_types:
results = response.xpath(f"//section[@id='advisory-{ptype}']//span[contains(@class,'ipl-status-pill')]/text()") results = response.xpath(f"//section[@id='advisory-{ptype}']//span[contains(@class,'ipl-status-pill')]/text()")
if results: if results:
@ -198,7 +202,7 @@ class IMDb:
self.config.Cache.update_imdb_parental(expired, imdb_id, parental_dict, self.config.Cache.expiration) self.config.Cache.update_imdb_parental(expired, imdb_id, parental_dict, self.config.Cache.expiration)
return parental_dict return parental_dict
def _ids_from_chart(self, chart): def _ids_from_chart(self, chart, language):
if chart == "box_office": if chart == "box_office":
url = "chart/boxoffice" url = "chart/boxoffice"
elif chart == "popular_movies": elif chart == "popular_movies":
@ -217,7 +221,7 @@ class IMDb:
url = "chart/bottom" url = "chart/bottom"
else: else:
raise Failed(f"IMDb Error: chart: {chart} not ") raise Failed(f"IMDb Error: chart: {chart} not ")
return self.config.get_html(f"https://www.imdb.com/{url}").xpath("//div[@class='wlb_ribbon']/@data-tconst") return self._request(f"https://www.imdb.com/{url}", language=language, xpath="//div[@class='wlb_ribbon']/@data-tconst")
def get_imdb_ids(self, method, data, language): def get_imdb_ids(self, method, data, language):
if method == "imdb_id": if method == "imdb_id":
@ -229,7 +233,7 @@ class IMDb:
return [(i, "imdb") for i in self._ids_from_url(data["url"], language, data["limit"])] return [(i, "imdb") for i in self._ids_from_url(data["url"], language, data["limit"])]
elif method == "imdb_chart": elif method == "imdb_chart":
logger.info(f"Processing IMDb Chart: {charts[data]}") logger.info(f"Processing IMDb Chart: {charts[data]}")
return [(_i, "imdb") for _i in self._ids_from_chart(data)] return [(_i, "imdb") for _i in self._ids_from_chart(data, language)]
elif method == "imdb_watchlist": elif method == "imdb_watchlist":
logger.info(f"Processing IMDb Watchlist: {data}") logger.info(f"Processing IMDb Watchlist: {data}")
return [(_i, "imdb") for _i in self._watchlist(data, language)] return [(_i, "imdb") for _i in self._watchlist(data, language)]

@ -1,14 +1,14 @@
arrapi==1.4.2 arrapi==1.4.2
GitPython==3.1.31 GitPython==3.1.31
lxml==4.9.2 lxml==4.9.3
num2words==0.5.12 num2words==0.5.12
pathvalidate==3.0.0 pathvalidate==3.0.0
pillow==9.5.0 pillow==10.0.0
PlexAPI==4.14.0 PlexAPI==4.14.0
psutil==5.9.5 psutil==5.9.5
python-dotenv==1.0.0 python-dotenv==1.0.0
requests==2.31.0 requests==2.31.0
retrying==1.3.4 retrying==1.3.4
ruamel.yaml==0.17.31 ruamel.yaml==0.17.32
schedule==1.2.0 schedule==1.2.0
tmdbapis==1.2.0 tmdbapis==1.2.0
Loading…
Cancel
Save