diff --git a/setup.py b/setup.py index e756949cf704be6a4cc4c6a87d7b48c6e7ea9e04..09bdd300ce4ea94eb14b4905216ff2acf74b853e 100644 --- a/setup.py +++ b/setup.py @@ -18,6 +18,7 @@ setup( install_requires=[ 'awesome-slugify==1.6.5', 'lxml==3.7.0', + 'phpserialize==1.3', ], entry_points=''' [console_scripts] diff --git a/wooify/__main__.py b/wooify/__main__.py index 0df55be5d9712fdf13d33c53a504f47be37c7020..c19ecead3ed5b290d7328595c52b1b9dbda644b4 100644 --- a/wooify/__main__.py +++ b/wooify/__main__.py @@ -8,7 +8,7 @@ Usage: {0} adapter input_file adapter: an import adapter input_file: the source file you want to convert -Available import adapters: ecwid +Available import adapters: ecwid, dpsounds Output will be written to: diff --git a/wooify/adapters/dpsounds.py b/wooify/adapters/dpsounds.py index 62cab61a91873f598f7fe71371dbe50ddb9a2cb0..463a69815620539fcef94b930ac1eae2fc829562 100644 --- a/wooify/adapters/dpsounds.py +++ b/wooify/adapters/dpsounds.py @@ -1,13 +1,21 @@ import csv import json import hashlib +import phpserialize from .adapter import Adapter as BaseAdapter from ..constants import (ALLOWED_HTML_TAGS, HTML_FIELDS, WOO_IMP_EXP_PRODUCT_FIELDS) -DP_TRACK_URL_BASE = 'https://ant.sr/dpsounds-audio' +DP_TRACK_URL_BASE = 'https://dpsounds.com/wp-content/uploads/tracks' +DP_SAMPLE_URL_BASE = 'https://dpsounds.com/wp-content/uploads/samples' DP_TRACK_CATEGORIES = json.dumps([{'name': 'Music', 'slug': 'music'}]) -DP_TRACK_ATTRIBUTES = ['Time', 'Origin'] +DP_TRACK_ATTRIBUTES = ['Duration', 'Time', 'Origin', 'Tags'] +WP_ATTRS = { + 'Duration': 'pa_duration', + 'Time': 'pa_time', + 'Origin': 'pa_origin', + 'Tags': 'pa_tags', + } DP_TRACK_PRICE = 1 @@ -17,7 +25,7 @@ class DpsoundsAdapter(BaseAdapter): Headers: "Source Part","Source Track","Track", "Title","Time","Origin","Tags", - "Alternative Takes","Compilation". + "Alternative Takes","Compilation","Duration". """ def parse(self, filename): @@ -28,38 +36,64 @@ class DpsoundsAdapter(BaseAdapter): name = "Track {}".format(r['Track']) if r['Title']: name += " - {}".format(r['Title']) - tags = ','.join([t.strip() for t in r['Tags'].split(',')]) + r['Tags'] = ','.join([t.strip() for t in r['Tags'].split(',')]) file_url = "{url_base}/{part}-{track:02d}.mp3".format( url_base=DP_TRACK_URL_BASE, part=r['Source Part'], track=int(r['Source Track'])) filehash = hashlib.md5(file_url.encode('utf-8')).hexdigest() - files = json.dumps({ - filehash: {'name': name, 'file': file_url}}) + files = {filehash: {'name': name, 'file': file_url}} # TODO: alternative takes # TODO: compilation (album) - # TODO: Description text to include attributes. attributes = [{ - 'name': attr, + 'name': WP_ATTRS[attr], 'value': r[attr], - 'position': idx, - 'is_visible': '1', - 'is_variation': '0', - 'is_taxonomy': '0' + 'position': str(idx), + 'is_visible': 1, + 'is_variation': 0, + 'is_taxonomy': 1, } for idx, attr in enumerate(DP_TRACK_ATTRIBUTES)] + sample = [{ + 'name': name, + 'path': "{url_base}/sample-{part}-{track:02d}.mp3".format( + url_base=DP_SAMPLE_URL_BASE, + part=r['Source Part'], + track=int(r['Source Track'])) + }] + custom_fields = { + '_jplayer_sample_file': [ + phpserialize.dumps(sample)], + '_downloadable': ['yes'], + '_downloadable_files': [ + phpserialize.dumps(files)], + '_product_attributes': [ + phpserialize.dumps({ + a['name']: a for a in attributes})], + } product = dict(WOO_IMP_EXP_PRODUCT_FIELDS) + wtf_attributes = [ + {k: str(a[k]).replace('"', '``').replace(',', '~||~') + for k in a} + for a in attributes] + wtf_attributes = ( + json.dumps(wtf_attributes) + .replace(',', '||') + .replace('~||~', ',')) product.update({ "Product Name": name, - "Tags": tags, + "Tags": r['Tags'], "Categories": DP_TRACK_CATEGORIES, "Downloadable": 'yes', "Virtual": 'yes', "Sold Individually": 'yes', - "Downloadable Files": files, + "Downloadable Files": (phpserialize.dumps(files) + .decode('utf-8')), "Download Type": "music", "Price": DP_TRACK_PRICE, "Regular Price": DP_TRACK_PRICE, - "Attributes": json.dumps(attributes) + "Attributes": wtf_attributes, + "Custom Fields": (phpserialize.dumps(custom_fields) + .decode('utf-8')), }) return product