diff --git a/README.md b/README.md index 897ad7c..e211919 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,22 @@ -![Version](https://img.shields.io/pypi/v/lastfm_backup.svg?style=flat-square) -![License](https://img.shields.io/pypi/l/lastfm_backup.svg.svg?style=flat-square) -![PyVersion](https://img.shields.io/pypi/pyversions/lastfm_backup.svg.svg?style=flat-square) +![Version](https://img.shields.io/pypi/v/lastfm-backup.svg?style=flat-square) +![License](https://img.shields.io/pypi/l/lastfm-backup.svg.svg?style=flat-square) +![PyVersion](https://img.shields.io/pypi/pyversions/lastfm-backup.svg.svg?style=flat-square) -**How to use as standartalone app** -1. Rename `config.json.example` to `config.json` and edit. -2. Run this `python lastfm_backup.py` or `~/lastfm_backup.py`. -3. PROFIT!! +**How to use:** +-------------- +* [Get](http://www.last.fm/api/account/create) API Key. +* Stop scrobbling! +* Rename `config.json.example` to `config.json` and edit. +* Run script `lastfm_backup.py`. +* WAIT!! -**How to use as library** -see [getTracks.py](https://github.com/iiiypuk/lastfm-backup/blob/master/samples/getTracks.py). +My `>72,2k` tracks scrobbles sized `~9.9M`. +Tar.xz sized `5.4K`. -My `>57,5k` tracks scrobbles sized `~8.2Mb`. - -**TODO** -`-` web service -`-` more output types (sqlite, csv) -`-` confirugurabled output -`-` continue backup +**TODO:** +-------- +- [ ] web service +- [ ] more output types (sqlite, csv) +- [ ] confirugurabled output +- [ ] continue backup +- [ ] multithread diff --git a/lastfm_backup.py b/lastfm_backup.py old mode 100644 new mode 100755 index b9fc9e2..80fdf67 --- a/lastfm_backup.py +++ b/lastfm_backup.py @@ -2,53 +2,60 @@ import json import urllib.request +import os.path __author__ = 'Alexander Popov' -__version__ = '0.1.1' +__version__ = '1.0.0' __license__ = 'Unlicense' def get_pages(username, api_key): response = urllib.request.urlopen( 'http://ws.audioscrobbler.com/2.0/' - '?method=user.getrecenttracks&user=%s&api_key=%s&format=json' % - (username, api_key,)).read().decode("utf8") + '?method=user.getrecenttracks&user={0}&api_key={1}&format=json' + '&limit=200'.format(username, api_key)).read().decode("utf8") pages = int(json.loads(response)['recenttracks']['@attr']['totalPages']) return(pages) def get_scrobbles(username, api_key, page): - response = json.loads( - urllib.request.urlopen( - 'http://ws.audioscrobbler.com/2.0/' - '?method=user.getrecenttracks&user=%s' - '&api_key=%s&page=%d&format=json' % - (username, api_key, page,)) - .read().decode("utf8"))['recenttracks']['track'] + response = json.loads(urllib.request.urlopen( + 'http://ws.audioscrobbler.com/2.0/' + '?method=user.getrecenttracks&user={0}&api_key={1}&format=json' + '&limit=200'.format(username, api_key) + ).read().decode("utf8"))['recenttracks']['track'] return(response) if __name__ == '__main__': - with open('./config.json') as f: - CONFIG = json.loads(f.read()) + CFG = dict() - PAGES = get_pages(CONFIG['username'], CONFIG['api_key']) - COUNT = 1 - TRACKS = [] - while COUNT <= PAGES: - print('\r%d%%' % (COUNT * 100 / PAGES), end='') - response = get_scrobbles(CONFIG['username'], CONFIG['api_key'], COUNT) + if os.path.exists('./config.json'): + with open('./config.json') as f: + CFG = json.loads(f.read()) + else: + CFG['api_key'] = input('API Key: ') + CFG['username'] = input('Username: ') + + PAGES = get_pages(CFG['username'], CFG['api_key']) + curPage = 1 + tracks = [] + while curPage <= PAGES: + print('\r%d%%' % (curPage * 100 / PAGES), end='') + response = get_scrobbles(CFG['username'], CFG['api_key'], curPage) for track in response: - TRACKS.append({'artist': track['artist']['#text'], + tracks.append({'artist': track['artist']['#text'], 'name': track['name'], 'album': track['album']['#text'], 'date': track['date']['uts']}) - COUNT += 1 + curPage += 1 - with open('%s.json' % (CONFIG['username']), 'w+', encoding='utf-8') as f: + with open('%s.json' % (CFG['username']), 'w+', encoding='utf-8') as f: f.write( - json.dumps(TRACKS, indent=4, sort_keys=True, ensure_ascii=False)) - print('\r%d tracks saved in %s.json!' % (len(TRACKS), CONFIG['username'],)) + json.dumps(tracks, indent=4, sort_keys=True, ensure_ascii=False)) + + print('\r{0} tracks saved in {1}.json!'.format( + len(tracks), CFG['username'],)) diff --git a/setup.py b/setup.py index 6966d6b..8e5abee 100644 --- a/setup.py +++ b/setup.py @@ -3,24 +3,21 @@ from distutils.core import setup import lastfm_backup setup( - name='lastfm_backup', + name='lastfm-backup', version=lastfm_backup.__version__, - description='Last.fm backup scrobbles library' - ' and standartalone program.', + description='Last.fm scrobbles backup', author=lastfm_backup.__author__, author_email='iiiypuk@fastmail.fm', - url='https://github.com/iiiypuk/lastfm-import', + url='https://github.com/iiiypuk/lastfm-backup', py_modules=['lastfm_backup'], scripts=['lastfm_backup.py'], license=lastfm_backup.__license__, platforms='any', - keywords=['last.fm', 'lastfm', 'import'], + keywords=['last.fm', 'lastfm', 'backup'], classifiers=['License :: Public Domain', - 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.2', 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', - ], + 'Programming Language :: Python :: 3.5'], )