豆瓣B站网址本地笔记备份(Douban Bilibili URL backup)

网址信息本地笔记备份小助手(B站,豆瓣),备份B站的视频链接信息,豆瓣的网址条目(电影,音乐,书籍,游戏等)信息等, 以防忘掉或被和谐或被豆瓣吞标记

// ==UserScript==
// @name         豆瓣B站网址本地笔记备份(Douban Bilibili URL backup)
// @namespace    http://tampermonkey.net/
// @version      0.12
// @description  网址信息本地笔记备份小助手(B站,豆瓣),备份B站的视频链接信息,豆瓣的网址条目(电影,音乐,书籍,游戏等)信息等, 以防忘掉或被和谐或被豆瓣吞标记
// @author       Lepturus
// @match        *://*.douban.com/*
// @match        *://*.bilibili.com/video/*
// @icon         https://img1.doubanio.com/favicon.ico
// @icon         https://www.bilibili.com/favicon.ico
// @grant        none
// @license MIT
// ==/UserScript==

(function () {
    'use strict';

    function copy(e, isHTML = true) {
        let obj = document.createElement('input');
        document.body.appendChild(obj);
        obj.value = isHTML ? e.innerText : e.innerHTML;
        obj.select();
        document.execCommand('copy', false);
        obj.remove();
    }

    function Douban() {
        let douban_title = document.querySelector('h1').textContent;
        let douban_infos = document.querySelector('#info') || document.querySelector('.item-subject-info');
        let dratings = document.querySelector('.rating_self');
        let dimdb = document.evaluate("//div[@id='info']//span[contains(., 'IMDb')]", document).iterateNext() // <span class="pl">IMDb:</span>

        if(dimdb != null){
            if (!dimdb.nextSibling.textContent.match("→")) {
                let imdb_link = `https://www.imdb.com/title/${dimdb.nextSibling.textContent.trim()}/`;
                // dimdb.nextSibling.replaceWith(`<a href="${imdb_link}" target="_blank">→${dimdb.nextSibling.textContent}</a>`); NOT PARSED
                const imdb_a = document.createElement("a");
                imdb_a.setAttribute("href", imdb_link);
                imdb_a.setAttribute("target", "_blank");
                imdb_a.innerHTML = `→${dimdb.nextSibling.textContent}`
          dimdb.nextSibling.replaceWith(imdb_a);
             }
        }

        let txt="";
        if (douban_infos) {
            let douban_url = document.createElement("span");
            let douban_rating = document.createElement("span");
            let searchp = document.createElement("div");
            function searche(title,query,text=title,query2=""){
                let search_urle = document.createElement("a");
                let search_url = query + title+query2;
                search_urle.setAttribute("href", search_url);
                search_urle.innerHTML = text;
                search_urle.setAttribute("target", "_blank");
                return search_urle
            }

            let url_parse = new URL(window.location.href);
            douban_url.innerHTML = '豆瓣链接:' + url_parse.protocol + "//" + url_parse.hostname  + url_parse.pathname + '</br>' ;
            if (/music\.douban/.test(document.URL)) {
                douban_rating.innerHTML = '豆瓣评分:' + dratings.querySelector('.rating_num').innerText + '(' + dratings.querySelector('.rating_sum').innerText+ ')</br>' + '试听链接:' ;
                searchp.appendChild(searche(douban_title,"https://music.163.com/#/search/m/?s=","网易云搜索|","&type=10"));
                searchp.appendChild(searche(douban_title,"https://y.qq.com/n/ryqq/search?w=","QQ音乐搜索|","&t=album"));
                searchp.appendChild(searche(douban_title,"https://open.spotify.com/search/","Spotify搜索","/albums"));

            }else if (/\/game\//.test(document.URL)){
                douban_rating.innerHTML = '豆瓣评分:' + dratings.querySelector('.rating_num').innerText + '(' + dratings.querySelector('.rating_sum').innerText+ ')</br>' + '游戏链接:' ;
                searchp.appendChild(searche(douban_title,"https://www.taptap.cn/search/","Taptap搜索|"));
                searchp.appendChild(searche(douban_title,"https://store.steampowered.com/search/?term=","STEAM搜索|"));
                searchp.appendChild(searche(douban_title," https://indienova.com/search/novas/","Indienova搜索"));
            }
            else{
                douban_rating.innerHTML = '豆瓣评分:' + dratings.querySelector('.rating_num').innerText + '(' + dratings.querySelector('.rating_sum').innerText+ ')</br>';
            }
            searchp.appendChild(document.createElement("br"));
            searchp.appendChild(searche(douban_title,"https://www.baidu.com/s?ie=UTF-8&wd=","百度搜索|"));
            searchp.appendChild(searche(douban_title,"https://www.google.com.hk/search?q=","谷歌搜索|"));
            searchp.appendChild(searche(douban_title,"https://search.bilibili.com/all?keyword=","B站搜索|"));
            searchp.appendChild(searche(douban_title,"https://www.youtube.com/results?search_query=","Youtube搜索"));
            if (!douban_infos.textContent.match("豆瓣链接")) {
                douban_infos.appendChild(douban_url);
                douban_infos.appendChild(douban_rating);
                douban_infos.appendChild(searchp);
            }
        }

    }

    function Bilibili() {
        let b_title = document.querySelector('h1');
        let b_infos = document.querySelector('.tag-panel');
        let b_up = document.querySelector('.up-detail-top');

        document.getElementsByTagName("img").forEach((ele) => { ele.src = ele.src.replace(/@.*\.avif/g,"")}); //replace avif extension

        if (b_infos) {
            let bilibili_url = document.createElement("div");
            // bilibili_url.setAttribute("class", "video-info-detail-list");
            let bilibili_title = document.createElement("div");
            bilibili_url.classList.add("copyTEXT");
            bilibili_title.classList.add("copyTEXT");

            bilibili_title.innerHTML = ''+b_title.textContent
            let bilibili_up = b_up.querySelector('a')
            let url_parse = new URL(window.location.href);
            let bilibili_date;
            if (document.querySelector('.pubdate-text')){
            bilibili_date = document.querySelector('.pubdate-text').innerHTML.trim();}
            else{bilibili_date = document.querySelector('.pubdate-ip-text').innerHTML.trim().split(' ')[0];}
            console.log(bilibili_date);
            let dt = new Date(bilibili_date);
            bilibili_date = dt.getFullYear() + "." + (dt.getMonth()+1);
            bilibili_url.innerHTML = 'Bilibili链接:' + url_parse.protocol + "//" + url_parse.hostname+ url_parse.pathname + "   BY:" + bilibili_up.outerHTML + "   " + bilibili_date;

            let kws = document.getElementsByClassName("copyTEXT");
                for (let i = 0; i < kws.length; i++) {
                    kws[i].onclick = function () {
                        let kkws = kws[i].innerHTML;
                        copy(kws[i]);
                        kws[i].innerHTML = "Copied";
                window.setTimeout(function () {
                    kws[i].innerHTML = kkws;
                }, 1500)
                    }
                }

            if (!b_infos.lastElementChild.classList.contains('copyTEXT')) {
                b_infos.appendChild(document.createElement("br"));
                b_infos.appendChild(document.createElement("br"));
                b_infos.appendChild(bilibili_title);
                b_infos.appendChild(bilibili_url);
            }
        }

    }
    if (/douban/.test(document.URL)) {
        setInterval(Douban, 1500);
    }
    if (/bilibili/.test(document.URL)) {
        let lastUrl = window.location.href; // last URL as Bli collection URL changes
        setInterval(function(){ let currentUrl = window.location.href; // current URL
                               Bilibili();
                               if(currentUrl !== lastUrl){
                                   for (let i = 0; i < 4; i++) {
                                   document.querySelector('.tag-panel').lastElementChild.remove();
                                   }
                                   lastUrl = currentUrl; }
                              },
                    1500);

    }
})();