本文へスキップ

Last.fm 週間ランキング Bot

毎週月曜の朝6時に、その週いちばん聴いた曲とアーティストの Top3 を X に投稿する。

使用技術
Python / AWS Lambda / EventBridge / SSM Parameter Store / Last.fm API / X API v2
稼働状況
2026/06〜稼働中
作ったときの記事
Last.fm の週間ランキングを自動でTwitterに投稿するBotを作った
EventBridge が Lambda を起動し、Last.fm API から取得して X API v2 へ投稿する構成図

毎週月曜の 6:00 に EventBridge が Lambda を起動し、Last.fm API から直近1週間の再生数を取得して、 曲とアーティストの Top3 を X に投稿する。状態を持たないので、失敗しても翌週に自然復旧する。

外部ライブラリを使っていない

OAuth 1.0a の署名処理を Python の標準ライブラリだけで実装している。 Lambda Layer が不要になり、ZIP ひとつでデプロイが完結する。

詰まったところ

X API が 403 を返し続けた。署名の実装は合っているのに投稿できない。 短い ASCII 文字列でテスト投稿したら成功したので、署名ではなく本文の文字数が原因だと切り分けられた。

X は日本語を1文字=2文字として数える。len() ではなく Twitter 換算のカウントに直した。

次に、140文字に収めると日本語タイトルの曲でランキングが途中で切れる問題が出た。 1通目に Top Tracks、2通目に Top Artists を分けるスレッド投稿に変更して解決した。 1通目のIDを2通目の reply_to_tweet_id に渡すと自動的に繋がる。

手動版との違い

NowPlaying (Last.fm) は「いま聴いている曲」を手で投げるツール。 こちらは週次の集計を自動で投げる。同じ API を見ているが用途が違うので、別々に動かしている。

今後

投稿経路を /notes/ 側に寄せる予定。X API を叩く箇所が1つに集約されると、 利用量の計測とコスト管理が楽になる。その前提になるドメインの話は renidentia991.com を建てたに書いた。