getplex.py
· 2.0 KiB · Python
Raw
from plexapi.server import PlexServer
import argparse
DEFAULT_URI = "http://192.168.1.50:32400"
def fmtcols(l):
maxlen = max(len(i) for i in l)
if len(l) % 2 != 0:
l.append(" ")
split = len(l)/2
l1 = l[0:split]
l2 = l[split:]
o = []
for key, value in zip(l1,l2):
o.append(u"{0:<{2}s} {1}".format(key, value, maxlen))
return u"\n".join(o)
def get_server(uri=DEFAULT_URI):
return PlexServer(uri)
def lookup_movie(server, movie):
return server.library.section("Movies").get(movie)
def lookup_episode(server, show, episode):
return server.library.section("TV Shows").get(show).episode(episode)
def main():
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-m", "--movie", help="Specify movie. Must be exact title.")
group.add_argument("-s", "--show", help="Specify show. Must be exact title.")
parser.add_argument("-e", "--episode", help="Specify episode. Get list of episodes by specifying show")
parser.add_argument("-S", "--server", nargs="?", help="Specify server. Defaults to {}".format(DEFAULT_URI), default=DEFAULT_URI)
args = parser.parse_args()
server = get_server(args.server)
if args.movie is not None:
if args.movie is "":
print fmtcols([u"{}".format(movie.title) for movie in server.library.section("Movies").all()])
else:
print lookup_movie(server, args.movie).getStreamUrl()
elif args.show is not None:
if args.show is "":
print fmtcols([u"{}".format(show.title) for show in server.library.section("TV Shows").all()])
else:
if args.episode:
print lookup_episode(server, args.show, args.episode).getStreamUrl()
else:
print fmtcols([u"S{}E{} {}".format(ep.parentIndex.zfill(2), ep.index.zfill(2), ep.title) for ep in server.library.section("TV Shows").get(args.show).episodes()])
if __name__ == "__main__":
main()
| 1 | from plexapi.server import PlexServer |
| 2 | import argparse |
| 3 | |
| 4 | DEFAULT_URI = "http://192.168.1.50:32400" |
| 5 | |
| 6 | def fmtcols(l): |
| 7 | maxlen = max(len(i) for i in l) |
| 8 | if len(l) % 2 != 0: |
| 9 | l.append(" ") |
| 10 | split = len(l)/2 |
| 11 | l1 = l[0:split] |
| 12 | l2 = l[split:] |
| 13 | o = [] |
| 14 | for key, value in zip(l1,l2): |
| 15 | o.append(u"{0:<{2}s} {1}".format(key, value, maxlen)) |
| 16 | return u"\n".join(o) |
| 17 | |
| 18 | def get_server(uri=DEFAULT_URI): |
| 19 | return PlexServer(uri) |
| 20 | |
| 21 | def lookup_movie(server, movie): |
| 22 | return server.library.section("Movies").get(movie) |
| 23 | |
| 24 | def lookup_episode(server, show, episode): |
| 25 | return server.library.section("TV Shows").get(show).episode(episode) |
| 26 | |
| 27 | def main(): |
| 28 | parser = argparse.ArgumentParser() |
| 29 | group = parser.add_mutually_exclusive_group() |
| 30 | group.add_argument("-m", "--movie", help="Specify movie. Must be exact title.") |
| 31 | group.add_argument("-s", "--show", help="Specify show. Must be exact title.") |
| 32 | parser.add_argument("-e", "--episode", help="Specify episode. Get list of episodes by specifying show") |
| 33 | parser.add_argument("-S", "--server", nargs="?", help="Specify server. Defaults to {}".format(DEFAULT_URI), default=DEFAULT_URI) |
| 34 | args = parser.parse_args() |
| 35 | server = get_server(args.server) |
| 36 | if args.movie is not None: |
| 37 | if args.movie is "": |
| 38 | print fmtcols([u"{}".format(movie.title) for movie in server.library.section("Movies").all()]) |
| 39 | else: |
| 40 | print lookup_movie(server, args.movie).getStreamUrl() |
| 41 | elif args.show is not None: |
| 42 | if args.show is "": |
| 43 | print fmtcols([u"{}".format(show.title) for show in server.library.section("TV Shows").all()]) |
| 44 | else: |
| 45 | if args.episode: |
| 46 | print lookup_episode(server, args.show, args.episode).getStreamUrl() |
| 47 | else: |
| 48 | print fmtcols([u"S{}E{} {}".format(ep.parentIndex.zfill(2), ep.index.zfill(2), ep.title) for ep in server.library.section("TV Shows").get(args.show).episodes()]) |
| 49 | |
| 50 | if __name__ == "__main__": |
| 51 | main() |