2014-01-19 04:38:48 -06:00
|
|
|
from __future__ import unicode_literals
|
|
|
|
|
2013-10-28 16:02:17 -05:00
|
|
|
import re
|
|
|
|
import json
|
|
|
|
|
|
|
|
from .common import InfoExtractor
|
2014-11-23 15:12:18 -06:00
|
|
|
from ..compat import (
|
2013-10-28 16:02:17 -05:00
|
|
|
compat_str,
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
class MySpaceIE(InfoExtractor):
|
2014-01-19 19:44:08 -06:00
|
|
|
_VALID_URL = r'https?://myspace\.com/([^/]+)/(?P<mediatype>video/[^/]+/|music/song/.*?)(?P<id>\d+)'
|
2014-01-19 04:38:48 -06:00
|
|
|
|
|
|
|
_TESTS = [
|
|
|
|
{
|
|
|
|
'url': 'https://myspace.com/coldplay/video/viva-la-vida/100008689',
|
|
|
|
'info_dict': {
|
|
|
|
'id': '100008689',
|
|
|
|
'ext': 'flv',
|
|
|
|
'title': 'Viva La Vida',
|
|
|
|
'description': 'The official Viva La Vida video, directed by Hype Williams',
|
|
|
|
'uploader': 'Coldplay',
|
|
|
|
'uploader_id': 'coldplay',
|
|
|
|
},
|
|
|
|
'params': {
|
|
|
|
# rtmp download
|
|
|
|
'skip_download': True,
|
|
|
|
},
|
2013-10-28 16:02:17 -05:00
|
|
|
},
|
2014-01-19 04:38:48 -06:00
|
|
|
# song
|
|
|
|
{
|
|
|
|
'url': 'https://myspace.com/spiderbags/music/song/darkness-in-my-heart-39008454-27041242',
|
|
|
|
'info_dict': {
|
|
|
|
'id': '39008454',
|
|
|
|
'ext': 'flv',
|
|
|
|
'title': 'Darkness In My Heart',
|
|
|
|
'uploader_id': 'spiderbags',
|
|
|
|
},
|
|
|
|
'params': {
|
|
|
|
# rtmp download
|
|
|
|
'skip_download': True,
|
|
|
|
},
|
2013-10-28 16:02:17 -05:00
|
|
|
},
|
2014-01-19 04:38:48 -06:00
|
|
|
]
|
2013-10-28 16:02:17 -05:00
|
|
|
|
|
|
|
def _real_extract(self, url):
|
|
|
|
mobj = re.match(self._VALID_URL, url)
|
|
|
|
video_id = mobj.group('id')
|
|
|
|
webpage = self._download_webpage(url, video_id)
|
2014-11-30 12:06:23 -06:00
|
|
|
player_url = self._search_regex(
|
|
|
|
r'playerSwf":"([^"?]*)', webpage, 'player URL')
|
2014-01-19 04:38:48 -06:00
|
|
|
|
2014-01-19 19:44:08 -06:00
|
|
|
if mobj.group('mediatype').startswith('music/song'):
|
2014-01-19 04:38:48 -06:00
|
|
|
# songs don't store any useful info in the 'context' variable
|
|
|
|
def search_data(name):
|
2014-11-23 15:12:18 -06:00
|
|
|
return self._search_regex(
|
|
|
|
r'data-%s="(.*?)"' % name, webpage, name)
|
2014-01-19 04:38:48 -06:00
|
|
|
streamUrl = search_data('stream-url')
|
|
|
|
info = {
|
|
|
|
'id': video_id,
|
|
|
|
'title': self._og_search_title(webpage),
|
2014-11-30 12:07:36 -06:00
|
|
|
'uploader': search_data('artist-name'),
|
2014-01-19 04:38:48 -06:00
|
|
|
'uploader_id': search_data('artist-username'),
|
2014-11-30 12:07:36 -06:00
|
|
|
'playlist': search_data('album-title'),
|
2014-01-19 04:38:48 -06:00
|
|
|
'thumbnail': self._og_search_thumbnail(webpage),
|
|
|
|
}
|
|
|
|
else:
|
2014-11-23 15:12:18 -06:00
|
|
|
context = json.loads(self._search_regex(
|
|
|
|
r'context = ({.*?});', webpage, 'context'))
|
2014-01-19 04:38:48 -06:00
|
|
|
video = context['video']
|
|
|
|
streamUrl = video['streamUrl']
|
|
|
|
info = {
|
|
|
|
'id': compat_str(video['mediaId']),
|
|
|
|
'title': video['title'],
|
|
|
|
'description': video['description'],
|
|
|
|
'thumbnail': video['imageUrl'],
|
|
|
|
'uploader': video['artistName'],
|
|
|
|
'uploader_id': video['artistUsername'],
|
|
|
|
}
|
|
|
|
|
|
|
|
rtmp_url, play_path = streamUrl.split(';', 1)
|
|
|
|
info.update({
|
2013-10-28 16:02:17 -05:00
|
|
|
'url': rtmp_url,
|
|
|
|
'play_path': play_path,
|
2014-11-30 12:06:23 -06:00
|
|
|
'player_url': player_url,
|
2013-10-28 16:02:17 -05:00
|
|
|
'ext': 'flv',
|
2014-01-19 04:38:48 -06:00
|
|
|
})
|
|
|
|
return info
|