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.0.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.0-py3-none-any.whl (27.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: last_shout-0.10.0.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.0.tar.gz
Algorithm Hash digest
SHA256 940c826fa8730d6862c2edbb9af944ddad9fca21d08dd7dc357e6dc0cc29f4d1
MD5 770e565ae5dca893da8474d76e39fe13
BLAKE2b-256 41d554bbe8c8e5b5844e9e36eae445684000a4b6de6b5fb68b5ccc1c6d6290c6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: last_shout-0.10.0-py3-none-any.whl
  • Upload date:
  • Size: 27.5 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1fae8b51f718c0e6d5c50ad8f59e277c4d89d98dd0d11adad4ef751abd02e295
MD5 851812c23aac78918d2ca632123d3108
BLAKE2b-256 ceecca2fb118206457d576d47c4e6c871cca22446bfdc8192063feeaba9e0e1c

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