|
@@ -1,23 +1,43 @@
|
|
|
-from sites.default import DefaultSite
|
|
|
|
|
|
|
+from sites.tags.default import DefaultTagSite
|
|
|
from sites.helper.query import Query
|
|
from sites.helper.query import Query
|
|
|
|
|
+from pyquery import PyQuery
|
|
|
|
|
|
|
|
|
|
|
|
|
-class Beatport(DefaultSite):
|
|
|
|
|
|
|
+class Beatport(DefaultTagSite):
|
|
|
def __init__(self):
|
|
def __init__(self):
|
|
|
super().__init__()
|
|
super().__init__()
|
|
|
- self.url = 'https://beatport.cpm'
|
|
|
|
|
- self.query = Query(self, 'GET', 'search')\
|
|
|
|
|
- .add_parameter('q', '{0}')
|
|
|
|
|
|
|
+ self.url = 'https://beatport.com'
|
|
|
|
|
+ self.query = Query(self, 'GET', 'search', '+')\
|
|
|
|
|
+ .add_parameter('q', '{0}')\
|
|
|
|
|
+ .add_parameter('_pjax', '#pjax-inner-wrapper')
|
|
|
self.structure\
|
|
self.structure\
|
|
|
.set_container_path('div.bucket.tracks')\
|
|
.set_container_path('div.bucket.tracks')\
|
|
|
- .set_item_path('li.bucket-item')
|
|
|
|
|
|
|
+ .set_item_path('li.bucket-item')\
|
|
|
|
|
+ .set_title_path('p.buk-track-title')\
|
|
|
|
|
+ .set_artist_path('p.buk-track-artists')\
|
|
|
|
|
+ .set_album_path('span.buk-track-primary-title')\
|
|
|
|
|
+ .set_genre_path('p.buk-track-genre')\
|
|
|
|
|
+ .set_label_path('p.buk-track-labels')\
|
|
|
|
|
+ .set_cover_path('img.buk-track-artwork')
|
|
|
self.request\
|
|
self.request\
|
|
|
.add_header('Referer', self.url + '/')\
|
|
.add_header('Referer', self.url + '/')\
|
|
|
.add_header('Origin', self.url)\
|
|
.add_header('Origin', self.url)\
|
|
|
- .add_header('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8')\
|
|
|
|
|
.add_header('X-PJAX', 'true')\
|
|
.add_header('X-PJAX', 'true')\
|
|
|
.add_header('X-PJAX-Container', '#pjax-inner-wrapper')\
|
|
.add_header('X-PJAX-Container', '#pjax-inner-wrapper')\
|
|
|
.add_header('X-Requested-With', 'XMLHttpRequest')
|
|
.add_header('X-Requested-With', 'XMLHttpRequest')
|
|
|
|
|
|
|
|
- def find_tags(self, keyword):
|
|
|
|
|
- self.request.search(keyword)
|
|
|
|
|
|
|
+ def format_title(self, html):
|
|
|
|
|
+ pq = PyQuery(html)
|
|
|
|
|
+
|
|
|
|
|
+ title = pq.find('span.buk-track-primary-title').text()
|
|
|
|
|
+
|
|
|
|
|
+ remix = pq.find('span.buk-track-remixed')
|
|
|
|
|
+
|
|
|
|
|
+ if remix is not None:
|
|
|
|
|
+ title = '{title} ({remix})'.format(title=title, remix=remix.text())
|
|
|
|
|
+
|
|
|
|
|
+ return title
|
|
|
|
|
+
|
|
|
|
|
+ def format_cover_url(self, html):
|
|
|
|
|
+ url = html.attr['data-src']
|
|
|
|
|
+ return url.replace('95x95', '250x250')
|