ニコニコ動画のマイリストの総再生時間を算出するブックマークレットを作った

自分用に。シロウトのツギハギなのでよくないコードだと思いますが、動くので使っています。

var time = document.getElementsByClassName('NC-VideoLength');
var arr = [];
var min = sec = 0;

for (const elem of time) {
    arr.push(elem.innerHTML.split(':'));
}

min = arr.map(x => x[0]).map(str => parseInt(str, 10)).reduce((acc, value) => acc + value);
sec = arr.map(x => x[1]).map(str => parseInt(str, 10)).reduce((acc, value) => acc + value);

min = min + Math.floor(sec / 60);
sec = sec % 60;

alert('Total - ' + min + 'm ' + sec + 's');

使い方

  • マイリストのページを開く。
  • 上のコードをブラウザのコンソールで実行する。
  • あるいは下の変換したコードをブックマークに登録して押す。こっちの方が便利。
javascript:var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};$jscomp.arrayIterator=function(a){return{next:$jscomp.arrayIteratorImpl(a)}};$jscomp.makeIterator=function(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):$jscomp.arrayIterator(a)}; for(var time=document.getElementsByClassName("NC-VideoLength"),arr=[],min=sec=0,$jscomp$iter$0=$jscomp.makeIterator(time),$jscomp$key$elem=$jscomp$iter$0.next();!$jscomp$key$elem.done;$jscomp$key$elem=$jscomp$iter$0.next()){var elem=$jscomp$key$elem.value;arr.push(elem.innerHTML.split(":"))}min=arr.map(function(a){return a[0]}).map(function(a){return parseInt(a,10)}).reduce(function(a,b){return a+b}); sec=arr.map(function(a){return a[1]}).map(function(a){return parseInt(a,10)}).reduce(function(a,b){return a+b});min+=Math.floor(sec/60);sec%=60;alert("Total - "+min+"m "+sec+"s");

f:id:banfuture:20210923041935p:plain

こうなっていたら成功。Vivaldi, Firefoxでは動きました。検証が甘いので目安程度に。そもそも使えなかったら教えて下さい。