structure.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. 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. items.append(Item(self.site,
  63. self.site.format_title(title),
  64. url,
  65. self.site.format_duration(duration),
  66. self.site.format_size(size),
  67. self.site.format_artist(title)))
  68. return items