upnp_content_explorer
A convenience wrapper around an easy_upnp service to access content.
Installing
upnp_content_explorer
is available on Rubygems. You can install it with:
$ gem install upnp_content_explorer
You can also add it to your Gemfile:
gem 'upnp_content_explorer'
What's this for?
This gem makes it easy to explore and navigate content provided by a UPnP media server implementing the urn:schemas-upnp-org:service:ContentDirectory:1
service. At the moment, it relies on easy_upnp
to interface with the UPnP server.
Example usage
Given an easy_upnp
server identified by service
, you can construct a content explorer as follows:
require 'upnp_content_explorer'
explorer = UpnpContentExplorer::Explorer.new(service)
You can then do the following:
Get the contents of a directory
node = explorer.get('/Movies')
node.children.map(&:title)
# => ["Comedy", "Horror", "Suspense"]
node.items.map(&:title)
# => ["Inside Out (2015).mkv"]
List the children of a directory
children = explorer.get('/Movies').children
children.map(&:title)
# => ["Comedy", "Horror", "Suspense"]
List the files inside of a directory
items = explorer.get('/Movies').items
items.map(&:title)
# => ["Inside Out (2015).mkv"]
Recursively scrape all content of a directory
movies = explorer.scrape('/Movies')
movies.map(&:title)
# => ["Inside Out (2015).mkv", "Exorcist, The (1973).mkv", "Seven (1995).mkv", "Airplane (1980).mkv"]
Mounting at non-root directory
explorer.root_path
#=> "/"
movies = explorer.get('/Movies')
explorer = UpnpContentExplorer::Explorer.new(service, root_id: movies.id)
explorer.root_path
#=> "/Movies"
Extracting metadata
To extract DIDL Lite metadata for an item, you should generally call Browse
with the BrowseFlag
parameter equal to 'BrowseMetadata'
, passing the ObjectID
of the item in question. For example:
# Choose a random movie
movie = explorer.scrape('/Movies').sample
movie.title
# => "Airplane (1980).mkv"
# Get movie metadata
= service.Browse(
ObjectID: movie.id,
BrowseFlag: 'BrowseMetadata',
Filter: '*'
)[:Result]
# => ... (Raw DIDL Lite metadata) ...