mixcloud.py 1.3 KB

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