piped.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. # lint: pylint
  3. """Piped (Videos)
  4. """
  5. import time
  6. import random
  7. from urllib.parse import urlencode
  8. from dateutil import parser
  9. # about
  10. about = {
  11. "website": 'https://github.com/TeamPiped/Piped/',
  12. "wikidata_id": 'Q107565255',
  13. "official_api_documentation": 'https://docs.piped.video/docs/api-documentation/',
  14. "use_official_api": True,
  15. "require_api_key": False,
  16. "results": 'JSON',
  17. }
  18. # engine dependent config
  19. categories = ["videos", "music"]
  20. paging = False
  21. # search-url
  22. backend_url = "https://pipedapi.kavin.rocks"
  23. frontend_url = "https://piped.video"
  24. # do search-request
  25. def request(query, params):
  26. if isinstance(backend_url, list):
  27. base_url = random.choice(backend_url)
  28. else:
  29. base_url = backend_url
  30. search_url = base_url + "/search?{query}&filter=videos"
  31. params["url"] = search_url.format(query=urlencode({'q': query}))
  32. return params
  33. # get response from search-request
  34. def response(resp):
  35. results = []
  36. search_results = resp.json()["items"]
  37. for result in search_results:
  38. publishedDate = parser.parse(time.ctime(result.get("uploaded", 0) / 1000))
  39. results.append(
  40. {
  41. # the api url differs from the frontend, hence use piped.video as default
  42. "url": frontend_url + result.get("url", ""),
  43. "title": result.get("title", ""),
  44. "content": result.get("shortDescription", ""),
  45. "template": "videos.html",
  46. "publishedDate": publishedDate,
  47. "iframe_src": frontend_url + '/embed' + result.get("url", ""),
  48. "thumbnail": result.get("thumbnail", ""),
  49. }
  50. )
  51. return results