use black library for code

This commit is contained in:
Alexander Popov 2020-10-05 02:32:15 +03:00
parent b63e1f1536
commit f6f3a653df
4 changed files with 94 additions and 80 deletions

View File

@ -5,118 +5,124 @@ import csv
import os.path import os.path
import requests import requests
__author__ = 'Alexander Popov' __author__ = "Alexander Popov"
__version__ = '2.1.0' __version__ = "2.1.0"
__license__ = 'Unlicense' __license__ = "Unlicense"
def get_pages(username, api_key, limit=200): def get_pages(username, api_key, limit=200):
""" Getting the number of pages with scrobbling data """ """ Getting the number of pages with scrobbling data """
response = requests.get( response = requests.get(
'https://ws.audioscrobbler.com/2.0/' "https://ws.audioscrobbler.com/2.0/"
'?method=user.getrecenttracks&user=' "?method=user.getrecenttracks&user="
'{0}&api_key={1}&format=json&limit={2}' "{0}&api_key={1}&format=json&limit={2}".format(username, api_key, limit)
.format(username, api_key, limit)) )
data = json.loads(response.content.decode("utf8")) data = json.loads(response.content.decode("utf8"))
return(int(data['recenttracks']['@attr']['totalPages'])) return int(data["recenttracks"]["@attr"]["totalPages"])
def get_page(username, api_key, page, limit=200): def get_page(username, api_key, page, limit=200):
""" Getting scrobbling data from a page """ """ Getting scrobbling data from a page """
response = requests.get( response = requests.get(
'https://ws.audioscrobbler.com/2.0/' "https://ws.audioscrobbler.com/2.0/"
'?method=user.getrecenttracks&user={0}&api_key={1}&format=json' "?method=user.getrecenttracks&user={0}&api_key={1}&format=json"
'&limit={2}&page={3}'.format(username, api_key, limit, page)) "&limit={2}&page={3}".format(username, api_key, limit, page)
)
data = json.loads(response.content.decode("utf8")) data = json.loads(response.content.decode("utf8"))
return(data['recenttracks']['track']) return data["recenttracks"]["track"]
def get_now_scrobbling(username, api_key): def get_now_scrobbling(username, api_key):
""" Getting now scrobbling track """ """ Getting now scrobbling track """
response = requests.get( response = requests.get(
'https://ws.audioscrobbler.com/2.0/' "https://ws.audioscrobbler.com/2.0/"
'?method=user.getrecenttracks&user={0}' "?method=user.getrecenttracks&user={0}"
'&api_key={1}&format=json&limit=1' "&api_key={1}&format=json&limit=1".format(username, api_key)
.format(username, api_key)) )
data = json.loads(response.content.decode('utf-8')) data = json.loads(response.content.decode("utf-8"))
if '@attr' in data['recenttracks']['track'][0]: if "@attr" in data["recenttracks"]["track"][0]:
return(True) return True
else: else:
return(False) return False
def scrobbling_export(tracks, username, export_format='dump'): def scrobbling_export(tracks, username, export_format="dump"):
""" Save scrobbled track via various format """ """ Save scrobbled track via various format """
if export_format == 'dump': if export_format == "dump":
with open('%s.json' % (username), 'w', encoding='utf-8') as f: with open("%s.json" % (username), "w", encoding="utf-8") as f:
data = json.dumps(tracks, indent=4, data = json.dumps(tracks, indent=4, sort_keys=True, ensure_ascii=False)
sort_keys=True, ensure_ascii=False)
f.write(data) f.write(data)
elif export_format == 'simple': elif export_format == "simple":
_ = [] _ = []
for track in tracks: for track in tracks:
_.append({ _.append(
'artist': track['artist']['#text'], {
'name': track['name'], "artist": track["artist"]["#text"],
'album': track['album']['#text'], "name": track["name"],
'date': int(track['date']['uts']) "album": track["album"]["#text"],
}) "date": int(track["date"]["uts"]),
}
)
with open('%s.json' % (username), 'w', encoding='utf-8') as f: with open("%s.json" % (username), "w", encoding="utf-8") as f:
data = json.dumps(_, indent=4, sort_keys=True, ensure_ascii=False) data = json.dumps(_, indent=4, sort_keys=True, ensure_ascii=False)
f.write(data) f.write(data)
elif export_format == 'csv': elif export_format == "csv":
_ = [] _ = []
for track in tracks: for track in tracks:
_.append([ _.append(
track['artist']['#text'], [
track['name'], track["artist"]["#text"],
track['album']['#text'], track["name"],
int(track['date']['uts']) track["album"]["#text"],
]) int(track["date"]["uts"]),
]
)
with open('%s.csv' % (username), 'w', encoding='utf-8', with open("%s.csv" % (username), "w", encoding="utf-8", newline="") as f:
newline='') as f: data = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC, delimiter=",")
data = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC, delimiter=',') data.writerow(["artist", "track", "album", "date"])
data.writerow(['artist', 'track', 'album', 'date'])
data.writerows(_) data.writerows(_)
return(1) return 1
if __name__ == '__main__': if __name__ == "__main__":
_ = dict() _ = dict()
if os.path.exists('./config.json'): if os.path.exists("./config.json"):
with open('./config.json') as f: with open("./config.json") as f:
_ = json.loads(f.read()) _ = json.loads(f.read())
else: else:
_['api_key'] = input('API Key: ') _["api_key"] = input("API Key: ")
_['username'] = input('Username: ') _["username"] = input("Username: ")
api_key, username = _['api_key'], _['username'] api_key, username = _["api_key"], _["username"]
total_pages = get_pages(username, api_key) total_pages = get_pages(username, api_key)
current_page = 1 current_page = 1
scrobbled = [] scrobbled = []
while current_page <= total_pages: while current_page <= total_pages:
print('\r{0:.2f}% [{1} of {2}]' print(
.format((current_page * 100 / total_pages), "\r{0:.2f}% [{1} of {2}]".format(
current_page, total_pages), end='') (current_page * 100 / total_pages), current_page, total_pages
),
end="",
)
response = get_page(username, api_key, current_page) response = get_page(username, api_key, current_page)
@ -128,6 +134,5 @@ if __name__ == '__main__':
# if get_now_scrobbling(username, api_key): # if get_now_scrobbling(username, api_key):
# scrobbled.pop(0) # scrobbled.pop(0)
if scrobbling_export(scrobbled, username, _['export_format']): if scrobbling_export(scrobbled, username, _["export_format"]):
print('\n{0} tracks saved!'.format( print("\n{0} tracks saved!".format(len(scrobbled), username))
len(scrobbled), username))

1
requirements.txt Normal file
View File

@ -0,0 +1 @@
requests==2.24.0

View File

@ -2,18 +2,24 @@
import lastfm_backup as lfm import lastfm_backup as lfm
API_KEY = '0' API_KEY = "0"
USERNAME = 'admin' USERNAME = "admin"
if __name__ == '__main__': if __name__ == "__main__":
pages = lfm.get_pages(USERNAME, API_KEY) pages = lfm.get_pages(USERNAME, API_KEY)
count = 0 count = 0
for page in range(1, pages + 1): for page in range(1, pages + 1):
tracks = lfm.get_scrobbles(USERNAME, API_KEY, page) tracks = lfm.get_scrobbles(USERNAME, API_KEY, page)
for track in tracks: for track in tracks:
print('%s - %s' % (track['artist']['#text'], track['name'],)) print(
count = count + 1 "%s - %s"
% (
track["artist"]["#text"],
track["name"],
)
)
count = count + 1
print('\nTotal scrobbling tracks: %d' % count) print("\nTotal scrobbling tracks: %d" % count)

View File

@ -3,19 +3,21 @@ import setuptools
import lastfm_backup import lastfm_backup
setuptools.setup( setuptools.setup(
name='lastfm-backup', name="lastfm-backup",
version=lastfm_backup.__version__, version=lastfm_backup.__version__,
description='Last.fm scrobbling backup', description="Last.fm scrobbling backup",
author=lastfm_backup.__author__, author=lastfm_backup.__author__,
author_email='iiiypuk@fastmail.fm', author_email="iiiypuk@fastmail.fm",
url='https://github.com/iiiypuk/lastfm-backup', url="https://github.com/iiiypuk/lastfm-backup",
py_modules=['lastfm_backup'], py_modules=["lastfm_backup"],
scripts=['lastfm_backup.py'], scripts=["lastfm_backup.py"],
license=lastfm_backup.__license__, license=lastfm_backup.__license__,
platforms='any', platforms="any",
keywords=['last.fm', 'lastfm', 'backup'], keywords=["last.fm", "lastfm", "backup"],
classifiers=['License :: Public Domain', classifiers=[
'Programming Language :: Python :: 3', "License :: Public Domain",
'Operating System :: OS Independent'], "Programming Language :: Python :: 3",
python_requires='>=3.2' "Operating System :: OS Independent",
],
python_requires=">=3.2",
) )