Spotifyで聞いている音楽をSlackのStatusに表示させるアプリを作った
tl;dr
- MacのSpotifyアプリで聞いている音楽情報をSlackのstatusに表示させる
- SpotifyからデータとってくるところはAppleScriptを使った
元ネタ
iTunes版が以前紹介されてました。
iTunesで曲を聞くことはほぼなくなっていたので、Spotifyの再生情報をとってこれないかなーと考えていてAPIみてました。
Web APIをみても再生中の曲をとってくるやつはなさそうだったので断念していたのですが、Spotifyで再生中の曲をtmuxのステータスバーに表示するという記事が目について、AppleScript使えばできるってことがわかったのでやってみました。
Spotify版
ソースは以下になります。
https://github.com/iwata/nowplaying-on-slack
fork元ではplayback
を使ってiTunesの情報をとってきていた部分を、AppleScriptを使ってSpotifyの情報をとってくるように変更してます。
あと永続化のためにelectron使っていたのを、forever
でdaemonizeするようにしました。
AppleScript
#!/usr/bin/osascript
if application "Spotify" is running
tell application "Spotify"
set currentState to player state as string
set currentArtist to artist of current track as string
set currentTrack to name of current track as string
return "{\"state\":\"" & currentState & "\", \"track\":\"" & currentTrack & "\", \"artist\":\"" & currentArtist & "\"}"
end tell
else
return "{\"error\":\"Spotify is not running.\"}"
end if
ドキュメントのサンプルコードをみてもらえば大体わかると思います。
このscriptをNodeからshell execしてあげるんですが、構造化されたデータをやりとりしたかったのでJSONを標準出力にだすことで実現しました。
AppleScriptでJSON書くのシンドイ…。
main.js
NodeでSpotifyのデータを処理してくる部分は以下。
const watchSpotify = () => {
let before;
setInterval(() => {
exec(spotifyScript, (e, stdout, stderr) => {
if (e) {
console.error(e);
return;
}
if (stderr) {
console.error(stderr);
return;
}
const m = JSON.parse(stdout);
if ('error' in m) {
console.error(m.error);
return;
}
if (before === JSON.stringify(m)) {
// console.log('not change');
return;
}
before = JSON.stringify(m);
const message = `${m.track} - ${m.artist}`;
const emoji = (m.state === 'playing') ? ':spotify:' : ':musical_note:';
sendToSlack({ message, emoji });
console.log(m);
});
}, 3000);
};
playerの再生状態をもっているstate
をみて、statusで使うemoji
を切り替えてます。
Spotifyのカスタム絵文字を使うようにしているので、環境によっては使えないと思うので適宜変更してもらえればと思います。
実行
git clone [email protected]:iwata/nowplaying-on-slack.git
cd nowplaying-on-slack
yarn install
SLACK_API_TOKEN=[[token]] npm start
現場からは以上です。
Author And Source
この問題について(Spotifyで聞いている音楽をSlackのStatusに表示させるアプリを作った), 我々は、より多くの情報をここで見つけました https://qiita.com/iwata@github/items/85968f5ad57278607596著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .