from pyquery import PyQuery from sites.helper.item import Item, Empty class Structure: def __init__(self, site): self.site = site self.container_path = None self.item_path = None self.item_url_path = None self.item_title_path = None self.item_duration_path = None self.item_size_path = None self.item_artist_path = None self.item_cover_path = None self.item_album_path = None self.item_genre_path = None self.item_label_path = None def set_container_path(self, path): self.container_path = path return self def set_item_path(self, path): self.item_path = path return self def set_url_path(self, path): self.item_url_path = path return self def set_title_path(self, path): self.item_title_path = path return self def set_artist_path(self, path): self.item_artist_path = path return self def set_duration_path(self, path): self.item_duration_path = path return self def set_size_path(self, path): self.item_size_path = path, return self def set_cover_path(self, path): self.item_cover_path = path return self def set_album_path(self, path): self.item_album_path = path return self def set_genre_path(self, path): self.item_genre_path = path return self def set_label_path(self, path): self.item_label_path = path return self def parse(self, html): pq = PyQuery(html) pq.make_links_absolute(base_url=self.site.url) results = pq(self.container_path).find(self.item_path) items = [] for result in results: result = pq(result) title = result.find(self.item_title_path) if self.item_title_path is not None else None url = result.find(self.item_url_path) if self.item_url_path is not None else None duration = result.find(self.item_duration_path) if self.item_duration_path is not None else None size = result.find(self.item_size_path) if self.item_size_path is not None else None if title is not None and url is not None: item = Item(self.site) item.set_title(self.site.format_title(title)) item.set_artist(self.site.format_artist(title)) item.set_original_url(url) item.set_duration_string(self.site.format_duration(duration)) item.set_size_string(self.site.format_size(size)) items.append(item) return items