diff --git a/api/helpers.py b/api/helpers.py index e3e50d5..a29edfb 100644 --- a/api/helpers.py +++ b/api/helpers.py @@ -2,10 +2,12 @@ import datetime from rest_framework.response import Response from rest_framework.status import HTTP_400_BAD_REQUEST, HTTP_201_CREATED, HTTP_204_NO_CONTENT, HTTP_200_OK from rest_framework.views import APIView +from core.radio import ice_scrobbler from dss import settings from spa.models import Mix, UserProfile from core.utils import session + class Helper(APIView): pass @@ -22,7 +24,7 @@ class ChatHelper(ActivityHelper): # do some persistence stuff with the chat from core.realtime import chat - #user = self.get_session(request) + # user = self.get_session(request) u = request.user if not u.is_anonymous(): image = u.userprofile.get_sized_avatar_image(32, 32) @@ -59,3 +61,18 @@ class UserSlugCheckHelper(Helper): return Response(status=HTTP_204_NO_CONTENT) except UserProfile.DoesNotExist: return Response(status=HTTP_200_OK) + + +class RadioHelper(Helper): + def get(self, request): + if 'rmix' in self.request.query_params: + m = Mix.objects.order_by('?').first() + ret = { + 'url': m.get_stream_url(), + 'slug': m.get_full_url(), + 'title': str(m) + } + elif 'np' in self.request.query_params: + ret = ice_scrobbler.get_server_details("localhost", "8000", "dss") + + return Response(data=ret, status=HTTP_200_OK) diff --git a/api/urls.py b/api/urls.py index a876301..2541d15 100755 --- a/api/urls.py +++ b/api/urls.py @@ -64,6 +64,7 @@ urlpatterns = patterns( url(r'^_act/play', helpers.ActivityPlayHelper.as_view()), url(r'^_chat/', helpers.ChatHelper.as_view()), + url(r'^_radio', helpers.RadioHelper.as_view()), url(r'^__debug/', DebugView.as_view()), diff --git a/core/jingles/220.mp3 b/core/jingles/220.mp3 new file mode 100644 index 0000000..286d29a Binary files /dev/null and b/core/jingles/220.mp3 differ diff --git a/core/jingles/360.mp3 b/core/jingles/360.mp3 new file mode 100644 index 0000000..efd28c3 Binary files /dev/null and b/core/jingles/360.mp3 differ diff --git a/core/jingles/440.mp3 b/core/jingles/440.mp3 new file mode 100644 index 0000000..6b643c2 Binary files /dev/null and b/core/jingles/440.mp3 differ diff --git a/core/radio/__init__.py b/core/radio/__init__.py new file mode 100644 index 0000000..6d4caf8 --- /dev/null +++ b/core/radio/__init__.py @@ -0,0 +1 @@ +__author__ = 'fergalm' diff --git a/core/radio/ice_scrobbler.py b/core/radio/ice_scrobbler.py new file mode 100644 index 0000000..1d3185f --- /dev/null +++ b/core/radio/ice_scrobbler.py @@ -0,0 +1,45 @@ +import requests +from bs4 import BeautifulSoup +from requests.packages.urllib3.connection import ConnectionError + + +def get_server_details(server, port, mount): + server = "http://%s:%s/status.xsl?mount=/%s" % (server, port, mount) + print("Getting info for %s" % server) + try: + response = requests.get(server) + html = response.text + if html: + try: + soup = BeautifulSoup(html, "html.parser") + info = { + 'stream_title': soup.find(text="Stream Title:").findNext('td').contents[0], + 'stream_description': soup.find(text="Stream Description:").findNext('td').contents[0], + 'content_type': soup.find(text="Content Type:").findNext('td').contents[0], + 'mount_started': soup.find(text="Mount started:").findNext('td').contents[0], + 'current_listeners': soup.find(text="Current Listeners:").findNext('td').contents[0], + 'peak_listeners': soup.find(text="Peak Listeners:").findNext('td').contents[0], + 'stream_url': soup.find(text="Stream URL:").findNext('td').findNext('a').contents[0], + 'current_song': soup.find(text="Current Song:").findNext('td').contents[0] + } + return { + 'status': 2, + 'metadata': info + } + except AttributeError: + return { + 'status': 1 + } + else: + return { + 'status': 0 + } + except Exception as ex: + return { + 'status': 0 + } + + +if __name__ == '__main__': + d = get_server_details("localhost", "8000", "dss") + print(d) diff --git a/spa/models/mix.py b/spa/models/mix.py index 56e54f2..743dc3c 100755 --- a/spa/models/mix.py +++ b/spa/models/mix.py @@ -95,7 +95,7 @@ class Mix(BaseModel): return self.__unicode__() def __unicode__(self): - return self.title + return "{} - {}".format(self.user.get_nice_name(), self.title) def save(self, force_insert=False, force_update=False, using=None, update_fields=None): if not self.id: