以下の内容はhttps://relativelayout.hatenablog.com/entry/2020/01/26/122146より取得しました。


Node.jsからSonosの状態を取得してみる

ヌー民。

ポキオ Sonos Node.js

Sonosで聞いてる曲をシェアしたい

そう思ったわけです。

relativelayout.hatenablog.com

Sonosのスピーカーで曲を聞いたことをTriggerにIFTTTを動かしたかったりしたんですが、残念ながらSonosはTriggerを提供しておらず、すべてActionとなっていました。そこで、今回はNode.jsの便利なパッケージを使って、Sonosで聞いた曲を取得してみようと思います。

その名もnode-sonos

そのままですね。

github.com

これがすごい便利。とりあえず、

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回同じ曲名のイベントが発火してる気がしますが、そこはなんとかよしなに処理してあげましょう。




以上の内容はhttps://relativelayout.hatenablog.com/entry/2020/01/26/122146より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14