Last active 1443733079

Gets plex streaming urls. Pipe into cast.py (https://gist.github.com/blha303/8b100c205b8c35b3c8ce) for best results. List episodes and movies from plex by omitting titles (i.e getplex.py -m "" or getplex.py -s "Bla")

Revision dd965298d3ea129b718ad470a79cdf03c420cf2f

getplex.py Raw
1from plexapi.server import PlexServer
2import argparse
3
4DEFAULT_URI = "http://192.168.1.50:32400"
5
6def 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
18def get_server(uri=DEFAULT_URI):
19 return PlexServer(uri)
20
21def lookup_movie(server, movie):
22 return server.library.section("Movies").get(movie)
23
24def lookup_episode(server, show, episode):
25 return server.library.section("TV Shows").get(show).episode(episode)
26
27def 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
50if __name__ == "__main__":
51 main()