|
|
@ -11,6 +11,7 @@ from os.path import basename
|
|
|
|
from .common import InfoExtractor
|
|
|
|
from .common import InfoExtractor
|
|
|
|
from ..utils import ExtractorError, compat_urllib_request, compat_html_parser
|
|
|
|
from ..utils import ExtractorError, compat_urllib_request, compat_html_parser
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GroovesharkHtmlParser(compat_html_parser.HTMLParser):
|
|
|
|
class GroovesharkHtmlParser(compat_html_parser.HTMLParser):
|
|
|
|
def __init__(self):
|
|
|
|
def __init__(self):
|
|
|
|
self._current_object = None
|
|
|
|
self._current_object = None
|
|
|
@ -20,7 +21,7 @@ class GroovesharkHtmlParser(compat_html_parser.HTMLParser):
|
|
|
|
def handle_starttag(self, tag, attrs):
|
|
|
|
def handle_starttag(self, tag, attrs):
|
|
|
|
attrs = dict((k, v) for k, v in attrs)
|
|
|
|
attrs = dict((k, v) for k, v in attrs)
|
|
|
|
if tag == 'object':
|
|
|
|
if tag == 'object':
|
|
|
|
self._current_object = { 'attrs': attrs, 'params': [] }
|
|
|
|
self._current_object = {'attrs': attrs, 'params': []}
|
|
|
|
elif tag == 'param':
|
|
|
|
elif tag == 'param':
|
|
|
|
self._current_object['params'].append(attrs)
|
|
|
|
self._current_object['params'].append(attrs)
|
|
|
|
|
|
|
|
|
|
|
@ -36,6 +37,7 @@ class GroovesharkHtmlParser(compat_html_parser.HTMLParser):
|
|
|
|
p.close()
|
|
|
|
p.close()
|
|
|
|
return p.objects
|
|
|
|
return p.objects
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GroovesharkIE(InfoExtractor):
|
|
|
|
class GroovesharkIE(InfoExtractor):
|
|
|
|
_VALID_URL = r'https?://(www\.)?grooveshark\.com/#!/s/([^/]+)/([^/]+)'
|
|
|
|
_VALID_URL = r'https?://(www\.)?grooveshark\.com/#!/s/([^/]+)/([^/]+)'
|
|
|
|
_TEST = {
|
|
|
|
_TEST = {
|
|
|
@ -159,7 +161,7 @@ class GroovesharkIE(InfoExtractor):
|
|
|
|
if 'swf_referer' in locals():
|
|
|
|
if 'swf_referer' in locals():
|
|
|
|
headers['Referer'] = swf_referer
|
|
|
|
headers['Referer'] = swf_referer
|
|
|
|
|
|
|
|
|
|
|
|
req = compat_urllib_request.Request(streamurl, post_data, headers)
|
|
|
|
req = compat_urllib_request.Request(stream_url, post_data, headers)
|
|
|
|
|
|
|
|
|
|
|
|
info_dict = {
|
|
|
|
info_dict = {
|
|
|
|
'id': token,
|
|
|
|
'id': token,
|
|
|
@ -170,6 +172,8 @@ class GroovesharkIE(InfoExtractor):
|
|
|
|
'format': 'mp3 audio',
|
|
|
|
'format': 'mp3 audio',
|
|
|
|
'duration': duration,
|
|
|
|
'duration': duration,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# various ways of supporting the download request.
|
|
|
|
|
|
|
|
# remove keys unnecessary to the eventual post implementation
|
|
|
|
'post_data': post_data,
|
|
|
|
'post_data': post_data,
|
|
|
|
'post_dict': post_dict,
|
|
|
|
'post_dict': post_dict,
|
|
|
|
'headers': headers,
|
|
|
|
'headers': headers,
|
|
|
@ -197,4 +201,3 @@ class GroovesharkIE(InfoExtractor):
|
|
|
|
if fatal:
|
|
|
|
if fatal:
|
|
|
|
raise ee
|
|
|
|
raise ee
|
|
|
|
return None
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|