structure.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. from pyquery import PyQuery
  2. from sites.helper.item import Item, Empty
  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. self.item_cover_path = None
  14. self.item_album_path = None
  15. self.item_genre_path = None
  16. self.item_label_path = None
  17. def set_container_path(self, path):
  18. self.container_path = path
  19. return self
  20. def set_item_path(self, path):
  21. self.item_path = path
  22. return self
  23. def set_url_path(self, path):
  24. self.item_url_path = path
  25. return self
  26. def set_title_path(self, path):
  27. self.item_title_path = path
  28. return self
  29. def set_artist_path(self, path):
  30. self.item_artist_path = path
  31. return self
  32. def set_duration_path(self, path):
  33. self.item_duration_path = path
  34. return self
  35. def set_size_path(self, path):
  36. self.item_size_path = path,
  37. return self
  38. def set_cover_path(self, path):
  39. self.item_cover_path = path
  40. return self
  41. def set_album_path(self, path):
  42. self.item_album_path = path
  43. return self
  44. def set_genre_path(self, path):
  45. self.item_genre_path = path
  46. return self
  47. def set_label_path(self, path):
  48. self.item_label_path = path
  49. return self
  50. def parse(self, html):
  51. pq = PyQuery(html)
  52. pq.make_links_absolute(base_url=self.site.url)
  53. results = pq(self.container_path).find(self.item_path)
  54. items = []
  55. for result in results:
  56. result = pq(result)
  57. title = result.find(self.item_title_path) if self.item_title_path is not None else None
  58. url = result.find(self.item_url_path) if self.item_url_path is not None else None
  59. duration = result.find(self.item_duration_path) if self.item_duration_path is not None else None
  60. size = result.find(self.item_size_path) if self.item_size_path is not None else None
  61. if title is not None and url is not None:
  62. item = Item(self.site)
  63. item.set_title(self.site.format_title(title))
  64. item.set_artist(self.site.format_artist(title))
  65. item.set_original_url(url)
  66. item.set_duration_string(self.site.format_duration(duration))
  67. item.set_size_string(self.site.format_size(size))
  68. items.append(item)
  69. return items