豆瓣电影分级

很喜欢IMDB APP上家长指导这个功能,下电影前可以参考一下,是否适合在投影上和家人一起看,所以给豆瓣做了这个扩展,请注意你所在的地区是否能正常访问imdb。

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         豆瓣电影分级
// @namespace    http://tampermonkey.net/
// @version      3.1
// @description  很喜欢IMDB APP上家长指导这个功能,下电影前可以参考一下,是否适合在投影上和家人一起看,所以给豆瓣做了这个扩展,请注意你所在的地区是否能正常访问imdb。
// @author       BigKnife
// @icon         https://img3.doubanio.com/favicon.ico
// @match        *://movie.douban.com/subject/*
// @grant        GM_xmlhttpRequest
// @connect      www.imdb.com
// ==/UserScript==

(function () {
    'use strict';

    // Your code here...
    //https://www.imdb.com/title/tt123456/parentalguide

    var gimdbid;
    unsafeWindow.gDoc = "";

    unsafeWindow.getPG = function () {
        let imdbel = [...document.querySelectorAll('span')].find(s => s.innerText == 'IMDb:').nextSibling;
        let imdbid = imdbel.textContent.trim();
        gimdbid = imdbid;
        let info = document.querySelector('#info');
        info.insertAdjacentHTML('beforeend', '<div id="pginfo"></div>');
        info.insertAdjacentHTML('beforeend', '<div id="infodetail"></div>');
        let ss = "https://www.imdb.com/title/" + imdbid + "/parentalguide";
        GM_xmlhttpRequest({
            method: "GET",
            url: ss,
            onloadstart: function () {
                console.log("正在获取" + imdbid);
                document.querySelector("#gpg").innerText = "正在获取";
            },
            onload: function (response) {
                getPGHandleV2(response.responseText);
            }
        })
    }

    unsafeWindow.getField = function (doc, mark) {
        let tmp = doc.querySelector('div[data-testid="sub-section-' + mark + '"]');
        if (tmp == null) {
            return "";
        } else {
            let s = tmp.previousElementSibling.firstChild.innerText;
            s = s.replace("None", "无");
            s = s.replace("Mild", "轻微");
            s = s.replace("Moderate", "中等");
            s = s.replace("Severe", "严重");
            let c;
            if (s == "无") { c = "#d0d0d0" };
            if (s == "轻微") { c = "#c5e197" };
            if (s == "中等") { c = "#fbca8c" };
            if (s == "严重") { c = "#ffb3ad" };
            return '<span style="border-radius:2px;padding:3px 6px;background-color:' + c + '">' + s + '</span>';
        }
    }

    unsafeWindow.getDetailNum = function (doc, mark) {
        let tmp = doc.querySelector('div[data-testid="sub-section-' + mark + '"]');
        if (tmp == null) {
            return 0;
        } else {
            return tmp.querySelectorAll('div[data-testid="item-id"]').length + "条评论";
        }
    }

    unsafeWindow.detailHide = function () {
        let detail = document.querySelector('#infodetail');
        if (detail != null) {
            detail.innerHTML = "";
        }
    }

    unsafeWindow.getDetail = function (mark) {
        let tmp = gDoc.querySelector('div[data-testid="sub-section-' + mark + '"]');
        if (tmp == null) {
            return 0;
        } else {
            let detail = document.querySelector('#infodetail');
            let posts = tmp.querySelectorAll('div[data-testid="item-id"]');
            let s = "";
            for (var i = 0; i < posts.length; i++) {
                s += (i + 1) + "." + posts[i].textContent + "<br>";
            }
            s = s.replaceAll("Edit", "");
            s = "<a style='float:right' href='javascript:detailHide();'>收起</a><br>" + s;
            detail.innerHTML = s;
        }
    }

    unsafeWindow.getPGHandleV2 = function (html) {
        console.log("OK");
        document.querySelector("#gpg").innerText = "查看分级";
        let parser = new DOMParser();
        let doc = parser.parseFromString(html, "text/html");
        gDoc = doc;
        let nudity = getField(doc, "nudity") + "<a href='javascript:getDetail(\"nudity\");'>(" + getDetailNum(doc, "nudity") + ")</a>";
        let violence = getField(doc, "violence") + "<a href='javascript:getDetail(\"violence\");'>(" + getDetailNum(doc, "violence") + ")</a>";
        let profanity = getField(doc, "profanity") + "<a href='javascript:getDetail(\"profanity\");'>(" + getDetailNum(doc, "profanity") + ")</a>";
        let alcohol = getField(doc, "alcohol") + "<a href='javascript:getDetail(\"alcohol\");'>(" + getDetailNum(doc, "alcohol") + ")</a>";
        let fright = getField(doc, "frightening") + "<a href='javascript:getDetail(\"frightening\");'>(" + getDetailNum(doc, "frightening") + ")</a>";
        let pgstr = "性爱和裸体:" + nudity + "<br>暴力和血腥:" + violence + "<br>粗言俗语:" + profanity + "<br>酒精毒品和烟草:" + alcohol + "<br>恐怖和紧张场景:" + fright;
        let info = document.querySelector('#pginfo');
        info.innerHTML = pgstr;
    }

    let imdbel = [...document.querySelectorAll('span')].find(s => s.innerText == 'IMDb:');
    let imdbtext = [...document.querySelectorAll('#info > span.pl')].find(s => s.innerText == 'IMDb:').nextSibling;
    let tt = imdbtext.textContent.trim();
    let a = document.createElement('a');
    a.href = 'https://www.imdb.com/title/' + tt;
    a.target = '_blank';
    a.appendChild(document.createTextNode(tt));
    imdbtext.replaceWith(a);
    imdbel.nextSibling.nextSibling.insertAdjacentHTML('beforebegin', '<a id="gpg" href="javascript:getPG();" class="lnk-sharing" style="margin-right: 5px;">查看分级</a>');
})();