youtube_watchtime Fork

  • // ==UserScript==
    // @title        youtube_watchtime
    // @name         youtube_watchtime
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  try to take over the world!
    // @author       You
    // @match        https://www.youtube.com/watch?v=*
    // @match        https://www.youtube.com/feed/history
    // @grant        none
    // ==/UserScript==
    var result = document.evaluate('//video', document, null, 7, null);
    var u_list = "";
    //パラメータ削除用関数
    function para_del(str) {
      var s_url = str + "&";
      var array_url = s_url.split("&");
      s_url = array_url[0];
      return s_url;
    }
    // UNIX時間を取得する
    function u_time() {
      var date_obj = new Date();
      var unix_time = Math.floor(date_obj.getTime() / 1000);
      return unix_time;
    }
    //24時間以上経過していたらアラート
    /*if ("v_play_first_time" in localStorage) {
    var tmp=localStorage.getItem("v_play_first_time");
    var d_time=Number(tmp);
    var un_time=u_time();
    if(un_time-d_time>24*60*60)
    {
        alert("最初に動画を見てから24時間以上が経過しています。\nこれまで見た動画を確認する場合は、履歴ページの検索バーにcheck\n設定したキーを削除する場合は検索バーにremoveと入力してください");
    }
    }*/
    //動画の上にある検索バーで入力文字の変更を感知してフォーカスアウト後作動
    var result2 = document.evaluate('//input[@id="search"]', document, null, 7, null);
    result2.snapshotItem(0).addEventListener('change', function () {
      //watch?v=にてset入力でキー設定
      if (result2.snapshotItem(0).value == "set") {
        alert("ローカルストレージに設定用のキーを保存します");
        var d_url = location.href;
        var s_url = para_del(d_url);
        if (window.confirm("現在の動画のURLは" + s_url + "ですか?\nアドレスバーのURLと異なる場合はキャンセルを押してください")) {
          var un_time = u_time();
          localStorage.setItem(s_url, un_time);
          alert("設定しました。\n履歴ページ移動後check入力前にリロードをお勧めします");
        } else {
          alert("再読み込みを行います。\nお手数ですが読み込み終了後、もう一度setと入力してください");
          location.reload();
        }
        //feed/historyにてcheck入力でアラート
      } else if (result2.snapshotItem(0).value == "check") {
        var result3 = document.evaluate('//*[@is-history]//a[@id="video-title"]', document, null, 7, null);
        for (var i = 0; i < result3.snapshotLength; i++) {
          var n_url = result3.snapshotItem(i).href;
          var nr_url = para_del(n_url);
          if (nr_url in localStorage) {
            var tmp = localStorage.getItem(nr_url);
            var f_time = Number(tmp);
            var uni_time = u_time();
            var d_time = uni_time - f_time;
            //console.log(i+1);
            if (d_time < 60) {
              alert("これまでに見た動画の数は" + (i + 1) + "本です。\n最初に動画を見てから" + d_time + "秒が経過しています");
            } else if (d_time == 60 || d_time < 60 * 60) {
              alert("これまでに見た動画の数は" + (i + 1) + "本です。\n最初に動画を見てから" + Math.floor((d_time / 60)) + "分" + (d_time - (Math.floor((d_time / 60)) * 60)) + "秒が経過しています");
            } else {
              alert("これまでに見た動画は" + (i + 1) + "本です。\n最初に動画を見てから" + Math.floor(Math.floor((d_time / 60)) / 60) + "時間" + Math.floor(Math.floor((d_time / 60)) - (Math.floor(Math.floor((d_time / 60)) / 60) * 60)) + "分が経過しています");
            }
            break;
          }
        }
      }
      /*else if(result2.snapshotItem(0).value == "remove") {
            localStorage.removeItem('v_play_first_url');
            localStorage.removeItem('v_play_first_time');
            alert("削除しました");
        }*/
    //feed/historyにてcopy入力でurlコピー用プロンプトを出す
      else if (result2.snapshotItem(0).value == "copy") {
        result3 = document.evaluate('//*[@is-history]//a[@id="video-title"]', document, null, 7, null);
        for (i = 0; i < result3.snapshotLength; i++) {
          n_url = result3.snapshotItem(i).href;
          nr_url = para_del(n_url);
          if (nr_url in localStorage) {
            var loop = i + 1;
            break;
          }
        }
        for (i = 0; i < loop; i++) {
          n_url = result.snapshotItem(i).href;
          nr_url = para_del(n_url);
          u_list = u_list + " " + nr_url;
          var sign = window.prompt("url_list", u_list);
        }
      }
    });
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2018/10/30 11:41:51 - 10/30