概要
Spotify、便利ですよね
私も在宅勤務中ずっと聴いています。
ただ、使っていて不便に思う部分があったので自作アプリを作成しました。
コードはGithubにあります
機能概要
- spotifyでフォロー中しているアーティストの新曲を通知する
- spotifyで現在再生している曲をプレイリストに登録する(履歴用)
- 他人が作成したプレイリストが更新されたら通知する
- spotifyで再生数上位の曲をプレイリストに登録する
- 再生中の曲をブラウザでGoogle検索する
実行環境等
- windows10
- Python3.10
- Spotify API
- AWS Dynamodb
- AWS Systems Manager パラメータストア
パラメータストアは機密情報の取得に使っているだけです。
機能説明
以下、各機能の説明です。
タスクトレイ
アプリ実行中はタスクトレイにアイコンが表示されます。
手動操作の機能は右クリックメニューから実行します。
spotifyでフォロー中しているアーティストの新曲を通知する
アーティストをフォローしていても新曲が追加されたことに気が付かないことが多かったので作成しました。
通知先は個人用のDiscordサーバーです。
一定間隔で自動実行するようにしています。
spotifyで現在再生している曲をプレイリストに登録する(履歴用)
Spotifyの履歴は50曲しか保存されないようです。プレイリストには1万曲まで追加できるので再生した曲を全部プレイリストに自動追加して擬似的な再生履歴を作成しました。
Spotifyのプレイリストは同じ曲を複数入れることができますが、今回は重複しないようにしました。
なので正確には再生したことのある曲リストが出来上がります。
参考にした記事
https://qiita.com/qope/items/332a250f8dc6dc6f10d1
他人が作成したプレイリストが更新されたら通知する
継続的に更新してくれている公開プレイリスト、自分でプレイリストを作ったり更新したりする手間が省けてありがたいですよね。メンテナーの方に感謝です。
ただ、新規に追加された曲は一番下に追加され特に通知もないので更新があっても気づく手段がなく不便でした。
通知先は個人用のDiscordサーバーです。
一定間隔で自動実行するようにしています。
spotifyで再生数上位の曲をプレイリストに登録する
よく聞く曲をプレイリストにしたかったので作成しました。
APIの仕様で再生回数は取得できないので短期、中期、長期でtop_tracks
取得してそれぞれのプレイリストにしています
time_ranges = [{'term': 'short_term', 'playlist_id': short_term_rank_playlist_id},
{'term': 'medium_term', 'playlist_id': medium_term_rank_playlist_id},
{'term': 'long_term', 'playlist_id': long_term_rank_playlist_id}]
for time_range in time_ranges:
top_tracks = sp.current_user_top_tracks(limit=20, offset=0, time_range=time_range['term'])
urls = []
for track in top_tracks['items']:
urls.append(track['id'])
playlist_id = time_range['playlist_id']
clear_playlist(playlist_id)
sp.playlist_add_items(playlist_id, urls)
再生中の曲をブラウザでGoogle検索する
Spotifyのデスクトップアプリはコピペができないので曲の詳細を検索しようにも曲名を手打ちする必要がありました。
タスクトレイのメニューから現在再生中の曲名をGoogle検索し、ブラウザを開く機能を作りました。
def search_current_playing():
# 現在再生中の曲を取得する
current_playing = sp.current_user_playing_track()
if current_playing is None:
return
# 検索文字列作成
track_name = current_playing['item']['name']
artist = current_playing['item']['artists'][0]['name']
search_params = ' '.join([track_name, artist])
# URL作成
url = "https://www.google.com/search"
params = urllib.parse.urlencode({"query": search_params})
search_url = f'{url}?{params}'
# ブラウザで検索する
webbrowser.open(search_url)
おわりに
思いつく範囲で追加機能を作成しましたが、今後もなにかあれば追加していく予定です。