{ "info": { "author": "Derin Yarsuvat", "author_email": "derin@ml1.net", "bugtrack_url": null, "classifiers": [], "description": "YAMS\n====\n\n*Yet Another MPD Scrobbler (For Last.FM)*\n\nYAMS is exactly what its name says it is.\n\n#### Features\nYAMS is just a normal Last.FM scrobbler. But, if you *really* need to know, it can do the following:\n\n* Authentication with the new Last.FM [Scrobbling API v2.0](https://www.last.fm/api/scrobbling) - without need to input/store your username/password locally.\n* Update your profile's \"Now Playing\" track via Last.FM's \"Now Playing\" [API](https://www.last.fm/api/show/track.updateNowPlaying)\n* Saving failed scrobbles to a disk and uploading at a later date.\n* Timing configuration (e.g. scrobble percentage, real world timing values for scrobbling, etc.).\n* Preventing accidental duplicate scrobbles on rewind/playback restart/etc.\n* Automatic daemonization and config file generation.\n\n#### Requirements\n`PyYAML` and `python-mpd2` are required. YAMS is written for `python3` *only*.\n\n#### Installation\n##### Via Pip\nRun `pip3 install YAMScrobbler` (or maybe just `pip`, depending on your system)\n\n##### Via the AUR\nIf you're an Arch Linux user you may use the [python-yams](https://aur.archlinux.org/packages/python-yams/) package in the [AUR](https://aur.archlinux.org/) to install YAMS locally. Please see [here](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages) for instructions if you're new to AUR packages.\n\n##### From Source\nClone this repo and run `pip3 install -e ` (omit the `-e` flag if you don't want changes in the repo to be reflected in your local installation).\n\n#### Running\n\nThe script includes a `yams` script that will be installed by pip.\n\n`yams` runs as a daemon by default (`yams -N` will run it in the foreground).\n\n`yams -k` will kill the current running instance.\n\n`yams -a` will attach to the current running instance's log file, allowing you to watch the daemon's output.\n\n`yams -h` will print all the options (also available below).\n\n *NB: (If you can't access the `yams` script, maybe because pip's script install directory isn't in your `$PATH` or something, `python3 -m yams` will also do the trick.)*\n\n##### Via Systemd\n\nA Systemd user service unit file is included in the root of this repository (named `yams.service`). This can be used to automate starting/stopping YAMS on startup, for a specific user.\n\nTo install, copy it to `~/.config/systemd/user/` and run `systemctl --user enable --now yams` to enable/start it. Note that you should also [start mpd as a Systemd service](https://wiki.archlinux.org/index.php/Music_Player_Daemon#Autostart_with_systemd) to ensure YAMS actually loads up at the right time. You might also need to edit the path to the YAMS binary in the unit file if you installed the YAMS binary anywhere other than `/usr/bin/yams`\n\n#### Setup\n\nYAMS will use the usual `$MPD_HOST` and `$MPD_PORT` environment variables to connect to `mpd`, if they exist.\n\nRun `yams` and follow the printed instructions to authenticate with Last.FM\n\n##### Configuration Files\n\nIf it can't find a config file by default, YAMS will create a default config file, log, cache, and session file in `$HOME/.config/yams`, however it will also accept config files in `$HOME/.yams` or `./.yams` (theoretically configs in `$HOME` or the current working directory can be read in, as well).\n\nYAMS will only create its own directory/configuration file if none of the previous directories exist.\n\n#### Help\n\nHere's the output for `--help`:\n\n usage: YAMS [-h] [-m 127.0.0.1] [-p 6600] [-s ./.lastfm_session]\n [--api-key API_KEY] [--api-secret API_SECRET] [-t 50] [-r] [-d]\n [-g] [-l /path/to/log] [-c /path/to/cache] [-C ~/my_config] [-N]\n [-D] [-k] [--disable-log] [-a]\n\n Yet Another Mpd Scrobbler, v0.5. Configuration directories are either\n ~/.config/yams, ~/.yams, or your current working directory. Create one of\n these paths if need be.\n\n optional arguments:\n -h, --help show this help message and exit\n -m 127.0.0.1, --mpd-host 127.0.0.1\n Your MPD instance's host\n -p 6600, --mpd-port 6600\n Your MPD instance's port\n -s ./.lastfm_session, --session-file-path ./.lastfm_session\n Where to read in/save your session file to. Defaults\n to inside your config directory.\n --api-key API_KEY Your last.fm api key\n --api-secret API_SECRET\n Your last.fm api secret\n -t 50, --scrobble-threshold 50\n The minimum point at which to scrobble, defaults to 50\n percent\n -r, --real-time Use real times when calculating scrobble times? (e.g.\n how long you've been running the app, not the track\n time reported by mpd). Default: True\n -d, --allow-duplicate-scrobbles\n Allow the program to scrobble the same track multiple\n times in a row? Default: False\n -g, --generate-config\n Save the entirety of the running configuration to the\n config file, including command line arguments. Use\n this if you always run yams a certain fashion and want\n that to be the default. Default: False\n -l /path/to/log, --log-file /path/to/log\n Full path to a log file. If not set, a log file called\n \"yams.log\" will be placed in the current config\n directory.\n -c /path/to/cache, --cache-file /path/to/cache\n Full path to the scrobbles cache file. This stores\n failed scrobbles for upload at a later date. If not\n set, a log file called \"scrobbles.cache\" will be\n placed in the current config directory.\n -C ~/my_config, --config ~/my_config\n Your config to read\n -N, --no-daemon If set to true, program will not be run as a daemon\n (e.g. it will run in the foreground) Default: False\n -D, --debug Run in Debug mode. Default: False\n -k, --kill-daemon Will kill the daemon if running - will fail otherwise.\n Default: False\n --disable-log Disable the log? Default: False\n -a, --attach Runs \"tail -F\" on a running instance of yams' log\n file. \"Attaches\" to it, for all intents and purposes.\n NB: You will still need to kill it by hand. Default:\n False\n\n#### Other Information\n- YAMS will try to re-send failed scrobbles every minute during playback, or on every subsequent scrobble. YAMS does not try to re-send failed \"Now Playing\" requests\n- YAMS will wait on MPD's idle() command *only* when not playing a track. The `update_interval` configruation option controls the rate, in seconds, at which YAMS polls MPD for the currently playing track.\n- YAMS will not crash when an MPD connection is lost but will attempt to re-connect every 10 seconds. Kill the daemon if this behaviour is undesirable, though the reconnect behaviour shouldn't significantly affect system resources.\n- YAMS suppresses most error messages by default, run with `--debug` to see them all.\n- `-g` is pretty useful, you should probably use it once to not have to keep typing in command line parameters.\n- Windows support is not guaranteed. YAMS works fine under Elementary OS Juno and OS X Mojave (presumably all variants of Linux and OSX with python3 should work fine).\n- YAMS is developed with Python `3.7`, if you're encountering a bug with a lower version, report it.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/Berulacks/yams/releases/download/0.69/yams-0.69-py3-none-any.whl", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/berulacks/yams", "keywords": "", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "YAMScrobbler", "package_url": "https://pypi.org/project/YAMScrobbler/", "platform": "", "project_url": "https://pypi.org/project/YAMScrobbler/", "project_urls": { "Download": "https://github.com/Berulacks/yams/releases/download/0.69/yams-0.69-py3-none-any.whl", "Homepage": "https://github.com/berulacks/yams" }, "release_url": "https://pypi.org/project/YAMScrobbler/0.69/", "requires_dist": [ "python-mpd2 (==1.0.0)", "PyYAML (==4.2b4)", "requests (==2.21.0)" ], "requires_python": ">=3", "summary": "Yet Another MPD Scrobbler (for Last.FM!)", "version": "0.69" }, "last_serial": 5721023, "releases": { "0.2": [ { "comment_text": "", "digests": { "md5": "aff543d9de0b83ee02c5a8f8c65bed1d", "sha256": "62a95534c8b9e3fe470a8acbcd1b648750b7133453212ddb039acfaf29b0cb90" }, "downloads": -1, "filename": "YAMScrobbler-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "aff543d9de0b83ee02c5a8f8c65bed1d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 31311, "upload_time": "2018-12-19T14:30:25", "url": "https://files.pythonhosted.org/packages/d8/b9/d09a11d774bfdc32fd7f498af7498932688a2e5a8771dc96103d7ec6722d/YAMScrobbler-0.2-py3-none-any.whl" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "5ed697be56cbff41946ae5a618155056", "sha256": "c0ca4390c41f9d4313e4bbcc5891afc671e0dec4ddc3a2f95002763e3c94c5ec" }, "downloads": -1, "filename": "YAMScrobbler-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5ed697be56cbff41946ae5a618155056", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 31313, "upload_time": "2018-12-19T14:40:33", "url": "https://files.pythonhosted.org/packages/29/f9/8b4eb9ca6ac13b18b1ddc1630c92a65cc9b6af072dbf772d5d6d39341291/YAMScrobbler-0.3-py3-none-any.whl" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "6fb94f0a9b335b23b00195e5afe6f117", "sha256": "a568bb8bf2d34771eb1446201e209ce4bbd397f5e5e6084e1fc868e435af39ae" }, "downloads": -1, "filename": "YAMScrobbler-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "6fb94f0a9b335b23b00195e5afe6f117", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 27978, "upload_time": "2018-12-19T15:07:38", "url": "https://files.pythonhosted.org/packages/7e/10/269a4153afb56591ee43b0d2fd12fc9805f72e5373a3401fcfe8c029986f/YAMScrobbler-0.4-py3-none-any.whl" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "059efc1e4ded6069f3a6a266f2d612c9", "sha256": "edd37e8f7d3ef60fbeb2c3b60ce86f34f3ee1100939feacc7b781d331c82946b" }, "downloads": -1, "filename": "YAMScrobbler-0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "059efc1e4ded6069f3a6a266f2d612c9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 28386, "upload_time": "2019-01-15T14:55:36", "url": "https://files.pythonhosted.org/packages/a8/46/f9268c082c5a2d2ca28a252e8e8cb00b0a0496e7a52a17e2a6d5a160d26f/YAMScrobbler-0.5-py3-none-any.whl" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "8bd80e0628be84b4acce29360f9f3d34", "sha256": "85c937987713cf32c2bf7a5ef46b57322d4d399aab31d978843f44a30dc00e34" }, "downloads": -1, "filename": "YAMScrobbler-0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "8bd80e0628be84b4acce29360f9f3d34", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 28587, "upload_time": "2019-03-07T23:39:22", "url": "https://files.pythonhosted.org/packages/99/4d/0d2f0fa61c068e494328d59d491f478b58df42b68bb51d1a09d8d9d90d95/YAMScrobbler-0.6-py3-none-any.whl" } ], "0.65": [ { "comment_text": "", "digests": { "md5": "2746c8a0c6fedd570c2777584c489708", "sha256": "b4e3882cf00a4dc3181e95544cdddde84015bb8b2482ada7089d04966637a8ff" }, "downloads": -1, "filename": "YAMScrobbler-0.65-py3-none-any.whl", "has_sig": false, "md5_digest": "2746c8a0c6fedd570c2777584c489708", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 28512, "upload_time": "2019-03-18T15:46:30", "url": "https://files.pythonhosted.org/packages/5b/57/ec349afc7ed4cc9db05230c50e6aac42cf955fe76259c05502509a1eb1e0/YAMScrobbler-0.65-py3-none-any.whl" } ], "0.66": [ { "comment_text": "", "digests": { "md5": "da05916479196ffea98d1306f5f7de6d", "sha256": "33098e94304b0643bb4f08ba8febdbfb9a5a589a10791d39d18aeeee4da4cc7e" }, "downloads": -1, "filename": "YAMScrobbler-0.66-py3-none-any.whl", "has_sig": false, "md5_digest": "da05916479196ffea98d1306f5f7de6d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 29008, "upload_time": "2019-03-18T16:22:57", "url": "https://files.pythonhosted.org/packages/1b/8a/5b8eb775b31a1e1003b509df70184cc86bd3ea0277ec4a77eb6c1bbb337b/YAMScrobbler-0.66-py3-none-any.whl" } ], "0.67": [ { "comment_text": "", "digests": { "md5": "cb482b31bade1b621d932b3a3e5c9426", "sha256": "8cff46e74c8035d3df559d887f77293c660a181b832b498a31ac64c31bd8114f" }, "downloads": -1, "filename": "YAMScrobbler-0.67-py3-none-any.whl", "has_sig": false, "md5_digest": "cb482b31bade1b621d932b3a3e5c9426", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 29075, "upload_time": "2019-03-22T08:41:50", "url": "https://files.pythonhosted.org/packages/e7/d5/4c9381d20b21f0bb5e0d048e1369a8fa1291e39a39a1e559ed5051869492/YAMScrobbler-0.67-py3-none-any.whl" } ], "0.68": [ { "comment_text": "", "digests": { "md5": "27fd0d8c50066b55b613237d95885d45", "sha256": "190872de1f3f60e109b1280de1eb5db73505244f89fc24ac7f9beaab19b10ede" }, "downloads": -1, "filename": "YAMScrobbler-0.68-py3-none-any.whl", "has_sig": false, "md5_digest": "27fd0d8c50066b55b613237d95885d45", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 29288, "upload_time": "2019-04-23T00:28:13", "url": "https://files.pythonhosted.org/packages/bb/6d/5b4626fbdc0cc21dfdc19e344ba2bd15fd08155910cfe951540c2f7ef595/YAMScrobbler-0.68-py3-none-any.whl" } ], "0.69": [ { "comment_text": "", "digests": { "md5": "7871a03116a73ea2b214f224ad4d9f5c", "sha256": "b31aa44aa808a24f8e468b163eb0eee9f11cd4a9de98d1d66c6cafa43e77146f" }, "downloads": -1, "filename": "YAMScrobbler-0.69-py3-none-any.whl", "has_sig": false, "md5_digest": "7871a03116a73ea2b214f224ad4d9f5c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 29645, "upload_time": "2019-04-23T01:36:53", "url": "https://files.pythonhosted.org/packages/1f/ea/9c2808c0fd27a02be992944a23704c4ae055713997dffddb212a278bf8ff/YAMScrobbler-0.69-py3-none-any.whl" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "1703370daba73eabc9770ee63f911b27", "sha256": "1d4b770675421c0a152dc333932034e301b7b55d86a39a8a601e5bfd7ead80f3" }, "downloads": -1, "filename": "YAMScrobbler-0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "1703370daba73eabc9770ee63f911b27", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 30770, "upload_time": "2019-08-04T17:43:37", "url": "https://files.pythonhosted.org/packages/97/7b/bbc98d208c82b95d5e76136180035d534447eb372a36d3674dbe64876536/YAMScrobbler-0.7-py3-none-any.whl" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "3818b48b51f0110286593a09aa2f4eaa", "sha256": "e5bcf1e6fa7b5fd3760cb60b27517e7bf241532d10aba54365ef2807e5047147" }, "downloads": -1, "filename": "YAMScrobbler-0.7.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3818b48b51f0110286593a09aa2f4eaa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 30481, "upload_time": "2019-08-23T14:21:11", "url": "https://files.pythonhosted.org/packages/c1/85/832b3e43d238603b36259bb701a59dca6bc7b31bba9e44c4b5df950ba182/YAMScrobbler-0.7.1-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7871a03116a73ea2b214f224ad4d9f5c", "sha256": "b31aa44aa808a24f8e468b163eb0eee9f11cd4a9de98d1d66c6cafa43e77146f" }, "downloads": -1, "filename": "YAMScrobbler-0.69-py3-none-any.whl", "has_sig": false, "md5_digest": "7871a03116a73ea2b214f224ad4d9f5c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 29645, "upload_time": "2019-04-23T01:36:53", "url": "https://files.pythonhosted.org/packages/1f/ea/9c2808c0fd27a02be992944a23704c4ae055713997dffddb212a278bf8ff/YAMScrobbler-0.69-py3-none-any.whl" } ] }