ヌー民。
Sonosで聞いてる曲をシェアしたい
そう思ったわけです。
Sonosのスピーカーで曲を聞いたことをTriggerにIFTTTを動かしたかったりしたんですが、残念ながらSonosはTriggerを提供しておらず、すべてActionとなっていました。そこで、今回はNode.jsの便利なパッケージを使って、Sonosで聞いた曲を取得してみようと思います。
その名もnode-sonos
そのままですね。
これがすごい便利。とりあえず、
npm i sonos
とかでインストールしてやって。ひとまず同じネットワーク内の機器探索から。
const Sonos = require('sonos') Sonos.DeviceDiscovery((device) => { console.log('--------- device found ----------') console.log(device) })
こんな感じで機器探索の機能が準備されています。これを実行すると・・・。
--------- device found ---------- Sonos { host: '192.168.1.35', port: 1400, options: { endpoints: { transport: '/MediaRenderer/AVTransport/Control', rendering: '/MediaRenderer/RenderingControl/Control', device: '/DeviceProperties/Control' }, spotify: { region: '3079' } }, _events: { newListener: [AsyncFunction: implicitListen] }, _eventsCount: 1 }
ここで取得できたIPアドレスとポート番号を使って、聞いている音楽の情報を取得してみます。
const Sonos = require('sonos') const device = new Sonos.Sonos('192.168.1.35', '1400') device.on('CurrentTrack', (track) => { console.log('--------- now playing... ---------') console.log(track) })
すると、スクリプト実行時と曲が変わるタイミングで、情報が取得できます。
--------- now playing... --------- { id: null, parentID: null, title: 'McDonald Romance', artist: 'King Gnu', album: 'McDonald Romance', albumArtURI: 'https://i.scdn.co/image/xxxxxxxxxx', uri: 'x-sonos-spotify:spotify:track:xxxxxxxxxx', duration: 165, queuePosition: 1 }
たまに2回同じ曲名のイベントが発火してる気がしますが、そこはなんとかよしなに処理してあげましょう。