動機
Youtube Musicを使っていると、聞きたくない曲(特定アーティストの曲)がそれなりに自動で再生されてしまうので何とかしたい
フィードバックとしてdislikeボタンがあるが、それを何度も押してもそのアーティストの曲は普通に流れてきたりする。特に顕著なのが協調フィルタリングでおすすめされそうなファンベースが近いアーティストで、全曲dislikeでもしないと普通に自動再生に入ってきてしまう
1個1個手でやってもいいが、途中でめんどくさくなった
コード
1回やるだけなら、対象のアルバムやアーティストの曲リストのページでChromeの開発者コンソールからこのコードを貼り付けるだけで良い。1.5秒毎に1曲dislikeを付けていく。
document.querySelectorAll('yt-button-shape#button-shape-dislike button[aria-pressed="false"]').forEach((button, index) => {
setTimeout(() => {
button.click();
console.log(index);
}, 1500 * index);
});
注意点としては現時点(2024/1/4)でdislikeボタンは押しても反映されないことがあるので、処理が終わったらリフレッシュして再度これを走らせる必要がある。このスクリプトの問題ではなく、手で押しても失敗したりする。特に間隔を開けずに連続で押すと起きやすいので1.5秒とかなり長めの遅延を付けている。
曲数が多い場合は一番下までスクロールしてから走らせないと漏れが出る
いちいち開発者コンソールを開くのも面倒な場合は以下のTampermonkeyスクリプトをインストールする
右上にdislikeボタンが出るので押せば文字が変化していく
直接インストールはこちらから
// ==UserScript==
// @name Youtube music dislike
// @namespace http://tampermonkey.net/
// @version 2024-01-04
// @description Youtube Musicでまとめてdislike
// @author You
// @match https://music.youtube.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com
// @grant none
// ==/UserScript==
(function() {
'use strict';
var newButton = document.createElement('button');
newButton.textContent = 'まとめてdislike';
newButton.addEventListener('click', function() {
document.querySelectorAll('yt-button-shape#button-shape-dislike button[aria-pressed="false"]').forEach((button, index) => {
setTimeout(() => {
button.click();
newButton.textContent = 'まとめてdislike#' + (index+1);
console.log(index);
}, 1500 * index);
});
});
var targetElement = document.querySelector('.ytmusic-nav-bar .settings-button');
targetElement.parentNode.insertBefore(newButton, targetElement.nextSibling);
})();
全曲dislikeしても新曲が出たらまた自動再生に入ってしまうリスクはあるが、まあ仕方ない。後はSpotifyに移行するくらいしか選択肢がないが、ローカルの曲をアップロードできないので厳しい
もうちょっと自動再生の候補まともにしてくれませんかね・・・