LoginSignup
6
5

More than 3 years have passed since last update.

Apple MusicのプレイリストをSpotifyに「変換」するJSスクリプト

Last updated at Posted at 2020-09-01

困ったこと

  • 普段、サブスクリプション&ストリーミングの音楽サービスはSpotifyをプレミアム会員として使っている
  • が、SNSなどで他人からプレイリストが共有されるのはSpotifyとは限らない(個人的にはApple Musicであることが多い)
  • プレビューで数十秒間聴くことはできるが、Spotifyであれば広告もなくフル尺で聴けるし、できればプレイリストを移植したい
  • プレイリスト移植ができなくてもせめて「一曲ごとSpotifyでキーボードを叩いて検索して」再生・プレイリストに追加する手間をなくしたい
  • Soundiizというサービスは、異なるストリーミングプラットフォーム間のプレイリストを変換してくれる
    • が、そのためにはApple Musicの方でも有料会員になっていて、Soundiizに接続する必要がある
    • さらに一括変換などの便益を受けたければSoundiizにも課金しなければならない
    • 現状そこまでしなくてもいいかな、感

解決の方向

  • 前提として

    • Apple MusicもSpotifyもPC版ネイティブアプリが使いやすいが、ともにWebでも使うことができる
    • Spotifyの楽曲・アルバム・アーティスト等検索はhttps://open.spotify.com/search/[検索語句]のURLで可能
  • これを利用して、Web(PC版)で開いたApple Musicプレイリストの楽曲タイトルを「Spotifyでその楽曲名で検索するリンク」に一括で置き換える

  • 検索した後はSpotify側で再生したり、プレイリストに追加したりすればOK。これによって「一曲ごとにSpotifyでキーボードを叩いて検索」する手間は省ける

  • JavaScriptのreplaceChildメソッドを使う

    • parentNode.replaceChild(newChild, oldChild)で親要素のうち指定した要素を新しい要素で置換できる
    • Node.replaceChild - Web API

デモ&スクリプト

Image from Gyazo

  • すぐに試したい場合は、Apple Musicの適当なプレイリスト(たとえばはじめてのBillie Eilishとか)を開いて、次のスクリプトをコンソールで実行 or アドレスバーに貼り付けて(先頭のjavascript:が消えたら付け足して)Enterキー押下すれば実現可能(ブックマークレットにすればコンソールを開くことなく毎回実行できるのでおすすめ)
javascript:(()=>{  const songNameWrapperDivElms = [...document.getElementsByClassName('song-name-wrapper')];  songNameWrapperDivElms.forEach(wrapperElm => {    const songNameRawElm = wrapperElm.children[0];    const songName = songNameRawElm.innerText;    const songNameLinkedElm = document.createElement('a');    songNameLinkedElm.setAttribute('href', `https://open.spotify.com/search/${songName}`);    songNameLinkedElm.setAttribute('target', '_blank');    songNameLinkedElm.style.color = 'rgb(28, 185, 92)';    songNameLinkedElm.innerText = songName;    wrapperElm.replaceChild(songNameLinkedElm, songNameRawElm);  });})();
  • 解説付き(コメント以外は同じ)
javascript:(()=>{
  // 曲名などが子要素に含まれる要素(配列の長さはプレイリストの曲数に一致)
  const songNameWrapperDivElms = [...document.getElementsByClassName('song-name-wrapper')];
  songNameWrapperDivElms.forEach(wrapperElm => {
    // 曲名テキストだけの要素
    const songNameRawElm = wrapperElm.children[0];
    const songName = songNameRawElm.innerText;
    // Spotify検索へのリンクつきの曲名の要素
    const songNameLinkedElm = document.createElement('a');
    songNameLinkedElm.setAttribute('href', `https://open.spotify.com/search/${songName}`);
    songNameLinkedElm.setAttribute('target', '_blank');
    songNameLinkedElm.style.color = 'rgb(28, 185, 92)';
    songNameLinkedElm.innerText = songName;
    // 「曲名テキストだけの要素」を「Spotify検索へのリンクつきの曲名の要素」で置換
    wrapperElm.replaceChild(songNameLinkedElm, songNameRawElm);
  });
})();

注意など

  • 楽曲名が汎用的すぎると(「I love you」など)狙い通りの楽曲が出てこないかもしれない
    • アーティスト名も含めた検索にしてもいいかも
  • Apple Musicのプレイリストに入っている曲数が多い場合は、いったん下までスクロールし切ってから実行する
  • SpotifyのAPIはかなり強力なので、活用すればさらにパワーアップしてプレイリストの一括置換までいけるはず
  • 拡張機能にするのもいいかもしれない…

今回はここまで。Enjoy your Spotify Life!

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5