Forráskód Böngészése

Initial framework

debenoldert 6 éve
szülő
commit
c92e3fb5c4

+ 4 - 0
sites/helper/download.py

@@ -1,4 +1,5 @@
 import console
+import sites.helper.tagging as tagging
 from .request import RawRequest
 from pyquery import PyQuery
 from settings import Settings
@@ -60,6 +61,9 @@ def savefileprogress(name, full_name, file, size):
             f.write(file.content)
 
         bar.destroy()
+
+        tagging.search_tags_file(f)
+
     console.output('Download of {0} completed!'.format(name))
 
 

+ 5 - 0
sites/helper/item.py

@@ -11,6 +11,8 @@ class Item:
         self.size = size
         self.artist = artist
 
+        self.tag_item = None
+
         self.url_formatted = False
 
     def format_original_url(self):
@@ -22,3 +24,6 @@ class Item:
     def set_download_url(self, url):
         console.output('Setting download url to: {0}'.format(url), console.DBG_INFO)
         self.download_url = url
+
+    def link_tag_item(self, tagitem):
+        self.tag_item = tagitem

+ 5 - 2
sites/helper/request.py

@@ -18,7 +18,7 @@ class Request:
         self.cookie[key] = value
         return self
 
-    def search(self, keywords):
+    def search(self, keywords, tag=False):
 
         query = self.site.query.format_query(urllib.parse.quote(keywords))
 
@@ -46,7 +46,10 @@ class Request:
 
         console.output('Request response: {0} {1}'.format(request.status_code, request.reason), level=console.DBG_INFO)
 
-        return self.site.structure.parse(request.text)
+        if tag:
+            pass
+        else:
+            return self.site.structure.parse(request.text)
 
     def parse_url(self, url):
         o = urllib.parse.urlparse(url)

+ 20 - 0
sites/helper/structure.py

@@ -13,6 +13,10 @@ class Structure:
         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
@@ -42,6 +46,22 @@ class Structure:
         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)
 

+ 9 - 0
sites/helper/tagging.py

@@ -0,0 +1,9 @@
+import console
+from mutagen.id3 import ID3
+
+
+def search_tags_file(file):
+    mp3 = ID3(file.name)
+    AmazonSource().generate(mp3)
+    print(mp3.values())
+    return False

+ 23 - 0
sites/tags/beatport.py

@@ -0,0 +1,23 @@
+from sites.default import DefaultSite
+from sites.helper.query import Query
+
+
+class Beatport(DefaultSite):
+    def __init__(self):
+        super().__init__()
+        self.url = 'https://beatport.cpm'
+        self.query = Query(self, 'GET', 'search')\
+            .add_parameter('q', '{0}')
+        self.structure\
+            .set_container_path('div.bucket.tracks')\
+            .set_item_path('li.bucket-item')
+        self.request\
+            .add_header('Referer', 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-Container', '#pjax-inner-wrapper')\
+            .add_header('X-Requested-With', 'XMLHttpRequest')
+
+    def find_tags(self, keyword):
+        self.request.search(keyword)

+ 5 - 0
sites/tags/default.py

@@ -0,0 +1,5 @@
+from sites.default import DefaultSite
+
+class DefaultTagSite(DefaultSite):
+    def __init__(self):
+        pass

+ 34 - 0
sites/tags/structure.py

@@ -0,0 +1,34 @@
+from sites.helper.structure import Structure
+from pyquery import PyQuery
+
+from sites.tags.tagitem import TagItem
+
+
+class TagStructure(Structure):
+    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
+            artist = result.find(self.item_artist_path) if self.item_title_path is not None else None
+            album = result.find(self.item_album_path) if self.item_title_path is not None else None
+            cover = result.find(self.item_cover_path) if self.item_url_path is not None else None
+            genre = result.find(self.item_genre_path) if self.item_duration_path is not None else None
+            label = result.find(self.item_label_path) if self.item_size_path is not None else None
+
+            if title is not None and artist is not None:
+                item = TagItem(self.title)
+
+
+        return items
+
+
+    def download_image(self):
+        pass

+ 30 - 0
sites/tags/tagitem.py

@@ -0,0 +1,30 @@
+class TagItem:
+    def __init__(self, title):
+        self.title = title,
+        self.artist = None
+        self.album = None
+        self.genre = None
+        self.label = None
+        self.cover_url = None
+        self.cover_image = None
+
+    def set_title(self, title):
+        self.title = title
+
+    def set_album(self, album):
+        self.album = album
+
+    def set_artist(self, artist):
+        self.artist = artist
+
+    def set_genre(self, genre):
+        self.genre = genre
+
+    def set_label(self, label):
+        self.label = label
+
+    def set_cover_url(self, url):
+        self.cover_url = url
+
+    def set_cover_image(self, image):
+        self.cover_image = image