Skip to main content

Post Last.fm statistics to Twitter and/or Mastodon

Project description

Last-Shout

PyPI - Version PyPI - Python Pre-Commit

A command line tool to toot a user's top artist statistics from Last.fm to Mastodon.

Installation

Installing the latest version from Github:

pipx install last-shout

Getting started

In order to use Last-Shout, you need at a minimum to get authentication keys for Last.fm and Mastodon.

Help

 usage: last-shout [-h] [-u USER] [--last-access-key LAST_ACCESS_KEY] [--set-lastfm] [-n NUMBER] [-p PERIOD] [-t] [--bluesky-handle BLUESKY_HANDLE] [--bluesky-password BLUESKY_PASSWORD] [--set-bluesky] [--create-mastodon-app]
                  [--create-mastodon-user] [--toot] [--skeet] [--version]

 A program to post last.fm statistics to Twitter and/or Mastodon.

 options:
  -h, --help            show this help message and exit
  -u, --user USER       Last.fm username (default: None)
  --last-access-key LAST_ACCESS_KEY
                        Last.fm access key (default: None)
  --set-lastfm          Set Last.fm credentials (default: False)
  -n, --number NUMBER   Number of last.fm top artists (default: 10)
  -p, --period PERIOD   The time period over which to retrieve top artists. Options are: overall | 7day | 1month | 3month | 6month | 12month (default: 7day)
  -t, --tweet           Post Last.fm stats to Twitter (default: False)
  --bluesky-handle BLUESKY_HANDLE
                        Bluesky handle (default: None)
  --bluesky-password BLUESKY_PASSWORD
                        Bluesky password (default: None)
  --set-bluesky         Set Bluesky credentials (default: False)
  --create-mastodon-app
                        Create mastodon application (default: False)
  --create-mastodon-user
                        Create Mastodon user token (default: False)
  --toot                Post Last.fm stats to Mastodon (default: False)
  --skeet               Post Last.fm stats to Bluesky (default: False)
  --version             Show the version number and exit

Set Systemd Timer

Once you've set your credentials in the application, most users will want it to run on regular intervals, and if you're running a Linux distribution with systemd you can set-up a timer to do that.

Start by a systemd unit file for it in ~/.config/systemd/user/last-shout-weekly.service

[Unit]
Description=Run weekly Last-Shout
After=network.target

[Service]
Type=oneshot
WorkingDirectory=%h
ExecStart=%h/.local/bin/last-shout --toot --skeet

[Install]
WantedBy=default.target

Now let's create a time for it in ~/.config/systemd/user/last-shout-weekly.timer:

[Unit]
Description=Start the Systemd service last-shout-weekly.service every Friday at 11:30

[Timer]
OnCalendar=Fri 11:30
Persistent=true

[Install]
WantedBy=timers.target

Then run the following to enable it:

systemctl --user enable --now last-shout-weekly.timer

Then reload the user daemon:

systemctl --user daemon-reload

Now run the following to verify the timer is enabled by running:

systemctl --user list-timers

If everything is alright you should see output similar to this:

bpepple@faramir:~$ systemctl --user list-timers
NEXT                          LEFT LAST                              PASSED UNIT                         ACTIVATES                     
Tue 2025-01-28 16:53:50 EST    23h Mon 2025-01-27 16:53:50 EST 4min 21s ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Fri 2025-01-31 11:30:00 EST 3 days Fri 2025-01-24 11:30:06 EST            - last-shout-weekly.timer      last-shout-weekly.service
-                                - Mon 2025-01-27 16:50:50 EST     7min ago grub-boot-success.timer      grub-boot-success.service

3 timers listed.

Now run the following to make sure the user timer can run even if they aren't logged in when the timer is ran:

sudo loginctl enable-linger username

To verify that the setting has been applied, check for a file with the same name as the user in the /var/lib/systemd/linger directory.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

last_shout-0.10.1.tar.gz (27.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

last_shout-0.10.1-py3-none-any.whl (27.6 kB view details)

Uploaded Python 3

File details

Details for the file last_shout-0.10.1.tar.gz.

File metadata

  • Download URL: last_shout-0.10.1.tar.gz
  • Upload date:
  • Size: 27.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for last_shout-0.10.1.tar.gz
Algorithm Hash digest
SHA256 54398a5f00d73df96289eebb6c53af2f67352df091eabcecdbc3bc055df3175e
MD5 76bf4a2c3ce5a69679321cff56a447ab
BLAKE2b-256 b17dd46c2964096078e0c4d87008bbd138de6fb715f2bf1d91055c3a2e30f48f

See more details on using hashes here.

File details

Details for the file last_shout-0.10.1-py3-none-any.whl.

File metadata

  • Download URL: last_shout-0.10.1-py3-none-any.whl
  • Upload date:
  • Size: 27.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for last_shout-0.10.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e438a3e2f65c697b240e2d7a2d45166462dfefe834dad55a8c2b61c9866853ae
MD5 1a5f9cbda33cc4fe796ef6e0bf7bc885
BLAKE2b-256 75250b4a2e5481a6616060567d49a90f0ede93bb5ed4e8bb0cdb37a9d448ffd0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page