[soundcloud] get resource information in parallel

This commit is contained in:
QingQiz 2020-07-21 14:51:24 +08:00
parent 2275b0ae66
commit 69f92e9fc6

View File

@ -5,6 +5,8 @@ __all__ = ['sndcd_download']
from ..common import * from ..common import *
import re import re
import json import json
import operator
import functools
import urllib.error import urllib.error
@ -28,19 +30,19 @@ def get_resource_info(resource_url, client_id):
ids = [i['id'] for i in info if i.get('comment_count') is None] ids = [i['id'] for i in info if i.get('comment_count') is None]
ids = list(map(str, ids)) ids = list(map(str, ids))
ids_split = ['%2C'.join(ids[i:i+10]) for i in range(0, len(ids), 10)] ids_split = [['%2C'.join(ids[i:i+10])] for i in range(0, len(ids), 10)]
api_url = 'https://api-v2.soundcloud.com/tracks?ids={ids}&client_id={client_id}&%5Bobject%20Object%5D=&app_version=1584348206&app_locale=en' api_url = 'https://api-v2.soundcloud.com/tracks?ids={ids}&client_id={client_id}&%5Bobject%20Object%5D=&app_version=1584348206&app_locale=en'
res = [] def action(ids):
for ids in ids_split:
uri = api_url.format(ids=ids, client_id=client_id) uri = api_url.format(ids=ids, client_id=client_id)
cont = get_content(uri, decoded=True) cont = get_content(uri, decoded=True)
res += json.loads(cont) return json.loads(cont)
res = iter(res) res = parallel_run(action, ids_split, True)
info = [next(res) if i.get('comment_count') is None else i for i in info] res = iter(functools.reduce(operator.iconcat, res))
return [next(res) if i.get('comment_count') is None else i for i in info]
return info
def sndcd_download(url, output_dir='.', merge=True, info_only=False, **kwargs): def sndcd_download(url, output_dir='.', merge=True, info_only=False, **kwargs):