2017年3月29日水曜日

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

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

ブックマークレット

以下のリンクをブックマークに登録して、連続動画再生ビューアのページで普通のブックマークと同じようにクリックすれば、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;

jQuery(document).ready(function() {
    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 ((checked && expired) || (!checked && !expired)) {
                item.click();
            }
        });
        // setTimeout(function() {
        //     document.querySelector(".md-3snewsiPlayButton .ls-playSelected").click();
        // }, 0);
    }, 3000);
});

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

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

なお、jQueryを使用しているのは連続動画再生ビューアと実行タイミングを合わせるため。連続動画再生ビューアがready()で初期化していて、そのあとで選択するためユーザースクリプトでも使用する必要があった。