No commit activity in last 3 years
No release in over 3 years
Provides a convenient way to explore and access content provided by a UPnP media server.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.10
~> 10.0
~> 3.3

Runtime

>= 1.1
~> 2.6
 Project Readme

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
movie_metadata = service.Browse(
    ObjectID: movie.id, 
    BrowseFlag: 'BrowseMetadata', 
    Filter: '*'
)[:Result]
# => ... (Raw DIDL Lite metadata) ...