🦔

Spotifyで聴取中の楽曲を取得する

2024/06/16に公開

必要なもの

user-read-currently-playingスコープが有効なアクセストークンが必要です。
取得方法が分からない方は以下をご覧ください
https://developer.spotify.com/documentation/web-api/tutorials/code-flow

APIを叩いてみる

await fetch(
  "https://api.spotify.com/v1/me/player/currently-playing?market=JP",
    {
      method: "GET",
      headers: {
        Authorization: `Bearer ${token}`,
      },
    },
)
.then((response) => response.json())
.then((data) => {
  console.log(data)
}

聴取中の楽曲を取得するためのAPIのエンドポイントは/me/player/currently-playingで、ヘッダーのAuthorizationBearer ${アクセストークン}をセットする必要があります。
上記のコードを実行すると以下のようなブツが返却されます。

{
  "timestamp": 1718459598535,
  "context": null,
  "progress_ms": 14796,
  "item": {
    "album": {
      "album_type": "album",
      "artists": [
        {
          "external_urls": {
            "spotify": "https://open.spotify.com/artist/7kZTWx6cRLc0TSRPq1XBMP"
          },
          "href": "https://api.spotify.com/v1/artists/7kZTWx6cRLc0TSRPq1XBMP",
          "id": "7kZTWx6cRLc0TSRPq1XBMP",
          "name": "DECO*27",
          "type": "artist",
          "uri": "spotify:artist:7kZTWx6cRLc0TSRPq1XBMP"
        }
      ],
      "external_urls": {
        "spotify": "https://open.spotify.com/album/0Mp8qsZhLGAX1XTL1PE0YP"
      },
      "href": "https://api.spotify.com/v1/albums/0Mp8qsZhLGAX1XTL1PE0YP",
      "id": "0Mp8qsZhLGAX1XTL1PE0YP",
      "images": [
        {
          "height": 640,
          "url": "https://i.scdn.co/image/ab67616d0000b27305c466733d2301a1348b956a",
          "width": 640
        },
        {
          "height": 300,
          "url": "https://i.scdn.co/image/ab67616d00001e0205c466733d2301a1348b956a",
          "width": 300
        },
        {
          "height": 64,
          "url": "https://i.scdn.co/image/ab67616d0000485105c466733d2301a1348b956a",
          "width": 64
        }
      ],
      "is_playable": true,
      "name": "MANNEQUIN",
      "release_date": "2022-03-09",
      "release_date_precision": "day",
      "total_tracks": 11,
      "type": "album",
      "uri": "spotify:album:0Mp8qsZhLGAX1XTL1PE0YP"
    },
    "artists": [
      {
        "external_urls": {
          "spotify": "https://open.spotify.com/artist/7kZTWx6cRLc0TSRPq1XBMP"
        },
        "href": "https://api.spotify.com/v1/artists/7kZTWx6cRLc0TSRPq1XBMP",
        "id": "7kZTWx6cRLc0TSRPq1XBMP",
        "name": "DECO*27",
        "type": "artist",
        "uri": "spotify:artist:7kZTWx6cRLc0TSRPq1XBMP"
      }
    ],
    "disc_number": 1,
    "duration_ms": 165706,
    "explicit": false,
    "external_ids": {
      "isrc": "JPR502200199"
    },
    "external_urls": {
      "spotify": "https://open.spotify.com/track/4ZC9kGWHtzSPpXdXqAJnuK"
    },
    "href": "https://api.spotify.com/v1/tracks/4ZC9kGWHtzSPpXdXqAJnuK",
    "id": "4ZC9kGWHtzSPpXdXqAJnuK",
    "is_local": false,
    "is_playable": true,
    "name": "パラサイト",
    "popularity": 28,
    "preview_url": "https://p.scdn.co/mp3-preview/1d61377ef9b9966c12e4fa8c67785806bf7e4220?cid=cfe923b2d660439caf2b557b21f31221",
    "track_number": 8,
    "type": "track",
    "uri": "spotify:track:4ZC9kGWHtzSPpXdXqAJnuK"
  },
  "currently_playing_type": "track",
  "actions": {
    "disallows": {
      "resuming": true
    }
  },
  "is_playing": true
}

返却されたデータの中身を見てみる

timestampは取得時のタイムスタンプ、currently_playing_typeは再生しているアイテムの種類です。
また、is_playingには現在再生中かどうかが格納されています。
肝心の楽曲データはitemに保存されています。

itemの中身

itemの中身には以下の内容があります。

オブジェクト 格納されているデータ
item.album アルバム情報
item.artists アーティスト情報
item.disc_number ディスク番号
item.duration_ms トラックの長さ(ms単位)
item.explicit 明確な歌詞があるかどうか
(プチリリはfalse)
item.external_ids 外部の既知のID
(邦楽の場合はISRC)
item.external_urls 外部の既知のURL
item.external_urls.spotifyでSpotifyへのリンク)
item.href トラックのAPIエンドポイント
(APIを叩くと完全な情報を取得できます)
item.id トラックID
item.is_local ローカルファイルかどうか
item.is_playable 指定したマーケットで再生可能かどうか
item.name トラック名
item.popularity トラックの人気度(100がMAX)
item.preview_url 30秒程度のプレビュー(MP3形式)
item.track_number トラック番号
item.type track
item.uri Spotify URI

item.albumの中身

アルバム情報が格納されているitem.albumの中身は以下の通りです。

オブジェクト 格納されているデータ
item.album.album_type アルバムのタイプ
(album/single/compilationのうちのどれか)
item.album.artists アルバムのアーティスト情報
item.album.external_urls アルバムへのリンク
item.album.external_urls.spotifyでSpotifyへのリンク)
item.album.href アルバムのAPIエンドポイント
(APIをたたくと完全な情報を取得できます)
item.album.id アルバムID
item.album.images アルバムアート
item.album.is_playable 指定したマーケットで再生可能かどうか
item.album.name アルバム名
item.album.release_date リリース日
item.album.release_date_precision item.album.release_dataの精度
(year, month, dayのどれか)
item.album.total_tracks 総トラック数
item.album.type album
item.album.uri Spotify URI

item.artistsの中身

アーティスト情報が格納されているitem.artistsの中身は以下の通りです。
item.artistsは配列となっているためここではitem.artists[0]の中身を使用します。

オブジェクト 格納されているデータ
item.artists[0].external_urls 外部の既知のURL
item.artists[0].external_urls.spotifyでSpotifyへのリンク
item.artists[0].href アーティストのAPIエンドポイント
(APIをたたくと完全な情報を取得できます)
item.artists[0].id アーティストID
item.artists[0].name アーティスト名
item.artists[0].type artist
item.artists[0].uri Spotify URI

最後に

以上がSpotifyで聴取中の楽曲の情報を取得する方法と返却内容の解説です!
アクセストークンの取得方法については後日記事を書けたらなと思っています💦

Discussion