Skip to main content

Command Palette

Search for a command to run...

Gillar nuvarande låt på Spotify

Published
4 min read

Other Languages:

  • Jeżeli chcesz zobaczyć ten post po polsku to jest tutaj: Link
  • If you want to see this post in english then it's here: Link

Warning / Varning:

  • I'm learning swedish so if you find any mistakes then feel free to let me know in the comments.
  • Jag lära mig svenska så om du hittar några misstag får du gärna meddela mig i kommentererna.

Problemet

Spotify Client saknar en ibland viktig funktion för mig. Låt oss anta som du lyssnar på någon slumpmässig spellista du hittat eller Discover Weekly spellista på Spotify. Du lyssnar på den här spellistan och du gillar en låt. Sedan måste du genom UI klicka på hjärtat för att lägga till det i dina gillade låtar. Men om du just nu gör något och bara lyssnar på Spotify i bakgrunden är detta superirriterande.

Lösningen

Den bästa lösningen skulle vara att lägga till den här funktionen till Spotify-klienten men funktionsförfrågningar som denna gick inte för långt: https://community.spotify.com/t5/Closed-Ideas/Desktop-Keyboard-shortcut-to-add-song-to-liked-songs/idi-p/4960129 . Så jag gjorde en tillfällig lösning genom Python-skriptet och i mitt exakta fall Razer Synapse. Men du kan göra din kortkommando på ett annat sätt.

Skript

Låt oss göra det här skript. Först måste vi göra Spotify API App genom denna instrumentpanel. I inställningarna för appen lägg till den här webbadressen till Redirect URIs sektion: http://localhost:7777/callback. Från denna instrumentpanel behöver vi Client ID och Client Secret, du kan kopiera dem till ditt skript eftersom vi kommer att behöva dem snart. Det är dags att skapa ett pythonskript. Låt oss börja med att installera kraven. Vi behöver ett paket för att göra det här skriptet som heter spotipy. Vi kan installera det genom pip3 install spotipy. Därefter skapar vi en fil för vårt skript. Och nu börjar vi med att skriva importer.

from spotipy import Spotify, SpotifyOAuth, SpotifyException

Först vi importerar Spotify API-klienten, sedan vi importerar Auktoriseringshanterare för API och sist vi importerar Exception för felhantering. Nu måste vi deklarera några variabler.

client_id = ''
client_secret = ''
redirect_uri = 'http://localhost:7777/callback'
scope = 'user-library-modify,user-read-currently-playing'

De första variablerna är för Spotify-appens Client ID och Client Secret. Används för att auktorisera API:et. Därefter måste vi variabler för OAuth-auktorisering. Först vi har redirect_uri som vår Auktoriseringshanterare kommer att använda för att omdirigera OAuth-redirect och få token. För det andra har vi omfattning för token. I det här skriptet använder vi user-library-modify för att säga att vi gillar en låt och user-read-currently-playing för att få reda på vilken låt vi lyssnar på. Nu är det dags för logiken i skriptet.

auth_manager = SpotifyOAuth(scope=scope, client_id=client_id, client_secret=client_secret, redirect_uri=redirect_uri)

Först vi behöver vår Auktoriseringshanterare.

sc = Spotify(ouath_manager=auth_manager)

Därefter behöver vi vår API-klient.

playing = sc.currently_playing()
if "item" not in playing or "id" not in playing["item"]:
    print("Error: Currently not playing anything")
    exit(255)
playing_id = playing["item"]["id"]

Nu vi behöver id för den låt som spelas just nu.

try:
    r = sc.current_user_saved_tracks_add([playing_id])
    print(r)
except SpotifyException as e:
    print("Error: Song not found or something else")
    print(e)

Nu vi försöker säga att vi gillar den här låten och ta ett undantag om den kommer att misslyckas.

Nu vi måste prova detta skript i praktiken. Lyssna bara på en slumpmässig låt som du inte gillar. Och kör skriptet. Om den efter några sekunder visas som gillad betyder det att det här skriptet fungerade.

Min inställning för Windows med Razer Synapse

Nu hur jag har gjort en genväg för det. Jag har gjort ytterligare 2 skript. Första skriptet med namnet start.bat med detta innehåll:

@echo off
push $~dp0
python .\main.py
popd
exit 0

Och ett andra skript som heter start.vbs med följande innehåll:

Set WshShell = CreateObject("WScript.Shell")
Dim oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject")
Dim sScriptDir : sScriptDir = oFSO.GetParentFolderName(WScript.ScriptFullName)
WshShell.Run chr(34) & sScriptDir & "/start.bat" & Chr(34), 0
Set WshShell = Nothing

Det första skriptet är bara för att köra python-skriptet. Om du har namngett det på ett annat sätt ändrar du namnet i det här skriptet. Det andra skriptet är att köra filen start.bat utan kommandotolkfönster alls. Du kommer alltså inte att skapa fönster för att gilla sången och få fokus från det aktiva fönstret.

I Razer Synapse lade jag till Launch Program selected start.vbs för HyperShift + L på tangentbordet.

Jag hoppas att det här skriptet kan hjälpa dig.

Fullständiga skript

main.py

from spotipy import Spotify, SpotifyOAuth, SpotifyException

client_id = ''
client_secret = ''
redirect_uri = 'http://localhost:7777/callback'
scope = 'user-library-modify,user-read-currently-playing'

auth_manager = SpotifyOAuth(scope=scope, client_id=client_id, client_secret=client_secret, redirect_uri=redirect_uri)
sc = Spotify(oauth_manager=auth_manager)
playing = sc.currently_playing()
if "item" not in playing or "id" not in playing["item"]:
    print("Error: Currently not playing anything")
    exit(255)
playing_id = playing["item"]["id"]
try:
    r = sc.current_user_saved_tracks_add([playing_id])
    print(r)
except SpotifyException as e:
    print("Error: Song not found or something else")
    print(e)

start.bat

@echo off
pushd %~dp0
python .\main.py
popd
exit 0

start.vbs

Set WshShell = CreateObject("WScript.Shell") 
Dim oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject")
Dim sScriptDir : sScriptDir = oFSO.GetParentFolderName(WScript.ScriptFullName)
WshShell.Run chr(34) & sScriptDir & "/start.bat" & Chr(34), 0
Set WshShell = Nothing

Idag jag skrev skript

Part 1 of 1

Det här är artikelserien med små skripts som jag gjorde när jag blev tillräckligt irriterad på något.

More from this blog

D

Development Journey of Patryk Adamczyk

6 posts

Hi! My name is Patryk. I trying to find good solutions for every problem on my way. I'm creator of PAiP Web. Open Team for every one wanting to make good solutions to make programming easier.