mixcloud.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. # lint: pylint
  3. """Mixcloud (Music)
  4. """
  5. from urllib.parse import urlencode
  6. from dateutil import parser
  7. # about
  8. about = {
  9. "website": 'https://www.mixcloud.com/',
  10. "wikidata_id": 'Q6883832',
  11. "official_api_documentation": 'http://www.mixcloud.com/developers/',
  12. "use_official_api": True,
  13. "require_api_key": False,
  14. "results": 'JSON',
  15. }
  16. # engine dependent config
  17. categories = ['music']
  18. paging = True
  19. # search-url
  20. url = 'https://api.mixcloud.com/'
  21. search_url = url + 'search/?{query}&type=cloudcast&limit=10&offset={offset}'
  22. iframe_src = "https://www.mixcloud.com/widget/iframe/?feed={url}"
  23. def request(query, params):
  24. offset = (params['pageno'] - 1) * 10
  25. params['url'] = search_url.format(query=urlencode({'q': query}), offset=offset)
  26. return params
  27. def response(resp):
  28. results = []
  29. search_res = resp.json()
  30. for result in search_res.get('data', []):
  31. r_url = result['url']
  32. publishedDate = parser.parse(result['created_time'])
  33. res = {
  34. 'url': r_url,
  35. 'title': result['name'],
  36. 'iframe_src': iframe_src.format(url=r_url),
  37. 'img_src': result['pictures']['medium'],
  38. 'publishedDate': publishedDate,
  39. 'content': result['user']['name'],
  40. }
  41. results.append(res)
  42. return results