Skip to content

Commit 4c13367

Browse files
authored
Merge pull request #599 from rmrector/metadata.themoviedb.org.python@nexus
[metadata.themoviedb.org.python@nexus] 3.2.0
2 parents 1689962 + 366066c commit 4c13367

83 files changed

Lines changed: 754 additions & 58 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

metadata.themoviedb.org.python/addon.xml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
22
<addon id="metadata.themoviedb.org.python"
33
name="The Movie Database Python"
4-
version="3.1.3"
4+
version="3.2.0"
55
provider-name="Team Kodi">
66
<requires>
77
<import addon="xbmc.metadata" version="2.1.0"/>
@@ -11,11 +11,10 @@
1111
library="python/scraper.py"/>
1212
<extension point="xbmc.addon.metadata">
1313
<reuselanguageinvoker>true</reuselanguageinvoker>
14-
<news>v3.1.3 (2025-10-12)
15-
- fix missing fanart from TMDB either way
16-
17-
v3.1.2 (2025-10-05)
18-
- fix missing fanart from TMDB
14+
<news>v3.2.0 (2026-03-08)
15+
- add option for keyart from TMDB
16+
- add whitelist option for "keywords as tags"
17+
- fix - don't save empty uniqueID values
1918

2019
v3.0.0 (2024-04-17)
2120
- version 3 for Kodi 20 Nexus and above</news>
@@ -79,7 +78,7 @@ v3.0.0 (2024-04-17)
7978
<summary lang="uk_UA">Екстрактор даних про фільми з TMDb</summary>
8079
<summary lang="vi_VN">Trình lấy dữ liệu Phim từ TMDB</summary>
8180
<summary lang="zh_CN">TMDB 电影刮削器</summary>
82-
<summary lang="zh_TW">TMDB 電影搜括器</summary>
81+
<summary lang="zh_TW">TMDB 電影資料爬蟲</summary>
8382
<description lang="af_ZA">themoviedb.org is &apos;n verniet en oop fliek databasis. Dit is totaal gebruiker gedryf deur mense soos jy. TMDB word huidiglik deur miljoene mense elke maand gebruik, en met hulle kragtige API word dit ook deur baie gewilde media sentrums soos Kodi gebruik om Fliek Metadata, Plakkate en Ondersteunerkuns te onttrek om die gebruiker se ondervinding te verryk.</description>
8483
<description lang="be_BY">themoviedb.org - бясплатная і адкрытая база даных фільмаў. Яна напаўняецца і падтрымліваецца карыстальнікамі. TMDb штомесяц карыстаюцца мільёны людзей, а дзякуючы магутнаму API базу могуць выкарыстоўваць папулярныя медыяцэнтры накшталт Kodi, якія бяруць адтуль метаданыя, постары і ілюстрацыі.</description>
8584
<description lang="bg_BG">themoviedb.org е безплатна и отворена филмова база данни. Задвижва се изцяло от потребителите си, от хора като вас. Милиони хора по света всеки месец ползват TMDb. Благодарение на многофункционално API може да се ползва от най-различни и популярни медийни центрове като Kodi, които извличат метаданни, постери и фанарт за филми с цел за красивото оформяне на интерфейса.</description>

metadata.themoviedb.org.python/changelog.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
v3.2.0 (2026-03-08)
2+
- add option for keyart from TMDB
3+
- add whitelist option for "keywords as tags"
4+
- fix - don't save empty uniqueID values
5+
16
v3.1.3 (2025-10-12)
27
- fix missing fanart from TMDB either way
38

metadata.themoviedb.org.python/python/lib/tmdbscraper/tmdb.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ def _assemble_details(self, movie, movie_fallback, collection, collection_fallba
136136
info['duration'] = movie['runtime'] * 60
137137

138138
ratings = {'themoviedb': {'rating': float(movie['vote_average']), 'votes': int(movie['vote_count'])}}
139-
uniqueids = {'tmdb': str(movie['id']), 'imdb': movie['imdb_id']}
139+
uniqueids = _parse_uniqueids(movie)
140140
cast = [{
141141
'name': actor['name'],
142142
'role': actor['character'],
@@ -164,6 +164,12 @@ def _parse_media_id(title):
164164
return {'type': 'imdb', 'id':title[5:]}
165165
return None
166166

167+
def _parse_uniqueids(movie):
168+
uniqueids = {'tmdb': str(movie['id'])}
169+
if movie.get('imdb_id'):
170+
uniqueids['imdb'] = movie['imdb_id']
171+
return uniqueids
172+
167173
def _get_movie(mid, language=None, search=False):
168174
details = None if search else \
169175
'trailers,images,releases,casts,keywords' if language is not None else \
@@ -184,23 +190,28 @@ def _parse_artwork(movie, collection, urlbases, language):
184190
landscape = []
185191
logos = []
186192
fanart = []
193+
keyart = []
187194

188195
if 'images' in movie:
189196
posters = _build_image_list_with_fallback(movie['images']['posters'], urlbases, language)
190197
landscape = _build_image_list_with_fallback(movie['images']['backdrops'], urlbases, language)
191198
logos = _build_image_list_with_fallback(movie['images']['logos'], urlbases, language)
192-
fanart = _build_fanart_list(movie['images']['backdrops'], urlbases)
199+
fanart = _build_list_without_titles(movie['images']['backdrops'], urlbases)
200+
keyart = _build_list_without_titles(movie['images']['posters'], urlbases)
193201

194202
setposters = []
195203
setlandscape = []
196204
setfanart = []
205+
setkeyart = []
197206
if collection and 'images' in collection:
198207
setposters = _build_image_list_with_fallback(collection['images']['posters'], urlbases, language)
199208
setlandscape = _build_image_list_with_fallback(collection['images']['backdrops'], urlbases, language)
200-
setfanart = _build_fanart_list(collection['images']['backdrops'], urlbases)
209+
setfanart = _build_list_without_titles(collection['images']['backdrops'], urlbases)
210+
setkeyart = _build_list_without_titles(collection['images']['posters'], urlbases)
201211

202212
return {'poster': posters, 'landscape': landscape, 'fanart': fanart,
203-
'set.poster': setposters, 'set.landscape': setlandscape, 'set.fanart': setfanart, 'clearlogo': logos}
213+
'set.poster': setposters, 'set.landscape': setlandscape, 'set.fanart': setfanart,
214+
'clearlogo': logos, 'keyart': keyart, 'set.keyart': setkeyart}
204215

205216
def _build_image_list_with_fallback(imagelist, urlbases, language, language_fallback='en'):
206217
images = _build_image_list(imagelist, urlbases, [language])
@@ -215,7 +226,7 @@ def _build_image_list_with_fallback(imagelist, urlbases, language, language_fall
215226

216227
return images
217228

218-
def _build_fanart_list(imagelist, urlbases):
229+
def _build_list_without_titles(imagelist, urlbases):
219230
return _build_image_list(imagelist, urlbases, ['xx', None])
220231

221232
def _build_image_list(imagelist, urlbases, languages=[]):

metadata.themoviedb.org.python/python/scraper_config.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ def configure_tmdb_artwork(details, settings):
1212
return details
1313

1414
art = details['available_art']
15-
if not settings.getSettingBool('fetch_posters'):
15+
posters_enabled = settings.getSettingBool('fetch_posters')
16+
if not posters_enabled:
1617
if 'poster' in art:
1718
del art['poster']
1819
if 'set.poster' in art:
@@ -32,6 +33,15 @@ def configure_tmdb_artwork(details, settings):
3233
if fanart_enabled:
3334
art['set.fanart'] = art.get('set.fanart', []) + art['set.landscape']
3435
del art['set.landscape']
36+
if not settings.getSettingBool('keyart'):
37+
if 'keyart' in art:
38+
if posters_enabled:
39+
art['poster'] = art.get('poster', []) + art['keyart']
40+
del art['keyart']
41+
if 'set.keyart' in art:
42+
if posters_enabled:
43+
art['set.poster'] = art.get('set.poster', []) + art['set.keyart']
44+
del art['set.keyart']
3545

3646
return details
3747

@@ -75,6 +85,9 @@ def _configure_default_rating(details, settings):
7585
def _configure_tags(details, settings):
7686
if not settings.getSettingBool('add_tags'):
7787
del details['info']['tag']
88+
elif settings.getSettingBool('enable_tag_whitelist'):
89+
whitelist = set(tag.strip().lower() for tag in settings.getStringList('tag_whitelist'))
90+
details['info']['tag'] = [tag for tag in details['info']['tag'] if tag.lower() in whitelist]
7891
return details
7992

8093
# pylint: disable=invalid-name
@@ -102,6 +115,9 @@ def getSettingNumber(self, id):
102115
def getSettingString(self, id):
103116
return self._inner_get_setting(id, basestring, '')
104117

118+
def getStringList(self, id):
119+
return self._inner_get_setting(id, list, [])
120+
105121
def _inner_get_setting(self, setting_id, setting_type, default):
106122
value = self.data.get(setting_id)
107123
if isinstance(value, setting_type):

metadata.themoviedb.org.python/resources/language/resource.language.af_za/strings.po

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
msgid ""
66
msgstr ""
77
"Project-Id-Version: XBMC Addons\n"
8-
"Report-Msgid-Bugs-To: translations@kodi.tv\n"
8+
"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
99
"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010
"PO-Revision-Date: 2025-01-07 23:55+0000\n"
1111
"Last-Translator: Heiko Berner <berner.h@gmail.com>\n"
@@ -89,6 +89,14 @@ msgctxt "#30015"
8989
msgid "Maximum number of each artwork type - many artwork can cause an error scraping to MySQL database"
9090
msgstr "Maksimum hoeveelheid van elke kunswerk tipe - baie kunswerke kan 'n fout veroorsaak wanneer na MySQL databasis skraap"
9191

92+
msgctxt "#30016"
93+
msgid "Only add whitelisted keywords as tags"
94+
msgstr ""
95+
96+
msgctxt "#30017"
97+
msgid "Tag whitelist"
98+
msgstr ""
99+
92100
msgctxt "#30100"
93101
msgid "Language for Fanart.tv artwork"
94102
msgstr "Taal vir Fanart.tv kunswerke"

metadata.themoviedb.org.python/resources/language/resource.language.am_et/strings.po

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ msgctxt "#30015"
8989
msgid "Maximum number of each artwork type - many artwork can cause an error scraping to MySQL database"
9090
msgstr ""
9191

92+
msgctxt "#30016"
93+
msgid "Only add whitelisted keywords as tags"
94+
msgstr ""
95+
96+
msgctxt "#30017"
97+
msgid "Tag whitelist"
98+
msgstr ""
99+
92100
msgctxt "#30100"
93101
msgid "Language for Fanart.tv artwork"
94102
msgstr ""

metadata.themoviedb.org.python/resources/language/resource.language.ar_sa/strings.po

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,14 @@ msgctxt "#30015"
8888
msgid "Maximum number of each artwork type - many artwork can cause an error scraping to MySQL database"
8989
msgstr ""
9090

91+
msgctxt "#30016"
92+
msgid "Only add whitelisted keywords as tags"
93+
msgstr ""
94+
95+
msgctxt "#30017"
96+
msgid "Tag whitelist"
97+
msgstr ""
98+
9199
msgctxt "#30100"
92100
msgid "Language for Fanart.tv artwork"
93101
msgstr ""

metadata.themoviedb.org.python/resources/language/resource.language.ast_es/strings.po

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ msgctxt "#30015"
8989
msgid "Maximum number of each artwork type - many artwork can cause an error scraping to MySQL database"
9090
msgstr ""
9191

92+
msgctxt "#30016"
93+
msgid "Only add whitelisted keywords as tags"
94+
msgstr ""
95+
96+
msgctxt "#30017"
97+
msgid "Tag whitelist"
98+
msgstr ""
99+
92100
msgctxt "#30100"
93101
msgid "Language for Fanart.tv artwork"
94102
msgstr ""

metadata.themoviedb.org.python/resources/language/resource.language.az_az/strings.po

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,14 @@ msgctxt "#30015"
8888
msgid "Maximum number of each artwork type - many artwork can cause an error scraping to MySQL database"
8989
msgstr ""
9090

91+
msgctxt "#30016"
92+
msgid "Only add whitelisted keywords as tags"
93+
msgstr ""
94+
95+
msgctxt "#30017"
96+
msgid "Tag whitelist"
97+
msgstr ""
98+
9199
msgctxt "#30100"
92100
msgid "Language for Fanart.tv artwork"
93101
msgstr ""

metadata.themoviedb.org.python/resources/language/resource.language.be_by/strings.po

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ msgctxt "#30015"
8989
msgid "Maximum number of each artwork type - many artwork can cause an error scraping to MySQL database"
9090
msgstr ""
9191

92+
msgctxt "#30016"
93+
msgid "Only add whitelisted keywords as tags"
94+
msgstr ""
95+
96+
msgctxt "#30017"
97+
msgid "Tag whitelist"
98+
msgstr ""
99+
92100
msgctxt "#30100"
93101
msgid "Language for Fanart.tv artwork"
94102
msgstr "Мова для ілюстрацый з Fanart.tv"

0 commit comments

Comments
 (0)