Greasy Fork

Greasy Fork is available in English.

[bilibili]稍后再看导出为.url

将B站的稍后再看列表导出为.url文件

当前为 2020-03-22 提交的版本,查看 最新版本

// ==UserScript==
// @name         [bilibili]稍后再看导出为.url
// @namespace    wdssmq.com
// @version      0.1
// @description  将B站的稍后再看列表导出为.url文件
// @author       沉冰浮水
// @url
// @include      https://www.bilibili.com/watchlater/*
// @include      https://www.bilibili.com/video/av*
// @include      https://www.bilibili.com/bangumi/play/ep*
// @include      https://manga.bilibili.com/account-center*
// @icon 		 https://www.bilibili.com/favicon.ico
// @run-at       document-end
// @grant        GM_setClipboard

// ==/UserScript==
/* jshint esversion:6 */
(function() {
  "use strict";
  const $ = unsafeWindow.jQuery;
  //const pic = unsafeWindow.__INITIAL_STATE__.videoData.pic;
  //if (pic){
  //console.log(pic);
  //}
  function $n(e) {
    return document.querySelector(e);
  }
  function $na(e) {
    return document.querySelectorAll(e);
  }
  function fnCopy(eTrig, vSoF,eList) {
    if (!$n(eTrig)) {
      return;
    }
    $n(eTrig).addEventListener("click", function(e) {
      let content = typeof vSoF === "function" ? vSoF($na(eList)) : vSoF;
      console.log(content);
      GM_setClipboard(content);
      this.style.color = "gray";
    });
  }
  function fnMKShell($list) {
    const today = new Date(); //获得当前日期
    const year = today.getFullYear(); //获得年份
    const month = today.getMonth() + 1; //此方法获得的月份是从0---11,所以要加1才是当前月份
    const day = today.getDate(); //获得当前日期
    const arrDate = [year, month, day];
    let strRlt =
        'if [ ! -d "bilibililater-foldername" ]; then\n' +
        "mkdir bilibililater-foldername\n" +
        "fi\n" +
        "cd bilibililater-foldername\n";
    strRlt = strRlt.replace(/foldername/g, arrDate.join("-"));
    $list.forEach(function(e) {
      //       alert(1);
      console.log(e);
      let strTitle = e.textContent.replace(/\\|\/|:|\*|!|\?]|<|>/g, "");
      let strUrl = e.href;
      if (strUrl) {
        strUrl = strUrl.replace(/watchlater\/#/g, "video");
        strUrl = strUrl.replace(/\/p1/g, "");
      } else {
        console.log(strTitle);
        return;
      }

      strRlt += 'echo [InternetShortcut] > "' + strTitle + '.url"\n';
      strRlt += 'echo "URL=' + strUrl + '" >> "' + strTitle + '.url"\n';
    });
    strRlt += "exit\n\n";
    strRlt = strRlt.replace(/\/\/\//g, "//www.bilibili.com/");
    //console.log(strRlt);
    return strRlt;
    //$("body").innerHTML = strRlt.replace(/\n/g, "<br/>");
  }
  (function() {
    if (/#\/list|#\/video/g.test(location.href)) {
      fnCopy("span.t", fnMKShell,".cube-list li a.title,.av-about .t");
      return false;
    }
  })();
  (function() {
    if (location.hash === "#/my-favourite") {
      let f = 0;
      document.addEventListener(
        "mouseover",
        function(e) {
          if (f) {
            return false;
          }
          let $magList = $na("div.text-info-section a:first-child");
          console.log($magList);
          if ($magList.length) {
            f = 1;
            fnCopy("h1.page-title", fnMKShell,"div.text-info-section a:first-child");
          }
        },
        false
      );

      return false;
    }
  })();

  (function() {
    // watchlater
    if (location.href.indexOf("watchlater/#/av") > -1) {
      location.href = location.href
        .replace("watchlater/#", "video")
        .replace("/p", "?p=");
      return false;
    }
  })();

  // 时间轴书签
  function fnGenUrl(url) {
    let more = 0;
    if ($n(".watched.on")){
      url = $n(".watched.on a").href;
      more =1;
    }
    if ($n(".bilibili-player-video-time-now")) {
      let strQurey = document.location.search;
      let matchRlt = strQurey.match(/t=(\d+)/);
      //console.log(matchRlt);
      let oldTime = matchRlt && matchRlt[1] ? matchRlt[1] : 0;
      if (more){
        url = url + "&";
      } else {
        url = url.split("?")[0] + "?";
      }
      let arrTime = $n(".bilibili-player-video-time-now").innerText.split(":");
      let t = parseInt(arrTime[0]) * 60 + parseInt(arrTime[1]) - 7;
      // console.log(oldTime,t);
      if (t - oldTime <= 73) {
        return url;
      }
      let title = $n("h1.video-title").title;
      let nURL = `${url}?t=${t}`;
      $n("title").innerHTML = `${title}_${t}_bilibili`;
      //$n("h1.video-title").innerHTML = `<a href="${nURL}" title="${t}">${title}_${t}</a>`;
      window.history.pushState(null, null, `${url}t=${t}`);
      return url;
    }
    return url;
  }
  let url = document.location.href.replace("?tdsourcetag=s_pctim_aiomsg", "");
  console.log(url);
  document.addEventListener(
    "mouseover",
    function(e) {
      //console.log(
      //e.target,
      //e.target.nodeName,
      //e.target.className || "class为空"
      //);
      // 实际代码
      if (e.target.nodeName === "VIDEO") {
        url = fnGenUrl(url);
      }
    },
    false
  );
})();