2015-06-09 02:27:34 +00:00
|
|
|
## PlexAPI ##
|
2014-12-29 03:21:58 +00:00
|
|
|
Python bindings for the Plex API.
|
|
|
|
|
|
|
|
* Navigate local or remote shared libraries.
|
|
|
|
* Mark shows watched or unwatched.
|
|
|
|
* Request rescan, analyze, empty trash.
|
|
|
|
* Play media on connected clients.
|
2015-06-09 02:27:34 +00:00
|
|
|
* Get URL to stream stream h264/aac video (playable in VLC,MPV,etc).
|
2014-12-29 03:21:58 +00:00
|
|
|
* Plex Sync Support.
|
2016-01-26 18:12:39 +00:00
|
|
|
* Plex Audio Support.
|
2014-12-29 03:21:58 +00:00
|
|
|
|
|
|
|
#### Install ###
|
|
|
|
|
|
|
|
pip install plexapi
|
|
|
|
|
2015-06-09 02:27:34 +00:00
|
|
|
|
2014-12-29 03:21:58 +00:00
|
|
|
#### Getting a PlexServer Instance ####
|
|
|
|
|
2016-03-14 04:57:04 +00:00
|
|
|
There are three types of authentication. If running the PlexAPI on the same
|
2014-12-29 03:21:58 +00:00
|
|
|
network as the Plex Server (and you are not using Plex Users), you can
|
2016-03-14 04:57:04 +00:00
|
|
|
authenticate without a username and password. Getting a PlexServer
|
2014-12-29 03:21:58 +00:00
|
|
|
instance is as easy as the following:
|
|
|
|
|
2015-06-04 15:26:42 +00:00
|
|
|
```python
|
|
|
|
from plexapi.server import PlexServer
|
|
|
|
plex = PlexServer() # Defaults to localhost:32400
|
|
|
|
```
|
2014-12-29 03:21:58 +00:00
|
|
|
|
2016-03-14 04:57:04 +00:00
|
|
|
If you want to avoid logging into MyPlex and you already know your auth token
|
|
|
|
string, you can use the PlexServer object directly as above, but passing in
|
|
|
|
the baseuri and auth token directly.
|
|
|
|
|
|
|
|
```python
|
|
|
|
from plexapi.server import MyPlexUser
|
|
|
|
baseuri = 'http://plexserver:32400'
|
|
|
|
token = '2ffLuB84dqLswk9skLos'
|
|
|
|
plex = PlexServer(baseuri, token)
|
|
|
|
```
|
|
|
|
|
|
|
|
If you are running on a separate network or using Plex Users you can log
|
|
|
|
into MyPlex to get a PlexServer instance. An example of this is below. NOTE:
|
2014-12-29 03:21:58 +00:00
|
|
|
Servername below is the name of the server (not the hostname and port). If
|
|
|
|
logged into Plex Web you can see the server name in the top left above your
|
|
|
|
available libraries.
|
|
|
|
|
2015-06-04 15:26:42 +00:00
|
|
|
```python
|
|
|
|
from plexapi.myplex import MyPlexUser
|
|
|
|
user = MyPlexUser.signin('<USERNAME>', '<PASSWORD>')
|
2016-03-14 04:57:04 +00:00
|
|
|
plex = user.getResource('<SERVERNAME>').connect() # returns a PlexServer instance
|
2015-06-04 15:26:42 +00:00
|
|
|
```
|
2014-12-29 03:21:58 +00:00
|
|
|
|
2016-03-14 04:57:04 +00:00
|
|
|
|
2014-12-29 03:21:58 +00:00
|
|
|
#### Usage Examples ####
|
|
|
|
|
2015-06-04 15:26:42 +00:00
|
|
|
```python
|
|
|
|
# Example 1: List all unwatched content in library.
|
|
|
|
for section in plex.library.sections():
|
|
|
|
print('Unwatched content in %s:' % section.title)
|
|
|
|
for video in section.unwatched():
|
|
|
|
print(' %s' % video.title)
|
2015-06-04 15:32:47 +00:00
|
|
|
```
|
|
|
|
```python
|
2015-06-04 15:26:42 +00:00
|
|
|
# Example 2: Mark all Conan episodes watched.
|
|
|
|
plex.library.get('Conan (2010)').markWatched()
|
2015-06-04 15:32:47 +00:00
|
|
|
```
|
|
|
|
```python
|
2015-06-04 15:31:10 +00:00
|
|
|
# Example 3: List all clients connected to the Server.
|
2015-06-04 15:26:42 +00:00
|
|
|
for client in plex.clients():
|
|
|
|
print(client.name)
|
2015-06-04 15:33:26 +00:00
|
|
|
```
|
|
|
|
```python
|
2015-06-04 15:31:10 +00:00
|
|
|
# Example 4: Play the movie Avatar on another client.
|
2015-06-09 02:21:31 +00:00
|
|
|
# Note: Client must be on same network as server.
|
2015-06-04 15:26:42 +00:00
|
|
|
avatar = plex.library.section('Movies').get('Avatar')
|
|
|
|
client = plex.client("Michael's iPhone")
|
|
|
|
client.playMedia(avatar)
|
2015-06-04 15:33:26 +00:00
|
|
|
```
|
|
|
|
```python
|
2015-06-04 15:26:42 +00:00
|
|
|
# Example 5: List all content with the word 'Game' in the title.
|
|
|
|
for video in plex.search('Game'):
|
|
|
|
print('%s (%s)' % (video.title, video.TYPE))
|
2015-06-04 15:33:26 +00:00
|
|
|
```
|
|
|
|
```python
|
2015-06-04 15:26:42 +00:00
|
|
|
# Example 6: List all movies directed by the same person as Jurassic Park.
|
2015-06-15 02:50:38 +00:00
|
|
|
movies = plex.library.section('Movies')
|
|
|
|
jurassic_park = movies.get('Jurassic Park')
|
2015-06-04 15:26:42 +00:00
|
|
|
director = jurassic_park.directors[0]
|
2015-06-15 02:50:38 +00:00
|
|
|
for movie in movies.search(None, director=director):
|
2015-06-04 15:26:42 +00:00
|
|
|
print(movie.title)
|
2015-06-04 15:33:26 +00:00
|
|
|
```
|
|
|
|
```python
|
2015-06-04 15:26:42 +00:00
|
|
|
# Example 7: List files for the latest episode of Friends.
|
2016-03-21 04:26:02 +00:00
|
|
|
thelastone = plex.library.get('Friends').episodes()[-1]
|
|
|
|
for part in thelastone.iterParts():
|
2015-06-04 15:26:42 +00:00
|
|
|
print(part.file)
|
2015-06-04 15:33:26 +00:00
|
|
|
```
|
|
|
|
```python
|
2015-06-04 15:31:10 +00:00
|
|
|
# Example 8: Get a URL to stream a movie or show in another client
|
|
|
|
jurassic_park = plex.library.section('Movies').get('Jurassic Park')
|
|
|
|
print 'Run running the following command to play in VLC:'
|
|
|
|
print 'vlc "%s"' % jurassic_park.getStreamUrl(videoResolution='800x600')
|
2015-06-04 15:26:42 +00:00
|
|
|
```
|
2014-12-29 03:21:58 +00:00
|
|
|
|
2016-03-18 20:25:59 +00:00
|
|
|
```python
|
|
|
|
# Example 9: Get audio/video/all playlists
|
|
|
|
for playlist in self.plex.playlists(playlisttype='audio'): # or playlisttype='video' or playlisttype=None
|
|
|
|
print(playlist.title)
|
|
|
|
```
|
|
|
|
|
2014-12-29 03:21:58 +00:00
|
|
|
#### FAQs ####
|
|
|
|
|
|
|
|
**Q. Why are you using camelCase and not following PEP8 guidelines?**
|
|
|
|
|
|
|
|
A. This API reads XML documents provided by MyPlex and the Plex Server.
|
|
|
|
We decided to conform to their style so that the API variable names directly
|
2015-06-08 13:55:02 +00:00
|
|
|
match with the provided XML documents.
|
2015-06-09 02:27:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
**Q. Why don't you offer feature XYZ?**
|
|
|
|
|
|
|
|
A. This library is meant to be a wrapper around the XML pages the Plex
|
|
|
|
server provides. If we are not providing an API that is offerered in the
|
|
|
|
XML pages, please let us know! -- Adding additional features beyond that
|
|
|
|
should be done outside the scope of this library.
|
2016-01-26 04:45:16 +00:00
|
|
|
|
|
|
|
[![Analytics](https://ga-beacon.appspot.com/UA-87461-7/python-plexapi/home)](https://github.com/igrigorik/ga-beacon)
|