2017年3月29日水曜日

TBS News iの連続動画再生で新しいニュースのみ選択するブックマークレットとユーザースクリプト

News iの連続動画再生ビューアに何ヶ月も前のニュースが混じっていたりして、毎回新しい動画を選択するのが辛いので、ユーザースクリプトとついでにブックマークレットを書いた。テストはFirefox 52 ESRとGreasemonkeyで行ってある。

(2017/12/11 追記)スクリプトが複数回実行された時に正しく選択されないバグを修正。

ブックマークレット

以下のリンクをブックマークに登録して、連続動画再生ビューアのページで普通のブックマークと同じようにクリックすれば、12時間以内のニュースが選択されるはず。

(2017/3/29 追記)属性値のダブルクォートをエスケープし忘れていたのを修正した。

もっと新しいニュースのみ選択したい場合、例えば6時間以内なら、ブックマークのアドレス部分の末尾を(12)から(6)に変更すればいい。

ユーザースクリプト

// ==UserScript==
// @name        news i selector
// @include     http://news.tbs.co.jp/3snewsi/*
// @grant       none
// ==/UserScript==

var HOURS = 12;

setTimeout(function() {
    var expiredAt = Date.now() / 1000 - HOURS * 60 * 60;
    Array.prototype.forEach.call(document.querySelectorAll(".ls-checkItem"), function(item) {
        var checked = item.querySelector("input[type='checkbox']").checked;
        var time = parseInt(item.querySelector(".gs-metaData>span").getAttribute("data-time"), 10);
        var expired = (time < expiredAt);
        if (checked) {
            item.click();
        }
        if (!expired) {
            item.click();
        }
    });
    // setTimeout(function() {
    //     document.querySelector(".md-3snewsiPlayButton .ls-playSelected").click();
    // }, 0);
}, 3000);

(2017/9/20 追記)最近のアップデートで選択のタイミングが合わなくなってしまったので、setTimeoutを使って遅らせるように修正した。

(2017/12/14 追記)GreasemonkeyがWebExtensionになったことで動かなくなったのを修正。。

最後のコメントアウトをはずすと再生も自動でされる。しかし、連続動画再生ビューアはどういうわけか勝手にリロードすることがあり、その場合、また最初の動画から再生されてしまうので使い勝手は良くない。