Forked from KennethNielsen/gist:d28e635b77e2370e6a19
Last active
August 29, 2015 14:14
-
-
Save lawrenceakka/4264c59da463fff0bc93 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
from __future__ import print_function | |
from pprint import pprint | |
import time | |
import traceback | |
from soco import SoCo | |
import soco | |
from soco.music_services import MusicService | |
### EDIT HERE START | |
SPEAKER_IP = '192.168.?.?' | |
# Include enough search terms here, to make sure you get a hit in all categories with all services | |
SEARCH_TERMS = ['hit', 'b'] | |
### EDIT HERE END | |
results = [] | |
def res(description, result): | |
print(description, result) | |
results.append((description, result)) | |
all_services = MusicService.get_all_music_services_names() | |
res('all_services', 'OK' if len(all_services) > 0 else 'FAILED') | |
def test_music_service(service): | |
print() | |
init_str = 'Instantiate {}'.format(service) | |
try: | |
musicservice = MusicService(service) | |
print(musicservice) | |
res(init_str, 'OK') | |
except soco.exceptions.SoCoUPnPException: | |
res(init_str, 'FAILED') | |
return | |
test_str = '{} {{}}'.format(service) | |
root = musicservice.get_metadata(item_id='root') | |
res(test_str.format('get_metadata root'), 'OK' if root['count'] > 0 else 'FAILED') | |
if root['count'] == 0: | |
return | |
for item in root['mediaCollection']: | |
try: | |
musicservice.get_metadata(item_id=item['id']) | |
except: | |
res(test_str.format('get_metadata on items in root'), 'FAILED') | |
break | |
else: | |
res(test_str.format('get_metadata on items in root'), 'OK') | |
try: | |
search_categories = musicservice.available_search_categories | |
res(test_str.format('available_search_categories'), 'OK') | |
except: | |
res(test_str.format('available_search_categories'), 'FAILED') | |
return | |
for search in search_categories: | |
time.sleep(0.5) | |
try: | |
for search_term in SEARCH_TERMS: | |
search_res = musicservice.search(search, term=search_term) | |
if search_res['count'] > 0: | |
break | |
res(test_str.format('=== search({})'.format(search)), 'OK') | |
except: | |
res(test_str.format('=== search({})'.format(search)), 'FAILED') | |
continue | |
items = None | |
type_ = None | |
for key in ['mediaMetadata', 'mediaCollection']: | |
if key in search_res: | |
if items is not None: | |
raise Exception("Bad search") | |
items = search_res[key] | |
type_ = key | |
if items is not None: | |
res(test_str.format('results in search'), 'OK') | |
else: | |
res(test_str.format('results in search'), 'FAILED') | |
continue | |
for item in items: | |
try: | |
time.sleep(0.5) | |
musicservice.get_metadata(item_id=item['id']) | |
res(test_str.format('get_metadata on {}'.format(search)), 'OK') | |
break | |
except: | |
res(test_str.format('get_metadata on {}'.format(search)), 'FAILED') | |
print(traceback.format_exc()) | |
break | |
# Assume we can only ask for media_metadata and uri on tracks | |
if type_ == 'mediaCollection': | |
continue | |
for item in items: | |
try: | |
time.sleep(0.5) | |
musicservice.get_media_metadata(item_id=item['id']) | |
res(test_str.format('get_media_metadata on {}'.format(search)), 'OK') | |
break | |
except: | |
res(test_str.format('get_media_metadata on {}'.format(search)), 'FAILED') | |
break | |
for item in items: | |
try: | |
time.sleep(0.5) | |
musicservice.get_media_uri(item_id=item['id']) | |
res(test_str.format('get_media_uri on {}'.format(search)), 'OK') | |
break | |
except: | |
res(test_str.format('get_media_uri on {}'.format(search)), 'FAILED') | |
break | |
subscribed = MusicService.get_subscribed_services_names() | |
res('get_subscribed_music_services', 'OK' if len(subscribed) > 0 else 'FAILED') | |
for service in subscribed: | |
test_music_service(service) | |
print('\n### SUMMARY') | |
for result in results: | |
if result[0].startswith('Instantiate'): | |
print() | |
print('{:.<60}:{}'.format(*result)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment