Remove soundcloud libs

NEED TESTING
master
flyingrub 2016-03-01 23:58:59 +01:00
parent 1e8de9f72a
commit d902c8e2af
1 changed files with 26 additions and 52 deletions

View File

@ -35,7 +35,6 @@ Options:
--hide-progress Hide the wget progress bar
"""
import json
import logging
import os
import signal
@ -77,7 +76,9 @@ url = {
'all': ('https://api-v2.soundcloud.com/profile/soundcloud:users:{0}?'
'limit=200&offset={1}'),
'playlists': ('https://api.soundcloud.com/users/{0}/playlists?'
'limit=200&offset={1}')
'limit=200&offset={1}'),
'resolve': ('https://api.soundcloud.com/resolve?url={0}'),
'me': ('https://api.soundcloud.com/me?oauth_token={0}')
}
client = soundcloud.Client(client_id=scdl_client_id)
@ -163,12 +164,16 @@ def get_item(track_url):
Fetches metadata for an track or playlist
"""
try:
item = client.get('/resolve', url=track_url)
item_url = url['resolve'].format(track_url)
item_url = '{0}&client_id={1}'.format(item_url, scdl_client_id)
r = requests.get(item_url)
item = r.json()
except Exception:
logger.error('Error resolving url, retrying...')
time.sleep(5)
try:
item = client.get('/resolve', url=track_url)
r = requests.get(item_url)
item = r.json()
except Exception as e:
logger.error('Could not resolve url {0}'.format(track_url))
logger.exception(e)
@ -183,20 +188,18 @@ def parse_url(track_url):
"""
global arguments
item = get_item(track_url)
logger.debug(item)
if not item:
return
elif isinstance(item, soundcloud.resource.ResourceList):
download_all_of_a_page(item)
elif item.kind == 'track':
elif item['kind'] == 'track':
logger.info('Found a track')
track = json.loads(item.raw_data)
download_track(track)
elif item.kind == 'playlist':
download_track(item)
elif item['kind'] == 'playlist':
logger.info('Found a playlist')
playlist = json.loads(item.raw_data)
download_playlist(playlist)
elif item.kind == 'user':
download_playlist(item)
elif item['kind'] == 'user':
logger.info('Found a user profile')
if arguments['-f']:
download(item, 'favorites', 'likes')
@ -216,15 +219,16 @@ def who_am_i():
"""
display to who the current token correspond, check if the token is valid
"""
global client
client = soundcloud.Client(access_token=token, client_id=scdl_client_id)
me = url['me'].format(token)
me = '{0}&client_id={1}'.format(me, scdl_client_id)
r = requests.get(me)
current_user = r.json()
logger.debug(me)
try:
current_user = client.get('/me')
except:
if r.status_code == 401:
logger.error('Invalid token...')
sys.exit(0)
logger.info('Hello {0.username}!'.format(current_user))
logger.info('Hello {0}!'.format(current_user['username']))
logger.newline()
return current_user
@ -233,7 +237,6 @@ def download(user, dl_type, name):
"""
Download all items of a user
"""
user = json.loads(user.raw_data)
username = user['username']
user_id = user['id']
logger.info(
@ -318,45 +321,20 @@ def download_all_of_a_page(tracks):
download_track(track)
def alternative_download(track):
"""
OBSOLETE ?
Not sure if the url is sill correct...
"""
logger.debug('alternative_download used')
url = ('http://api.soundcloud.com/i1/tracks/{0.id}/streams?'
'client_id=a3e059563d7fd3372b49b37f00a00bcf').format(track)
r = requests.get(url)
json_data = r.json()
try:
mp3_url = json_data['http_mp3_128_url']
except KeyError:
logger.error(
'http_mp3_128_url not found in json response, report to developer.'
)
mp3_url = None
return mp3_url
def download_track(track, playlist_name=None, playlist_file=None):
"""
Downloads a track
"""
global arguments
title = track['title']
title = title.encode('utf-8', 'ignore').decode(sys.stdout.encoding)
if track['streamable']:
try:
stream_url = client.get(track['stream_url'], allow_redirects=False)
url = stream_url.location
except requests.exceptions.HTTPError:
url = alternative_download(track)
url = '{0}?client_id={1}'.format(track['stream_url'], scdl_client_id)
else:
title = track['title']
logger.error('{0} is not streamable...'.format(title))
logger.newline()
return
title = track['title']
title = title.encode('utf-8', 'ignore').decode(sys.stdout.encoding)
logger.info('Downloading {0}'.format(title))
# filename
@ -387,6 +365,7 @@ def download_track(track, playlist_name=None, playlist_file=None):
# Download
if not os.path.isfile(filename):
logger.debug(url)
r = requests.get(url, stream=True)
temp = tempfile.NamedTemporaryFile(delete=False)
with temp as f:
@ -459,11 +438,6 @@ def signal_handler(signal, frame):
"""
Handle Keyboardinterrupt
"""
time.sleep(1)
for path in os.listdir():
if not os.path.isdir(path) and '.tmp' in path:
os.remove(path)
logger.newline()
logger.info('Good bye!')
sys.exit(0)