Initial commit
This commit is contained in:
commit
2dae849d2e
6 changed files with 630 additions and 0 deletions
107
vlc_http.py
Normal file
107
vlc_http.py
Normal file
|
@ -0,0 +1,107 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
"""
|
||||
Library for contacting VLC through HTTP
|
||||
"""
|
||||
|
||||
import logging
|
||||
import xmltodict
|
||||
import requests
|
||||
import json
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
class ConnectionError(Exception):
|
||||
"""Something is wrong with the connection to VLC."""
|
||||
pass
|
||||
|
||||
class VLCHttp(object):
|
||||
def __init__(self, host, password="", port=8080):
|
||||
self._host = host
|
||||
self._password = password
|
||||
self._port = port
|
||||
|
||||
def run_command(self, command="", attrs=""):
|
||||
url = "http://{}:{}/requests/status.xml?command={}{}".format(self._host, self._port, command, attrs)
|
||||
data=None
|
||||
try:
|
||||
req = requests.get(url, auth=("", self._password), timeout=1)
|
||||
if req.status_code != 200:
|
||||
raise ConnectionError("Query failed, response code: %s Full message: %s".format(req.status, req))
|
||||
|
||||
data = xmltodict.parse(req.text, process_namespaces=True).get("root")
|
||||
|
||||
except Exception as error:
|
||||
_LOGGER.debug("Failed communicating with VLC Server: %s".format(error))
|
||||
|
||||
try:
|
||||
return data
|
||||
except AttributeError:
|
||||
_LOGGER.error("Received invalid response: %s".format(data))
|
||||
|
||||
def status(self):
|
||||
return self.run_command()
|
||||
|
||||
def get_length(self):
|
||||
try:
|
||||
return int(self.status()['length'])
|
||||
except:
|
||||
pass
|
||||
|
||||
def get_time(self):
|
||||
try:
|
||||
return int(self.status()['time'])
|
||||
except:
|
||||
pass
|
||||
|
||||
def info(self):
|
||||
try:
|
||||
category = self.status()['information']['category']
|
||||
if type(category) is list:
|
||||
data = category[0]['info']
|
||||
if type(data) is list:
|
||||
title = None
|
||||
artist = None
|
||||
for item in data:
|
||||
if item['@name'] == 'title':
|
||||
title = item['#text']
|
||||
elif item['@name'] == 'artist':
|
||||
artist = item['#text']
|
||||
return [{"title": title, "artist": artist}]
|
||||
elif data['@name'] == 'filename':
|
||||
return [{"title": data['#text']}]
|
||||
else:
|
||||
return
|
||||
except Exception:
|
||||
return
|
||||
|
||||
def seek(self, time):
|
||||
self.run_command("seek&val={}".format(time))
|
||||
|
||||
def set_volume(self, new_volume):
|
||||
self.run_command("volume&val={}".format(new_volume))
|
||||
|
||||
def play(self):
|
||||
self.run_command("pl_play")
|
||||
|
||||
def pause(self):
|
||||
self.run_command("pl_pause")
|
||||
|
||||
def stop(self):
|
||||
self.run_command("pl_stop")
|
||||
|
||||
def add(self, url):
|
||||
self.run_command("in_play&input={}".format(url))
|
||||
|
||||
def prev(self):
|
||||
self.run_command("pl_previous")
|
||||
|
||||
def next(self):
|
||||
self.run_command("pl_next")
|
||||
|
||||
def clear(self):
|
||||
self.run_command("pl_empty")
|
||||
|
||||
def random(self):
|
||||
self.run_command("pl_random")
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue