Merge pull request #70 from mza921/trakt_trending

Add Trakt Trending List support
This commit is contained in:
mza921 2020-10-27 20:12:11 -07:00 committed by GitHub
commit a6d4d62047
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 58 additions and 18 deletions

View file

@ -1,5 +1,5 @@
# Plex Auto Collections
##### Version 2.1.1
##### Version 2.2.0
Plex Auto Collections is a Python 3 script that works off a configuration file to create/update Plex collections. Collection management with this tool can be automated in a varying degree of customizability. Supports IMDB, TMDb, and Trakt lists as well as built in Plex filters such as actors, genres, year, studio and more.
![https://i.imgur.com/iHAYFIZ.png](https://i.imgur.com/iHAYFIZ.png)
@ -20,6 +20,7 @@ Plex Auto Collections is a Python 3 script that works off a configuration file t
- [TVDb Show (List Type)](#tvdb-show-list-type)
- [IMDb List or Search (List Type)](#imdb-list-or-search-list-type)
- [Trakt List (List Type)](#trakt-list-list-type)
- [Trakt Trending List (List Type)](#trakt-trending-list-list-type)
- [Tautulli List (List Type)](#tautulli-list-list-type)
- [Subfilters (Collection Attribute)](#subfilters-collection-attribute)
- [Sync Mode (Collection Attribute)](#sync-mode-collection-attribute)
@ -146,7 +147,7 @@ Each collection is defined by the mapping name which becomes the name of the Ple
### List Type (Collection Attribute)
The only required attribute for each collection is the list type. There are eight different list types to choose from:
The only required attribute for each collection is the list type. There are eleven different list types to choose from:
- [Plex Collection](#plex-collection-list-type)
- [TMDb Collection](#tmdb-collection-list-type)
- [TMDb Actor](#tmdb-actor-list-type)
@ -156,8 +157,12 @@ The only required attribute for each collection is the list type. There are eigh
- [TVDb Show](#tvdb-show-list-type)
- [IMDb List or Search](#imdb-list-or-search-list-type)
- [Trakt List](#trakt-list-list-type)
- [Trakt Trending List](#trakt-trending-list-list-type)
- [Tautulli List](#tautulli-list-list-type)
Note that each list type supports multiple lists.
Note that most list types supports multiple lists, with the following exceptions:
- Trakt Trending List
- Tautulli List
#### Plex Collection (List Type)
@ -379,6 +384,19 @@ collections:
trakt_list: https://trakt.tv/users/jay-greene/lists/reddit-top-250-2019-edition
```
#### Trakt Trending List (List Type)
###### Works with Movie and TV Show Libraries
This script can pull a number of items from the Trakt Trending List for [Movies](https://trakt.tv/movies/trending) or [Shows](https://trakt.tv/shows/trending). The `trakt_trending` attribute only supports a single integer value. The `sync_mode: sync` option is recommended since the list is continuously updated.
```yaml
collections:
Trending:
trakt_trending: 30
sync_mode: sync
```
#### Tautulli List (List Type)
###### Works with Movie and TV Show Libraries

View file

@ -123,6 +123,8 @@ def update_from_config(config_path, plex, headless=False, no_meta=False, no_imag
print("| {} missing movie{} from {} List: {}".format(len(missing), "s" if len(missing) > 1 else "", method_name, v))
elif m == "tmdb_collection":
print("| {} missing movie{} from {} Collection: {}".format(len(missing), "s" if len(missing) > 1 else "", method_name, v))
elif m == "trakt_trending":
print("| {} missing movie{} from {} List: Trending (top {})".format(len(missing), "s" if len(missing) > 1 else "", method_name, v))
else:
print("| {} ID: {} missing".format(method_name, v))
if Radarr.valid:
@ -136,6 +138,8 @@ def update_from_config(config_path, plex, headless=False, no_meta=False, no_imag
method_name = "Trakt" if "trakt" in m else "TVDb" if "tvdb" in m else "TMDb"
if m == "trakt_list" or m == "tmdb_list":
print("| {} missing show{} from {} List: {}".format(len(missing), "s" if len(missing) > 1 else "", method_name, v))
elif m == "trakt_trending":
print("| {} missing show{} from {} List: Trending (top {})".format(len(missing), "s" if len(missing) > 1 else "", method_name, v))
else:
print("| {} ID: {} missing".format(method_name, v))
@ -616,7 +620,7 @@ print("| | _/| |/ -_)\ \ / / _ \| || || _|/ _ \ | (__ / _ \| || |/ -_)/ _|
print("| |_| |_|\___|/_\_\ /_/ \_\\\\_,_| \__|\___/ \___|\___/|_||_|\___|\__| \__||_|\___/|_||_|/__/ |")
print("| |")
print("|===================================================================================================|")
print("| Version 2.1.1")
print("| Version 2.2.0")
print("| Locating config...")
config_path = None
app_dir = os.path.dirname(os.path.abspath(__file__))

View file

@ -118,7 +118,7 @@ def add_to_collection(config_path, plex, method, value, c, map, subfilters=None)
shows = []
items = []
missing = []
if (method == "trakt_list" or ("tmdb" in method and plex.library_type == "show")) and not TraktClient.valid:
if ("trakt" in method or ("tmdb" in method and plex.library_type == "show")) and not TraktClient.valid:
raise KeyError("| trakt connection required for {}",format(method))
if ("imdb" in method or "tmdb" in method) and not TMDB.valid:
raise KeyError("| tmdb connection required for {}",format(method))
@ -141,6 +141,8 @@ def add_to_collection(config_path, plex, method, value, c, map, subfilters=None)
movies, missing = imdb_tools.tmdb_get_movies(config_path, plex, value)
elif method == "trakt_list" and TraktClient.valid:
movies, missing = trakt_tools.trakt_get_movies(config_path, plex, value)
elif method == "trakt_trending" and TraktClient.valid:
movies, missing = trakt_tools.trakt_get_movies(config_path, plex, value, is_userlist=False)
elif method == "tautulli" and Tautulli.valid:
movies, missing = imdb_tools.get_tautulli(config_path, plex, value)
elif plex.library_type == "show":
@ -161,6 +163,8 @@ def add_to_collection(config_path, plex, method, value, c, map, subfilters=None)
shows, missing = imdb_tools.tvdb_get_shows(config_path, plex, value)
elif method == "trakt_list" and TraktClient.valid:
shows, missing = trakt_tools.trakt_get_shows(config_path, plex, value)
elif method == "trakt_trending" and TraktClient.valid:
shows, missing = trakt_tools.trakt_get_shows(config_path, plex, value, is_userlist=False)
elif method == "tautulli" and Tautulli.valid:
shows, missing = imdb_tools.get_tautulli(config_path, plex, value)

View file

@ -3,16 +3,21 @@ from urllib.parse import urlparse
import plex_tools
import trakt
def trakt_get_movies(config_path, plex, data):
def trakt_get_movies(config_path, plex, data, is_userlist=True):
config_tools.TraktClient(config_path)
trakt_url = data
if trakt_url[-1:] == " ":
trakt_url = trakt_url[:-1]
imdb_map = {}
trakt_list_path = urlparse(trakt_url).path
trakt_list_items = trakt.Trakt[trakt_list_path].items()
if is_userlist:
trakt_url = data
if trakt_url[-1:] == " ":
trakt_url = trakt_url[:-1]
trakt_list_path = urlparse(trakt_url).path
trakt_list_items = trakt.Trakt[trakt_list_path].items()
else:
# Trending list
max_items = int(data)
trakt_list_items = trakt.Trakt['movies'].trending(per_page=max_items)
title_ids = [m.pk[1] for m in trakt_list_items if isinstance(m, trakt.objects.movie.Movie)]
imdb_map = {}
if title_ids:
for item in plex.Library.all():
guid = urlparse(item.guid)
@ -52,14 +57,20 @@ def trakt_get_movies(config_path, plex, data):
# No movies
return None, None
def trakt_get_shows(config_path, plex, data):
def trakt_get_shows(config_path, plex, data, is_userlist=True):
config_tools.TraktClient(config_path)
trakt_url = data
if trakt_url[-1:] == " ":
trakt_url = trakt_url[:-1]
if is_userlist:
trakt_url = data
if trakt_url[-1:] == " ":
trakt_url = trakt_url[:-1]
trakt_list_path = urlparse(trakt_url).path
trakt_list_items = trakt.Trakt[trakt_list_path].items()
else:
# Trending list
max_items = int(data)
trakt_list_items = trakt.Trakt['shows'].trending(per_page=max_items)
tvdb_map = {}
trakt_list_path = urlparse(trakt_url).path
trakt_list_items = trakt.Trakt[trakt_list_path].items()
title_ids = []
for m in trakt_list_items:
if isinstance(m, trakt.objects.show.Show):

View file

@ -24,6 +24,9 @@ collections:
Marvel:
trakt_list: https://trakt.tv/users/movistapp/lists/marvel
collection_mode: show_items
Trakt Trending:
trakt_trending: 30
sync_mode: sync
Pixar:
studio: Pixar
summary: A collection of Pixar movies