あらすじ
この間まで、Apple Musicを利用していました。
Macだけじゃなくて、Windowsからも聴き放題を利用しやすくしたいと思いました。
聴ける曲も考慮した結果、Amazon Musicに移行することに決めました。
プレイリストの移行
Amazon.co.jp: プレイリストをAmazonMusicにインポートする: デジタルミュージック
まず、上記の転送サービスを利用してプレイリストを移行しました。
移行後、違う曲・存在しない曲を取り込んでいるものがあったのでそれらを整理しました。
その後、Amazon Musicではマイミュージックを一括ダウンロードできないのが不便に感じました。
なので、全ての曲をプレイリストに追加してダウンロードしたいと思いました。
一括ダウンロードのためのプレイリスト作成
music.amazon.co.jp
- Amazon Musicをブラウザで開き、プレイリスト「ALL」を作成
- マイミュージックで開発者ツールを開く (プレイリストからも可能)
addPlaylist.js
を実行して「ALL」に追加する
- 「ALL」プレイリストでダウンロードする
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))
const addAllPlaylist = async (musicRow) => {
const moreBtn = musicRow.querySelector("music-button[icon-name='more']")
moreBtn.click()
await sleep(1000)
const menu = document.querySelector('div[role="menu"]')
const addMenuBtn = menu.querySelector(
'music-list-item[primary-text="プレイリストに追加"]'
)
addMenuBtn.click()
await sleep(1000)
const addBtn = document.querySelector("music-button[icon-name='add']")
addBtn.click()
await sleep(2000)
try {
const dialogHeaderText = document.getElementById("dialogHeader").textContent
if (dialogHeaderText === "重複曲") {
document.getElementById("dialogButton2").click()
await sleep(1000)
}
} catch (error) {
await sleep(2000)
}
}
const musicDictArray = []
let musicRows, musicRows2, number, nextNumber
musicRows = document.querySelectorAll("music-container music-image-row")
while (true) {
for (let musicRow of musicRows) {
nextNumber = Number(musicRow.querySelector(".index").textContent)
const title = musicRow.querySelector(".col1 music-link").textContent
const album = musicRow.querySelector(".col3 music-link").textContent
const musicDict = {
number: nextNumber,
title: title,
album: album,
}
await addAllPlaylist(musicRow)
}
if (number - nextNumber > 5) {
break
}
number = nextNumber
window.scrollTo(0, window.scrollY + 840)
await sleep(1000)
convertedMusicRows = [].map.call(musicRows, (element) => {
return element
})
musicRows2 = document.querySelectorAll("music-container music-image-row")
convertedMusicRows2 = [].map.call(musicRows2, (element) => {
return element
})
musicRows = convertedMusicRows2.filter(
(i) => convertedMusicRows.indexOf(i) == -1
)
}
感想
ブラウザでAmazon Musicを読み込んだときにすべては表示されず、スクロールするたびに曲情報が読み込まれるところに少し引っかかりました。
なんとか無事一括ダウンロードできるようになってよかったです。