From 4d162d849d2c58b60875833fe58431155122357c Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 16 Jan 2023 22:02:27 -0800 Subject: [PATCH] Add streaming_service_availability.py --- reporting/streaming_service_availability.py | 92 +++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 reporting/streaming_service_availability.py diff --git a/reporting/streaming_service_availability.py b/reporting/streaming_service_availability.py new file mode 100644 index 0000000..98d12fb --- /dev/null +++ b/reporting/streaming_service_availability.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Description: Check media availability on streaming services. +# Author: /u/SwiftPanda16 +# Requires: plexapi + +import argparse +import os +from plexapi.server import PlexServer +from plexapi.exceptions import BadRequest + +PLEX_URL = '' +PLEX_TOKEN = '' + +# Environment Variables +PLEX_URL = os.getenv('PLEX_URL', PLEX_URL) +PLEX_TOKEN = os.getenv('PLEX_TOKEN', PLEX_TOKEN) + + +def check_streaming_services(plex, libraries, services, available_only): + if not libraries: + sections = [ + section for section in plex.library.sections() + if section.agent in {'tv.plex.agents.movie', 'tv.plex.agents.series'} + ] + else: + sections = [plex.library.section(library) for library in libraries] + + for section in sections: + print(f'{section.title}') + + for item in section.all(): + try: + availabilities = item.streamingServices() + except BadRequest: + continue + + if services: + availabilities = [ + availability for availability in availabilities + if availability.title in services + ] + + if available_only and not availabilities: + continue + + print(f' └─ {item.title} ({item.year})') + + for availability in availabilities: + title = availability.title + quality = availability.quality + offerType = availability.offerType.capitalize() + priceDescription = (' ' + availability.priceDescription) if availability.priceDescription else '' + print(f' └─ {title} ({quality} - {offerType}{priceDescription})') + + print() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument( + '--libraries', + '-l', + nargs='+', + help=( + 'Plex libraries to check (e.g. Movies, TV Shows, etc.). ' + 'Default: All movie and tv show libraries using the Plex Movie or Plex TV Series agents.' + ) + ) + parser.add_argument( + '--services', + '-s', + nargs='+', + help=( + 'Streaming services to check (e.g. Netflix, Disney+, Amazon Prime Video, etc.). ' + 'Note: Must be the exact name of the service as it appears in Plex. ' + 'Default: All services.' + ) + ) + parser.add_argument( + '--available_only', + '-a', + action='store_true', + help=( + 'Only list media that is available on at least one streaming service.' + ) + ) + opts = parser.parse_args() + + plex = PlexServer(PLEX_URL, PLEX_TOKEN) + check_streaming_services(plex, **vars(opts))