mirror of
https://github.com/LukeHagar/plexruby.git
synced 2025-12-06 04:20:52 +00:00
414 lines
19 KiB
Markdown
414 lines
19 KiB
Markdown
# plexruby
|
|
|
|
<div align="left">
|
|
<a href="https://speakeasyapi.dev/"><img src="https://custom-icon-badges.demolab.com/badge/-Built%20By%20Speakeasy-212015?style=for-the-badge&logoColor=FBE331&logo=speakeasy&labelColor=545454" /></a>
|
|
<a href="https://opensource.org/licenses/MIT">
|
|
<img src="https://img.shields.io/badge/License-MIT-blue.svg" style="width: 100px; height: 28px;" />
|
|
</a>
|
|
</div>
|
|
|
|
<!-- Start Summary [summary] -->
|
|
## Summary
|
|
|
|
Plex-API: An Open API Spec for interacting with Plex.tv and Plex Media Server
|
|
|
|
# Plex Media Server OpenAPI Specification
|
|
|
|
An Open Source OpenAPI Specification for Plex Media Server
|
|
|
|
Automation and SDKs provided by [Speakeasy](https://speakeasyapi.dev/)
|
|
|
|
## Documentation
|
|
|
|
[API Documentation](https://plexapi.dev)
|
|
|
|
## SDKs
|
|
|
|
The following SDKs are generated from the OpenAPI Specification. They are automatically generated and may not be fully tested. If you find any issues, please open an issue on the [main specification Repository](https://github.com/LukeHagar/plex-api-spec).
|
|
|
|
| Language | Repository | Releases | Other |
|
|
| --------------------- | ------------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------- |
|
|
| Python | [GitHub](https://github.com/LukeHagar/plexpy) | [PyPI](https://pypi.org/project/plex-api-client/) | - |
|
|
| JavaScript/TypeScript | [GitHub](https://github.com/LukeHagar/plexjs) | [NPM](https://www.npmjs.com/package/@lukehagar/plexjs) \ [JSR](https://jsr.io/@lukehagar/plexjs) | - |
|
|
| Go | [GitHub](https://github.com/LukeHagar/plexgo) | [Releases](https://github.com/LukeHagar/plexgo/releases) | [GoDoc](https://pkg.go.dev/github.com/LukeHagar/plexgo) |
|
|
| Ruby | [GitHub](https://github.com/LukeHagar/plexruby) | [Releases](https://github.com/LukeHagar/plexruby/releases) | - |
|
|
| Swift | [GitHub](https://github.com/LukeHagar/plexswift) | [Releases](https://github.com/LukeHagar/plexswift/releases) | - |
|
|
| PHP | [GitHub](https://github.com/LukeHagar/plexphp) | [Releases](https://github.com/LukeHagar/plexphp/releases) | - |
|
|
| Java | [GitHub](https://github.com/LukeHagar/plexjava) | [Releases](https://github.com/LukeHagar/plexjava/releases) | - |
|
|
| C# | [GitHub](https://github.com/LukeHagar/plexcsharp) | [Releases](https://github.com/LukeHagar/plexcsharp/releases) | -
|
|
<!-- End Summary [summary] -->
|
|
|
|
<!-- Start Table of Contents [toc] -->
|
|
## Table of Contents
|
|
<!-- $toc-max-depth=2 -->
|
|
* [plexruby](#plexruby)
|
|
* [Plex Media Server OpenAPI Specification](#plex-media-server-openapi-specification)
|
|
* [Documentation](#documentation)
|
|
* [SDKs](#sdks)
|
|
* [SDK Installation](#sdk-installation)
|
|
* [SDK Example Usage](#sdk-example-usage)
|
|
* [Authentication](#authentication)
|
|
* [Available Resources and Operations](#available-resources-and-operations)
|
|
* [Error Handling](#error-handling)
|
|
* [Server Selection](#server-selection)
|
|
* [Development](#development)
|
|
* [Maturity](#maturity)
|
|
* [Contributions](#contributions)
|
|
|
|
<!-- End Table of Contents [toc] -->
|
|
|
|
<!-- Start SDK Installation [installation] -->
|
|
## SDK Installation
|
|
|
|
The SDK can be installed using [RubyGems](https://rubygems.org/):
|
|
|
|
```bash
|
|
gem install plex_ruby_sdk
|
|
```
|
|
<!-- End SDK Installation [installation] -->
|
|
|
|
<!-- Start SDK Example Usage [usage] -->
|
|
## SDK Example Usage
|
|
|
|
### Example
|
|
|
|
```ruby
|
|
require 'plex_ruby_sdk'
|
|
|
|
s = ::PlexRubySDK::PlexAPI.new(
|
|
security: Models::Shared::Security.new(
|
|
access_token: "<YOUR_API_KEY_HERE>",
|
|
),
|
|
)
|
|
|
|
res = s.server.get_server_capabilities()
|
|
|
|
if ! res.object.nil?
|
|
# handle response
|
|
end
|
|
|
|
```
|
|
<!-- End SDK Example Usage [usage] -->
|
|
|
|
<!-- Start Authentication [security] -->
|
|
## Authentication
|
|
|
|
### Per-Client Security Schemes
|
|
|
|
This SDK supports the following security scheme globally:
|
|
|
|
| Name | Type | Scheme |
|
|
| -------------- | ------ | ------- |
|
|
| `access_token` | apiKey | API key |
|
|
|
|
You can set the security parameters through the `security` optional parameter when initializing the SDK client instance. For example:
|
|
```ruby
|
|
require 'plex_ruby_sdk'
|
|
|
|
s = ::PlexRubySDK::PlexAPI.new(
|
|
security: Models::Shared::Security.new(
|
|
access_token: "<YOUR_API_KEY_HERE>",
|
|
),
|
|
)
|
|
|
|
res = s.server.get_server_capabilities()
|
|
|
|
if ! res.object.nil?
|
|
# handle response
|
|
end
|
|
|
|
```
|
|
<!-- End Authentication [security] -->
|
|
|
|
<!-- Start Available Resources and Operations [operations] -->
|
|
## Available Resources and Operations
|
|
|
|
<details open>
|
|
<summary>Available methods</summary>
|
|
|
|
### [activities](docs/sdks/activities/README.md)
|
|
|
|
* [get_server_activities](docs/sdks/activities/README.md#get_server_activities) - Get Server Activities
|
|
* [cancel_server_activities](docs/sdks/activities/README.md#cancel_server_activities) - Cancel Server Activities
|
|
|
|
### [authentication](docs/sdks/authentication/README.md)
|
|
|
|
* [get_transient_token](docs/sdks/authentication/README.md#get_transient_token) - Get a Transient Token
|
|
* [get_source_connection_information](docs/sdks/authentication/README.md#get_source_connection_information) - Get Source Connection Information
|
|
* [get_token_details](docs/sdks/authentication/README.md#get_token_details) - Get Token Details
|
|
* [post_users_sign_in_data](docs/sdks/authentication/README.md#post_users_sign_in_data) - Get User Sign In Data
|
|
|
|
### [butler](docs/sdks/butler/README.md)
|
|
|
|
* [get_butler_tasks](docs/sdks/butler/README.md#get_butler_tasks) - Get Butler tasks
|
|
* [start_all_tasks](docs/sdks/butler/README.md#start_all_tasks) - Start all Butler tasks
|
|
* [stop_all_tasks](docs/sdks/butler/README.md#stop_all_tasks) - Stop all Butler tasks
|
|
* [start_task](docs/sdks/butler/README.md#start_task) - Start a single Butler task
|
|
* [stop_task](docs/sdks/butler/README.md#stop_task) - Stop a single Butler task
|
|
|
|
### [hubs](docs/sdks/hubs/README.md)
|
|
|
|
* [get_global_hubs](docs/sdks/hubs/README.md#get_global_hubs) - Get Global Hubs
|
|
* [get_recently_added](docs/sdks/hubs/README.md#get_recently_added) - Get Recently Added
|
|
* [get_library_hubs](docs/sdks/hubs/README.md#get_library_hubs) - Get library specific hubs
|
|
|
|
### [library](docs/sdks/library/README.md)
|
|
|
|
* [get_file_hash](docs/sdks/library/README.md#get_file_hash) - Get Hash Value
|
|
* [get_recently_added_library](docs/sdks/library/README.md#get_recently_added_library) - Get Recently Added
|
|
* [get_all_libraries](docs/sdks/library/README.md#get_all_libraries) - Get All Libraries
|
|
* [get_library_details](docs/sdks/library/README.md#get_library_details) - Get Library Details
|
|
* [delete_library](docs/sdks/library/README.md#delete_library) - Delete Library Section
|
|
* [get_library_items](docs/sdks/library/README.md#get_library_items) - Get Library Items
|
|
* [get_library_sections_all](docs/sdks/library/README.md#get_library_sections_all) - Get Library section media by tag ALL
|
|
* [get_refresh_library_metadata](docs/sdks/library/README.md#get_refresh_library_metadata) - Refresh Metadata Of The Library
|
|
* [get_search_library](docs/sdks/library/README.md#get_search_library) - Search Library
|
|
* [get_genres_library](docs/sdks/library/README.md#get_genres_library) - Get Genres of library media
|
|
* [get_countries_library](docs/sdks/library/README.md#get_countries_library) - Get Countries of library media
|
|
* [get_actors_library](docs/sdks/library/README.md#get_actors_library) - Get Actors of library media
|
|
* [get_search_all_libraries](docs/sdks/library/README.md#get_search_all_libraries) - Search All Libraries
|
|
* [get_media_meta_data](docs/sdks/library/README.md#get_media_meta_data) - Get Media Metadata
|
|
* [get_media_arts](docs/sdks/library/README.md#get_media_arts) - Get Media Background Artwork
|
|
* [post_media_arts](docs/sdks/library/README.md#post_media_arts) - Upload Media Background Artwork
|
|
* [get_media_posters](docs/sdks/library/README.md#get_media_posters) - Get Media Posters
|
|
* [post_media_poster](docs/sdks/library/README.md#post_media_poster) - Upload Media Poster
|
|
* [get_metadata_children](docs/sdks/library/README.md#get_metadata_children) - Get Items Children
|
|
* [get_top_watched_content](docs/sdks/library/README.md#get_top_watched_content) - Get Top Watched Content
|
|
|
|
### [log](docs/sdks/log/README.md)
|
|
|
|
* [log_line](docs/sdks/log/README.md#log_line) - Logging a single line message.
|
|
* [log_multi_line](docs/sdks/log/README.md#log_multi_line) - Logging a multi-line message
|
|
* [enable_paper_trail](docs/sdks/log/README.md#enable_paper_trail) - Enabling Papertrail
|
|
|
|
### [media](docs/sdks/media/README.md)
|
|
|
|
* [mark_played](docs/sdks/media/README.md#mark_played) - Mark Media Played
|
|
* [mark_unplayed](docs/sdks/media/README.md#mark_unplayed) - Mark Media Unplayed
|
|
* [update_play_progress](docs/sdks/media/README.md#update_play_progress) - Update Media Play Progress
|
|
* [get_banner_image](docs/sdks/media/README.md#get_banner_image) - Get Banner Image
|
|
* [get_thumb_image](docs/sdks/media/README.md#get_thumb_image) - Get Thumb Image
|
|
|
|
### [playlists](docs/sdks/playlists/README.md)
|
|
|
|
* [create_playlist](docs/sdks/playlists/README.md#create_playlist) - Create a Playlist
|
|
* [get_playlists](docs/sdks/playlists/README.md#get_playlists) - Get All Playlists
|
|
* [get_playlist](docs/sdks/playlists/README.md#get_playlist) - Retrieve Playlist
|
|
* [delete_playlist](docs/sdks/playlists/README.md#delete_playlist) - Deletes a Playlist
|
|
* [update_playlist](docs/sdks/playlists/README.md#update_playlist) - Update a Playlist
|
|
* [get_playlist_contents](docs/sdks/playlists/README.md#get_playlist_contents) - Retrieve Playlist Contents
|
|
* [clear_playlist_contents](docs/sdks/playlists/README.md#clear_playlist_contents) - Delete Playlist Contents
|
|
* [add_playlist_contents](docs/sdks/playlists/README.md#add_playlist_contents) - Adding to a Playlist
|
|
* [upload_playlist](docs/sdks/playlists/README.md#upload_playlist) - Upload Playlist
|
|
|
|
### [plex](docs/sdks/plex/README.md)
|
|
|
|
* [get_companions_data](docs/sdks/plex/README.md#get_companions_data) - Get Companions Data
|
|
* [get_user_friends](docs/sdks/plex/README.md#get_user_friends) - Get list of friends of the user logged in
|
|
* [get_geo_data](docs/sdks/plex/README.md#get_geo_data) - Get Geo Data
|
|
* [get_home_data](docs/sdks/plex/README.md#get_home_data) - Get Plex Home Data
|
|
* [get_server_resources](docs/sdks/plex/README.md#get_server_resources) - Get Server Resources
|
|
* [get_pin](docs/sdks/plex/README.md#get_pin) - Get a Pin
|
|
* [get_token_by_pin_id](docs/sdks/plex/README.md#get_token_by_pin_id) - Get Access Token by PinId
|
|
|
|
|
|
### [search](docs/sdks/search/README.md)
|
|
|
|
* [perform_search](docs/sdks/search/README.md#perform_search) - Perform a search
|
|
* [perform_voice_search](docs/sdks/search/README.md#perform_voice_search) - Perform a voice search
|
|
* [get_search_results](docs/sdks/search/README.md#get_search_results) - Get Search Results
|
|
|
|
### [server](docs/sdks/server/README.md)
|
|
|
|
* [get_server_capabilities](docs/sdks/server/README.md#get_server_capabilities) - Get Server Capabilities
|
|
* [get_server_preferences](docs/sdks/server/README.md#get_server_preferences) - Get Server Preferences
|
|
* [get_available_clients](docs/sdks/server/README.md#get_available_clients) - Get Available Clients
|
|
* [get_devices](docs/sdks/server/README.md#get_devices) - Get Devices
|
|
* [get_server_identity](docs/sdks/server/README.md#get_server_identity) - Get Server Identity
|
|
* [get_my_plex_account](docs/sdks/server/README.md#get_my_plex_account) - Get MyPlex Account
|
|
* [get_resized_photo](docs/sdks/server/README.md#get_resized_photo) - Get a Resized Photo
|
|
* [get_media_providers](docs/sdks/server/README.md#get_media_providers) - Get Media Providers
|
|
* [get_server_list](docs/sdks/server/README.md#get_server_list) - Get Server List
|
|
|
|
### [sessions](docs/sdks/sessions/README.md)
|
|
|
|
* [get_sessions](docs/sdks/sessions/README.md#get_sessions) - Get Active Sessions
|
|
* [get_session_history](docs/sdks/sessions/README.md#get_session_history) - Get Session History
|
|
* [get_transcode_sessions](docs/sdks/sessions/README.md#get_transcode_sessions) - Get Transcode Sessions
|
|
* [stop_transcode_session](docs/sdks/sessions/README.md#stop_transcode_session) - Stop a Transcode Session
|
|
|
|
### [statistics](docs/sdks/statistics/README.md)
|
|
|
|
* [get_statistics](docs/sdks/statistics/README.md#get_statistics) - Get Media Statistics
|
|
* [get_resources_statistics](docs/sdks/statistics/README.md#get_resources_statistics) - Get Resources Statistics
|
|
* [get_bandwidth_statistics](docs/sdks/statistics/README.md#get_bandwidth_statistics) - Get Bandwidth Statistics
|
|
|
|
### [updater](docs/sdks/updater/README.md)
|
|
|
|
* [get_update_status](docs/sdks/updater/README.md#get_update_status) - Querying status of updates
|
|
* [check_for_updates](docs/sdks/updater/README.md#check_for_updates) - Checking for updates
|
|
* [apply_updates](docs/sdks/updater/README.md#apply_updates) - Apply Updates
|
|
|
|
### [users](docs/sdks/users/README.md)
|
|
|
|
* [get_users](docs/sdks/users/README.md#get_users) - Get list of all connected users
|
|
|
|
### [video](docs/sdks/video/README.md)
|
|
|
|
* [get_timeline](docs/sdks/video/README.md#get_timeline) - Get the timeline for a media item
|
|
* [start_universal_transcode](docs/sdks/video/README.md#start_universal_transcode) - Start Universal Transcode
|
|
|
|
### [watchlist](docs/sdks/watchlist/README.md)
|
|
|
|
* [get_watch_list](docs/sdks/watchlist/README.md#get_watch_list) - Get User Watchlist
|
|
|
|
</details>
|
|
<!-- End Available Resources and Operations [operations] -->
|
|
|
|
<!-- Start Error Handling [errors] -->
|
|
## Error Handling
|
|
|
|
Handling errors in this SDK should largely match your expectations. All operations return a response object or raise an error.
|
|
|
|
By default an API error will raise a `Errors::APIError`, which has the following properties:
|
|
|
|
| Property | Type | Description |
|
|
|----------------|-----------------------------------------|-----------------------|
|
|
| `message` | *string* | The error message |
|
|
| `status_code` | *int* | The HTTP status code |
|
|
| `raw_response` | *Faraday::Response* | The raw HTTP response |
|
|
| `body` | *string* | The response content |
|
|
|
|
When custom error responses are specified for an operation, the SDK may also throw their associated exception. You can refer to respective *Errors* tables in SDK docs for more details on possible exception types for each operation. For example, the `get_server_capabilities` method throws the following exceptions:
|
|
|
|
| Error Type | Status Code | Content Type |
|
|
| ------------------------------------------------- | ----------- | ---------------- |
|
|
| Models::Errors::GetServerCapabilitiesBadRequest | 400 | application/json |
|
|
| Models::Errors::GetServerCapabilitiesUnauthorized | 401 | application/json |
|
|
| Errors::APIError | 4XX, 5XX | \*/\* |
|
|
|
|
### Example
|
|
|
|
```ruby
|
|
require 'plex_ruby_sdk'
|
|
|
|
s = ::PlexRubySDK::PlexAPI.new(
|
|
security: Models::Shared::Security.new(
|
|
access_token: '<YOUR_API_KEY_HERE>',
|
|
),
|
|
)
|
|
|
|
begin
|
|
res = s.server.get_server_capabilities()
|
|
|
|
if ! res.object.nil?
|
|
# handle response
|
|
end
|
|
rescue Models::Errors::GetServerCapabilitiesBadRequest => e
|
|
# handle $e->$container data
|
|
throw $e;
|
|
rescue Models::Errors::GetServerCapabilitiesUnauthorized => e
|
|
# handle $e->$container data
|
|
throw $e;
|
|
rescue Errors::APIError => e
|
|
# handle default exception
|
|
raise e
|
|
end
|
|
|
|
```
|
|
<!-- End Error Handling [errors] -->
|
|
|
|
<!-- Start Server Selection [server] -->
|
|
## Server Selection
|
|
|
|
### Server Variables
|
|
|
|
The default server `{protocol}://{ip}:{port}` contains variables and is set to `https://10.10.10.47:32400` by default. To override default values, the following parameters are available when initializing the SDK client instance:
|
|
|
|
| Variable | Parameter | Supported Values | Default | Description |
|
|
| ---------- | ------------------------------------------------------------------- | -------------------------- | --------------- | ---------------------------------------------- |
|
|
| `protocol` | `protocol (::PlexRubySDK::Models::ServerVariables::ServerProtocol)` | - `"http"`<br/>- `"https"` | `"https"` | The protocol to use for the server connection |
|
|
| `ip` | `ip (::String)` | ::String | `"10.10.10.47"` | The IP address or hostname of your Plex Server |
|
|
| `port` | `port (::String)` | ::String | `"32400"` | The port of your Plex Server |
|
|
|
|
#### Example
|
|
|
|
```ruby
|
|
require 'plex_ruby_sdk'
|
|
|
|
s = ::PlexRubySDK::PlexAPI.new(
|
|
protocol: "https",
|
|
ip: "e0c3:bcc0:6bac:dccc:c4ec:34b1:ca98:4cb9",
|
|
port: "40311",
|
|
security: Models::Shared::Security.new(
|
|
access_token: "<YOUR_API_KEY_HERE>",
|
|
),
|
|
)
|
|
|
|
res = s.server.get_server_capabilities()
|
|
|
|
if ! res.object.nil?
|
|
# handle response
|
|
end
|
|
|
|
```
|
|
|
|
### Override Server URL Per-Client
|
|
|
|
The default server can be overridden globally by passing a URL to the `server_url (String)` optional parameter when initializing the SDK client instance. For example:
|
|
```ruby
|
|
require 'plex_ruby_sdk'
|
|
|
|
s = ::PlexRubySDK::PlexAPI.new(
|
|
server_url: "https://10.10.10.47:32400",
|
|
security: Models::Shared::Security.new(
|
|
access_token: "<YOUR_API_KEY_HERE>",
|
|
),
|
|
)
|
|
|
|
res = s.server.get_server_capabilities()
|
|
|
|
if ! res.object.nil?
|
|
# handle response
|
|
end
|
|
|
|
```
|
|
|
|
### Override Server URL Per-Operation
|
|
|
|
The server URL can also be overridden on a per-operation basis, provided a server list was specified for the operation. For example:
|
|
```ruby
|
|
require 'plex_ruby_sdk'
|
|
|
|
s = ::PlexRubySDK::PlexAPI.new(
|
|
security: Models::Shared::Security.new(
|
|
access_token: "<YOUR_API_KEY_HERE>",
|
|
),
|
|
)
|
|
|
|
res = s.plex.get_companions_data(server_url: "https://plex.tv/api/v2")
|
|
|
|
if ! res.response_bodies.nil?
|
|
# handle response
|
|
end
|
|
|
|
```
|
|
<!-- End Server Selection [server] -->
|
|
|
|
<!-- Placeholder for Future Speakeasy SDK Sections -->
|
|
|
|
# Development
|
|
|
|
## Maturity
|
|
|
|
This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage
|
|
to a specific package version. This way, you can install the same version each time without breaking changes unless you are intentionally
|
|
looking for the latest version.
|
|
|
|
## Contributions
|
|
|
|
While we value open-source contributions to this SDK, this library is generated programmatically.
|
|
Feel free to open a PR or a Github issue as a proof of concept and we'll do our best to include it in a future release!
|
|
|
|
### SDK Created by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks)
|