Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork110
A Python interface to Last.fm and Libre.fm
License
Apache-2.0, Apache-2.0 licenses found
Licenses found
pylast/pylast
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A Python interface toLast.fm and other API-compatible websitessuch asLibre.fm.
Use the pydoc utility for help on usage or seetests/ for examples.
Install via pip:
python3 -m pip install pylast
Install latest development version:
python3 -m pip install -U git+https://github.com/pylast/pylast
Or from requirements.txt:
-e https://github.com/pylast/pylast.git#egg=pylast
Note:
- pyLast 5.4+ supports Python 3.9-3.14.
- pyLast 5.3 supports Python 3.8-3.13.
- pyLast 5.2 supports Python 3.8-3.12.
- pyLast 5.1 supports Python 3.7-3.11.
- pyLast 5.0 supports Python 3.7-3.10.
- pyLast 4.3 - 4.5 supports Python 3.6-3.10.
- pyLast 4.0 - 4.2 supports Python 3.6-3.9.
- pyLast 3.2 - 3.3 supports Python 3.5-3.8.
- pyLast 3.0 - 3.1 supports Python 3.5-3.7.
- pyLast 2.2 - 2.4 supports Python 2.7.10+, 3.4-3.7.
- pyLast 2.0 - 2.1 supports Python 2.7.10+, 3.4-3.6.
- pyLast 1.7 - 1.9 supports Python 2.7, 3.3-3.6.
- pyLast 1.0 - 1.6 supports Python 2.7, 3.3-3.4.
- pyLast 0.5 supports Python 2, 3.
- pyLast < 0.5 supports Python 2.
- Simple public interface.
- Access to all the data exposed by the Last.fm web services.
- Scrobbling support.
- Full object-oriented design.
- Proxy support.
- Internal caching support for some web services calls (disabled by default).
- Support for other API-compatible networks like Libre.fm.
Here's some simple code example to get you started. In order to create any object frompyLast, you need aNetwork
object which represents a social music network that isLast.fm or any other API-compatible one. You can obtain a pre-configured one for Last.fmand use it as follows:
importpylast# You have to have your own unique two values for API_KEY and API_SECRET# Obtain yours from https://www.last.fm/api/account/create for Last.fmAPI_KEY="b25b959554ed76058ac220b7b2e0a026"# this is a sample keyAPI_SECRET="425b55975eed76058ac220b7b4e8a054"# In order to perform a write operation you need to authenticate yourselfusername="your_user_name"password_hash=pylast.md5("your_password")network=pylast.LastFMNetwork(api_key=API_KEY,api_secret=API_SECRET,username=username,password_hash=password_hash,)
Alternatively, instead of creatingnetwork
with a username and password, you canauthenticate with a session key:
importpylastSESSION_KEY_FILE=os.path.join(os.path.expanduser("~"),".session_key")network=pylast.LastFMNetwork(API_KEY,API_SECRET)ifnotos.path.exists(SESSION_KEY_FILE):skg=pylast.SessionKeyGenerator(network)url=skg.get_web_auth_url()print(f"Please authorize this script to access your account:{url}\n")importtimeimportwebbrowserwebbrowser.open(url)whileTrue:try:session_key=skg.get_web_auth_session_key(url)withopen(SESSION_KEY_FILE,"w")asf:f.write(session_key)breakexceptpylast.WSError:time.sleep(1)else:session_key=open(SESSION_KEY_FILE).read()network.session_key=session_key
And away we go:
# Now you can use that object everywheretrack=network.get_track("Iron Maiden","The Nomad")track.love()track.add_tags(("awesome","favorite"))# Type help(pylast.LastFMNetwork) or help(pylast) in a Python interpreter# to get more help about anything and see examples of how it works
More examples inhugovk/lastfm-tools andtests/.
Thetests/ directory containsintegration and unit tests with Last.fm, and plenty of code examples.
For integration tests you need a test account at Last.fm that will become cluttered withtest data, and an API key and secret. Either copyexample_test_pylast.yamlto test_pylast.yaml and fill out the credentials, or set them as environment variableslike:
export PYLAST_USERNAME=TODO_ENTER_YOURS_HEREexport PYLAST_PASSWORD_HASH=TODO_ENTER_YOURS_HEREexport PYLAST_API_KEY=TODO_ENTER_YOURS_HEREexport PYLAST_API_SECRET=TODO_ENTER_YOURS_HERE
To run all unit and integration tests:
python3 -m pip install -e".[tests]"pytest
Or run just one test case:
pytest -k test_scrobble
To run with coverage:
pytest -v --cov pylast --cov-report term-missingcoverage report# for command-line reportcoverage html# for HTML reportopen htmlcov/index.html
To enable from your own code:
importloggingimportpylastlogging.basicConfig(level=logging.INFO)network=pylast.LastFMNetwork(...)
To enable from pytest:
pytest --log-cli-level info -k test_album_search_images
To also see data returned from the API, uselevel=logging.DEBUG
or--log-cli-level debug
instead.
About
A Python interface to Last.fm and Libre.fm
Topics
Resources
License
Apache-2.0, Apache-2.0 licenses found
Licenses found
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.