soundcloud.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. ## Soundcloud (Music)
  2. #
  3. # @website https://soundcloud.com
  4. # @provide-api yes (https://developers.soundcloud.com/)
  5. #
  6. # @using-api yes
  7. # @results JSON
  8. # @stable yes
  9. # @parse url, title, content
  10. from json import loads
  11. from urllib import urlencode
  12. # engine dependent config
  13. categories = ['music']
  14. paging = True
  15. # api-key
  16. guest_client_id = 'b45b1aa10f1ac2941910a7f0d10f8e28'
  17. # search-url
  18. url = 'https://api.soundcloud.com/'
  19. search_url = url + 'search?{query}'\
  20. '&facet=model'\
  21. '&limit=20'\
  22. '&offset={offset}'\
  23. '&linked_partitioning=1'\
  24. '&client_id={client_id}' # noqa
  25. # do search-request
  26. def request(query, params):
  27. offset = (params['pageno'] - 1) * 20
  28. params['url'] = search_url.format(query=urlencode({'q': query}),
  29. offset=offset,
  30. client_id=guest_client_id)
  31. return params
  32. # get response from search-request
  33. def response(resp):
  34. results = []
  35. search_res = loads(resp.text)
  36. # parse results
  37. for result in search_res.get('collection', []):
  38. if result['kind'] in ('track', 'playlist'):
  39. title = result['title']
  40. content = result['description']
  41. # append result
  42. results.append({'url': result['permalink_url'],
  43. 'title': title,
  44. 'content': content})
  45. # return results
  46. return results