structure.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from pyquery import PyQuery
  2. from sites.helper.item import Item
  3. class Structure:
  4. def __init__(self, site):
  5. self.site = site
  6. self.container_path = None
  7. self.item_path = None
  8. self.item_url_path = None
  9. self.item_title_path = None
  10. self.item_duration_path = None
  11. self.item_size_path = None
  12. self.item_artist_path = None
  13. def set_container_path(self, path):
  14. self.container_path = path
  15. return self
  16. def set_item_path(self, path):
  17. self.item_path = path
  18. return self
  19. def set_url_path(self, path):
  20. self.item_url_path = path
  21. return self
  22. def set_title_path(self, path):
  23. self.item_title_path = path
  24. return self
  25. def set_artist_path(self, path):
  26. self.item_artist_path = path
  27. return self
  28. def set_duration_path(self, path):
  29. self.item_duration_path = path
  30. return self
  31. def set_size_path(self, path):
  32. self.item_size_path = path,
  33. return self
  34. def parse(self, html):
  35. pq = PyQuery(html)
  36. pq.make_links_absolute(base_url=self.site.url)
  37. results = pq(self.container_path).find(self.item_path)
  38. items = []
  39. for result in results:
  40. result = pq(result)
  41. title = result.find(self.item_title_path) if self.item_title_path is not None else None
  42. url = result.find(self.item_url_path) if self.item_url_path is not None else None
  43. duration = result.find(self.item_duration_path) if self.item_duration_path is not None else None
  44. size = result.find(self.item_size_path) if self.item_size_path is not None else None
  45. if title is not None and url is not None:
  46. items.append(Item(self.site,
  47. self.site.format_title(title),
  48. url,
  49. self.site.format_duration(duration),
  50. self.site.format_size(size),
  51. self.site.format_artist(title)))
  52. return items