// ==UserScript== // @name douban-info-for-pt // @namespace https://github.com/techmovie/DouBan-Info-for-PT // @version 1.7.6 // @description 在PT站电影详情页展示部分中文信息 // @author birdplane // @require https://s4.zstatic.net/ajax/libs/jquery/1.7.1/jquery.min.js // @match *://passthepopcorn.me/torrents.php?id=* // @match *://passthepopcorn.me/requests.php?action=view&id=* // @match *://anthelion.me/torrents.php?id=* // @match *://anthelion.me/requests.php?action=view&id=* // @match *://beyond-hd.me/torrents/* // @match *://beyond-hd.me/library/title/* // @match *://blutopia.xyz/torrents/* // @match *://asiancinema.me/torrents/* // @match *://hdbits.org/details.php?id=* // @match *://hdbits.org/requests/show_request?id=* // @match *://uhdbits.org/torrents.php?id=* // @match *://filelist.io/details.php?id=* // @match *://hd-torrents.org/details.php?id=* // @match *://karagarga.in/details.php?id=* // @match *://privatehd.to/torrent/* // @match *://broadcasthe.net/series.php?id=* // @match *://iptorrents.com/torrent.php?id=* // @match *://www.iptorrents.com/torrent.php?id=* // @match *://www.torrentleech.org/torrent/* // @match *://avistaz.to/torrent/* // @match *://secret-cinema.pw/torrents.php?id=* // @match *://aither.cc/torrents/* // @match *://shadowthein.net/details.php?id=* // @match *://shadowthein.net/details.php?id=* // @match *://baconbits.org/torrents.php?id=* // @match *://broadcity.in/details.php?id=* // @match *://www.morethantv.me/torrents.php?id=* // @match *://www.morethantv.me/show/* // @match *://tgx.rs/torrent/* // @grant GM_addStyle // @grant GM_xmlhttpRequest // @grant GM_openInTab // @grant GM_getValue // @grant GM_setValue // @license MIT // @downloadURL none // ==/UserScript== (() => { var __assign = Object.assign; // src/config.json var PT_SITE = { "aither.cc": { url: "https://aither.cc", host: "aither.cc", siteName: "Aither", poster: "#meta-poster", imdb: '.badge-user a[href*="imdb.com/title"]:nth-child(1)', insertDomSelector: ".torrent-buttons", doubanContainerDom: '
' }, "anthelion.me": { url: "https://anthelion.me", host: "anthelion.me", siteName: "ANT", siteType: "gazelle", imdb: { request: '.layout a[href*="imdb.com/title"]:first', torrent: '.torrent_ratings a[href*="imdb.com/title"]:first' } }, "asiancinema.me": { url: "https://asiancinema.me", host: "asiancinema.me", siteName: "ACM", poster: "img.movie-poster", imdb: '.badge-user a[href*="imdb.com/title"]:nth-child(1)', insertDomSelector: "#vue", doubanContainerDom: '
' }, "avistaz.to": { url: "https://avistaz.to", host: "avistaz.to", siteName: "AvistaZ", imdb: '.movie-details .badge-extra a[href*="imdb.com/title"]:first', titleDom: ".title .torrent-filename", poster: ".movie-poster img", insertDomSelector: ".movie-poster", doubanContainerDom: '
' }, "baconbits.org": { url: "https://baconbits.org", host: "baconbits.org", siteName: "bB", imdb: '.box .body a[href*="imdb.com/title"]:first', insertDomSelector: ".linkbox:first", titleDom: "h1:first", doubanContainerDom: '
' }, "beyond-hd.me": { url: "https://beyond-hd.me", host: "beyond-hd.me", siteName: "BHD", imdb: '.movie-details a[href*="imdb.com/title"]:nth-child(1)', insertDomSelector: ".movie-wrapper", doubanContainerDom: '
' }, "blutopia.xyz": { url: "https://blutopia.xyz", host: "blutopia.xyz", siteName: "BLU", poster: "#meta-poster", imdb: '.badge-user a[href*="imdb.com/title"]:nth-child(1)', insertDomSelector: ".torrent-buttons", doubanContainerDom: '
' }, "broadcasthe.net": { url: "https://broadcasthe.net", host: "broadcasthe.net", siteName: "BTN", imdb: '.stats td a[href*="imdb.com/title"]', insertDomSelector: "#content .linkbox", poster: ".sidebar .box img:first", doubanContainerDom: '
' }, "broadcity.in": { url: "https://broadcity.in", host: "broadcity.in", siteName: "Bdc", imdb: '#imdbdetails a[href*="imdb.com/title"]', titleDom: "#details>table>tbody>tr:first", insertDomSelector: "#imdbdetails", poster: "#ts_show_preview img", doubanContainerDom: '
' }, "filelist.io": { url: "https://filelist.io", host: "filelist.io", siteName: "FL", imdb: '.cblock-innercontent div a[href*="imdb.com/title"]:first', poster: 'img[width="300px"][src*="image.tmdb.org"]', titleDom: ".cblock-header h4", insertDomSelector: ".cblock-innercontent hr.separator:first", doubanContainerDom: '
' }, "hd-torrents.org": { url: "https://hd-torrents.org", host: "hd-torrents.org", siteName: "HDT", poster: "#IMDBDetailsInfoHideShowTR .imdbnew a img", imdb: '.imdbnew2 a[href*="imdb.com/title"]:first', insertDomSelector: "td.detailsleft:contains(IMDb)", doubanContainerDom: '\u8C46\u74E3' }, "hdbits.org": { url: "https://hdbits.org", host: "hdbits.org", siteName: "HDB", imdb: { movie: ".contentlayout h1 a", tv: "#details .showlinks li:nth-child(2) a", tvRequest: ".lottery_table2 .showlinks li:nth-child(2) a" }, titleDom: "h1:first", insertDomSelector: "#details>tbody>tr:nth-child(2),.lottery_table2>tbody>tr:nth-child(1)", doubanContainerDom: '
- \u8C46\u74E3\u4FE1\u606F
' }, "iptorrents.com": { url: "https://iptorrents.com", host: "iptorrents.com", siteName: "IPT", imdb: '.main td a[href*="imdb.com/title"]', titleDom: ".dBox h1", insertDomSelector: ".dBox .info", doubanContainerDom: '
' }, "karagarga.in": { url: "https://karagarga.in", host: "karagarga.in", siteName: "KG", imdb: 'td a[href*="imdb.com/title"]:first', insertDomSelector: ".outer h1~table:first", doubanContainerDom: '
' }, "passthepopcorn.me": { url: "https://passthepopcorn.me", host: "passthepopcorn.me", siteName: "PTP", siteType: "gazelle", imdb: { request: '#request-table a[href*="imdb.com/title"]:first', torrent: "#imdb-title-link" } }, "privatehd.to": { url: "https://privatehd.to", host: "privatehd.to", siteName: "PHD", imdb: '.movie-details .badge-extra a[href*="imdb.com/title"]:first', titleDom: ".title .torrent-filename", poster: ".movie-poster img", insertDomSelector: ".movie-poster", doubanContainerDom: '
' }, "secret-cinema.pw": { url: "https://secret-cinema.pw", host: "secret-cinema.pw", siteName: "SC", imdb: '.torrent_row a[href*="imdb.com/title"]:first', insertDomSelector: ".linkbox:first", doubanContainerDom: '
' }, "shadowthein.net": { url: "http://shadowthein.net", host: "shadowthein.net", siteName: "iTS", imdb: '.IMDBtable a[href*="imdb.com/title"]:first', insertDomSelector: "h1+table.line", titleDom: "h1:first", doubanContainerDom: '
' }, "tgx.rs": { url: "https://tgx.rs", host: "tgx.rs", siteName: "TorrentGalaxy", poster: "#covercell img", imdb: '#imdbpage[href*="imdb.com/title"]', titleDom: ".torrentpagetable.limitwidth:first a.textshadow", insertDomSelector: ".buttonbox", doubanContainerDom: '
' }, "uhdbits.org": { url: "https://uhdbits.org", host: "uhdbits.org", siteName: "UHD", imdb: ".tooltip.imdb_icon", poster: ".poster_box .imgbox img", insertDomSelector: "div.head:contains(IMDB)", doubanContainerDom: '
\u2191 \u8C46\u74E3
' }, "www.morethantv.me": { url: "www.morethantv.me", host: "morethantv.me", siteName: "MTV", imdb: '.metalinks a[href*="imdb.com/title"]', insertDomSelector: "#content>.thin>div:first", poster: ".sidebar img:first", titleDom: ".details h2:first", doubanContainerDom: '
' }, "www.torrentleech.org": { url: "https://www.torrentleech.org", host: "torrentleech.org", siteName: "IPT", imdb: '.imdb-info a[href*="imdb.com/title"]', titleDom: "#torrentnameid", poster: ".imdb_cover img", insertDomSelector: ".torrent-info .torrent-info-details", doubanContainerDom: '
' } }; // src/const.js var host = location.host; var _a, _b; var siteInfo = (_b = (_a = PT_SITE) == null ? void 0 : _a[host]) != null ? _b : ""; var _a2, _b2; if (host && host.match(/iptorrents/i)) { siteInfo = PT_SITE["iptorrents.com"]; } else { siteInfo = (_b2 = (_a2 = PT_SITE) == null ? void 0 : _a2[host]) != null ? _b2 : ""; } var CURRENT_SITE_INFO = siteInfo; var _a3; var CURRENT_SITE_NAME = (_a3 = CURRENT_SITE_INFO == null ? void 0 : CURRENT_SITE_INFO.siteName) != null ? _a3 : ""; var DOUBAN_SUBJECT_URL = "https://movie.douban.com/subject/{doubanId}"; var DOUBAN_API_URL = "https://api.douban.com/v2/movie"; var PIC_URLS = { border: "https://ptpimg.me/zz4632.png", icon2x: "https://ptpimg.me/n74cjc.png", icon: "https://ptpimg.me/yze1gz.png", line: "https://ptpimg.me/e11hb1.png" }; // src/common.js var addToPtpPage = (data) => { console.log(data); $(".page__title").prepend(`[${data.chineseTitle}] `); if (data.summary) { const synopsisDom = `
\u4E2D\u6587\u7B80\u4ECB
${data.summary}
`; $("#synopsis-and-trailer,#request-table").after(synopsisDom); } $("#movieinfo").before(`
\u7535\u5F71\u4FE1\u606F
\u5BFC\u6F14: ${data.director}
\u7C7B\u578B: ${data.genre}
\u5236\u7247\u56FD\u5BB6/\u5730\u533A: ${data.region}
\u8BED\u8A00: ${data.language}
\u65F6\u957F: ${data.runtime}
\u53C8\u540D: ${data.aka}
\u83B7\u5956\u60C5\u51B5:
${data.awards}
`); if (data.average) { $("#movie-ratings-table tr").prepend(`
\u8C46 \u8C46\u74E3\u8BC4\u5206
${data.average} / 10
(${data.votes} votes)`); } }; var addToANTPage = (data) => { console.log(data); $(".header h2").prepend(`[${data.chineseTitle}] `); if (data.summary) { const synopsisDom = `
\u2191 \u4E2D\u6587\u7B80\u4ECB
${data.summary}
`; $(".torrent_description,.box_request_desc").after(synopsisDom); } $(".box_details:first").before(`
\u7535\u5F71\u4FE1\u606F
  • \u5BFC\u6F14: ${data.director}
  • \u7C7B\u578B: ${data.genre}
  • \u5236\u7247\u56FD\u5BB6/\u5730\u533A: ${data.region}
  • \u8BED\u8A00: ${data.language}
  • \u65F6\u957F: ${data.runtime}
  • \u53C8\u540D: ${data.aka}
  • \u83B7\u5956\u60C5\u51B5:
    ${data.awards}
`); if (data.average) { $(".box.torrent_ratings .body tr").prepend(`
\u8C46
${data.average} / 10
(${data.votes} votes)`); } }; var getImdbId = () => { var _a4, _b3; let imdbLink = ""; const imdbConfig = CURRENT_SITE_INFO.imdb; if (typeof imdbConfig === "object") { try { Object.keys(imdbConfig).forEach((key) => { if ($(`${imdbConfig[key]}`)[0]) { imdbLink = $(imdbConfig[key]).attr("href"); throw new Error("end loop"); } }); } catch (error) { if (error.message !== "end loop") { console.log(error); } } } else { imdbLink = $(imdbConfig).attr("href"); } console.log(imdbLink); return (_b3 = (_a4 = /tt\d+/.exec(imdbLink)) == null ? void 0 : _a4[0]) != null ? _b3 : ""; }; var getTvSeasonData = async (data) => { var _a4, _b3; const torrentTitle = getTorrentTitle(); const {episodes = "", chineseTitle} = data; if (episodes) { const seasonNumber = (_b3 = (_a4 = torrentTitle.match(/S(?!eason)\s*?0?(\d+)\.?(EP?\d+)?/i)) == null ? void 0 : _a4[1]) != null ? _b3 : 1; if (parseInt(seasonNumber) === 1) { return data; } else { const query = `${chineseTitle} \u7B2C${seasonNumber}\u5B63`; const params = encodeURI("apikey=0ab215a8b1977939201640fa14c66bab"); const searchData = await fetch(`${DOUBAN_API_URL}/search?q=${query}`, { data: params, method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" } }); if (searchData.count > 0) { return {id: searchData.subjects[0].id}; } } } }; var getDoubanInfo = async (doubanId, imdbId) => { try { const url = DOUBAN_SUBJECT_URL.replace("{doubanId}", doubanId); const data = await fetch(url, { responseType: "text" }); if (data) { const doubanInfo = await formatDoubanInfo(data); const savedIds = GM_getValue("ids") || {}; savedIds[imdbId] = __assign({ doubanId, updateTime: Date.now() }, doubanInfo); GM_setValue("ids", savedIds); return doubanInfo; } else { console.log("\u8C46\u74E3\u6570\u636E\u83B7\u53D6\u5931\u8D25"); } } catch (error) { console.log(error); } }; var getDoubanInfoByIMDB = async (imdbId) => { var _a4, _b3, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l; try { const params = encodeURI("apikey=0ab215a8b1977939201640fa14c66bab"); const doubanData = await fetch(`${DOUBAN_API_URL}/imdb/${imdbId}`, { data: params, method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" } }); const {title, attrs = {}, image, summary, rating, alt_title: altTitle, mobile_link: mobileLink} = doubanData; let chineseTitle = title; const isChineseReg = /[\u4e00-\u9fa5]+/; if (!isChineseReg.test(title) && !title.match(/^\d+$/)) { if (altTitle) { chineseTitle = altTitle.split("/")[0].trim(); } else { chineseTitle = title; } } const subjectLink = mobileLink.replace("m.douban.com/movie", "movie.douban.com").replace(/\/$/, ""); const doubanId = (_b3 = (_a4 = subjectLink.match(/subject\/(\d+)/)) == null ? void 0 : _a4[1]) != null ? _b3 : ""; const awards = await getAwardInfo(subjectLink); const doubanInfo = { director: (_c = attrs.director) == null ? void 0 : _c.join(" / "), runtime: (_d = attrs.movie_duration) == null ? void 0 : _d.join(" / "), language: (_e = attrs.language) == null ? void 0 : _e.join(" / "), genre: (_g = (_f = attrs.movie_type) == null ? void 0 : _f.join(" / ")) != null ? _g : "", aka: altTitle || "", region: (_h = attrs.country) == null ? void 0 : _h.join(" / "), link: subjectLink, poster: image, summary, chineseTitle, votes: rating.numRaters, average: rating.average, awards, id: (_j = (_i = subjectLink.match(/subject\/(\d+)/)) == null ? void 0 : _i[1]) != null ? _j : "", episodes: (_l = (_k = attrs.episodes) == null ? void 0 : _k.join(" / ")) != null ? _l : "" }; if (!attrs.episodes) { const savedIds = GM_getValue("ids") || {}; savedIds[imdbId] = __assign({ doubanId, updateTime: Date.now() }, doubanInfo); GM_setValue("ids", savedIds); } return doubanInfo; } catch (error) { console.log(error); } }; var getAwardInfo = async (doubanLink) => { var _a4; const awardsPage = await fetch(`${doubanLink}/awards/`, { responseType: "text" }); const awardsDoc = new DOMParser().parseFromString(awardsPage, "text/html"); const awards = $("#content > div > div.article", awardsDoc).html().replace(/[ \n]/g, "").replace(/<\/li>
  • /g, "
  • ").replace(/<\/a> ]*>/g, "\n").replace(/<[^>]+>/g, "").replace(/ /g, " ").replace(/ +\n/g, "\n").trim(); return (_a4 = awards == null ? void 0 : awards.replace(/\n/g, "
    ")) != null ? _a4 : ""; }; var formatDoubanInfo = async (domString) => { var _a4, _b3; const dom = new DOMParser().parseFromString(domString, "text/html"); const chineseTitle = $("title", dom).text().replace("(\u8C46\u74E3)", "").trim(); const jsonData = JSON.parse($('head > script[type="application/ld+json"]', dom).html().replace(/(\r\n|\n|\r|\t)/gm, "")); const fetchAnchor = function(anchor) { var _a5, _b4, _c, _d; return (_d = (_c = (_b4 = (_a5 = anchor == null ? void 0 : anchor[0]) == null ? void 0 : _a5.nextSibling) == null ? void 0 : _b4.nodeValue) == null ? void 0 : _c.trim()) != null ? _d : ""; }; const rating = jsonData.aggregateRating ? jsonData.aggregateRating.ratingValue : 0; const votes = jsonData.aggregateRating ? jsonData.aggregateRating.ratingCount : 0; const director = jsonData.director ? jsonData.director : []; const poster = jsonData.image.replace(/s(_ratio_poster|pic)/g, "l$1").replace(/img\d/, "img9"); const link = `https://movie.douban.com${jsonData.url}`; const introductionDom = $('#link-report > span.all.hidden,#link-report-intra > [property="v:summary"], #link-report > [property="v:summary"]', dom); const summary = (introductionDom.length > 0 ? introductionDom.text() : "\u6682\u65E0\u76F8\u5173\u5267\u60C5\u4ECB\u7ECD").split("\n").map((a) => a.trim()).filter((a) => a.length > 0).join("\n"); const genre = $('#info span[property="v:genre"]', dom).map(function() { return $(this).text().trim(); }).toArray(); const language = fetchAnchor($('#info span.pl:contains("\u8BED\u8A00")', dom)); const region = fetchAnchor($('#info span.pl:contains("\u5236\u7247\u56FD\u5BB6/\u5730\u533A")', dom)); const runtimeAnchor = $('#info span.pl:contains("\u5355\u96C6\u7247\u957F")', dom); const runtime = runtimeAnchor[0] ? fetchAnchor(runtimeAnchor) : $('#info span[property="v:runtime"]', dom).text().trim(); const akaAnchor = $('#info span.pl:contains("\u53C8\u540D")', dom); let aka = []; if (akaAnchor.length > 0) { aka = fetchAnchor(akaAnchor).split(" / ").sort(function(a, b) { return a.localeCompare(b); }).join("/"); aka = aka.split("/"); } const awards = await getAwardInfo(link); return { director: director.map((item) => item.name), runtime, language, genre: (_a4 = genre == null ? void 0 : genre.join(" / ")) != null ? _a4 : "", aka: (_b3 = aka == null ? void 0 : aka.join(" / ")) != null ? _b3 : "", region, link, poster, summary, chineseTitle, votes, average: rating, awards }; }; var getTorrentTitle = () => { let {titleDom} = CURRENT_SITE_INFO; if (!titleDom) { if (CURRENT_SITE_NAME === "BHD") { titleDom = $(".dotborder").find("td:contains(Name)").next("td"); } else if (CURRENT_SITE_NAME.match(/ACM|BLU/)) { const keyMap = { Name: "Name", \u540D\u79F0: "Name", \u540D\u7A31: "Name" }; $("#vue+.panel table tr").each((index, element) => { const key = $(element).find("td:first").text().replace(/\s|\n/g, ""); if (keyMap[key]) { titleDom = $(element).find("td:last"); } }); } else if (CURRENT_SITE_NAME === "UHD") { const torrentId = getUrlParam("torrentid"); const torrentFilePathDom = $(`#files_${torrentId} .filelist_path`); const torrentFileDom = $(`#files_${torrentId} .filelist_table>tbody>tr:nth-child(2) td`).eq(0); titleDom = torrentFilePathDom || torrentFileDom; } else if (CURRENT_SITE_NAME === "HDT") { return document.title.replace(/HD-Torrents.org\s*-/ig, "").trim(); } } return $(titleDom).text(); }; var getUrlParam = (key) => { const reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)"); const regArray = location.search.substr(1).match(reg); if (regArray) { return unescape(regArray[2]); } return ""; }; var createDoubanDom = async (doubanId, imdbId, doubanInfo) => { const div = document.createElement("div"); let {doubanContainerDom, insertDomSelector, siteName, poster} = CURRENT_SITE_INFO; if (siteName.match(/(HDT)$/)) { insertDomSelector = $(insertDomSelector).parent(); } $(insertDomSelector).before(doubanContainerDom); const doubanLink = `https://movie.douban.com/subject/${doubanId}`; let htmlData = await fetch(`${doubanLink}/output_card`, { responseType: "text" }); htmlData = htmlData.replace(/wrapper/g, "douban-wrapper").replace(//g, ""); htmlData = htmlData.replace(/(html,)body,/, "$1"); htmlData = htmlData.replace(/url\(.+?output_card\/border.png\)/g, `url(${PIC_URLS.border})`); htmlData = htmlData.replace(/src=.+?output_card\/line\.png/g, `src="${PIC_URLS.line}`); let headDom = htmlData.match(/((.|\n)+)<\/head>/)[1]; headDom = headDom.replace(//g, ""); const bodyDom = htmlData.match(/((.|\n)+)<\/body>/)[1]; div.insertAdjacentHTML("beforeend", headDom); div.insertAdjacentHTML("beforeend", bodyDom); $(".douban-dom").append(div).attr("douban-link", doubanLink); $(".douban-dom .grid-col4").after(`
    `); const doubanData = doubanInfo || await getDoubanInfo(doubanId, imdbId); $(".douban-dom .grid-col5").html(`
    ${doubanData.summary || "\u6682\u65E0\u7B80\u4ECB"}
    `); let posterStyle = $(".picture-douban-wrapper").attr("style"); const posterImg = siteName === "MTV" ? $(poster).attr("src") : doubanData.poster; posterStyle = posterStyle == null ? void 0 : posterStyle.replace(/\(.+\)/, `(${posterImg})`); $(".picture-douban-wrapper").attr("style", posterStyle); $(".douban-dom").click(() => { GM_openInTab(doubanLink); }); }; function fetch(url, options = {}) { return new Promise((resolve, reject) => { GM_xmlhttpRequest(__assign(__assign({ method: "GET", url, responseType: "json" }, options), { onload: (res) => { const {statusText, status, response} = res; if (status !== 200) { reject(new Error(statusText || status)); } else { resolve(response); } }, ontimeout: () => { reject(new Error("timeout")); }, onerror: (error) => { reject(error); } })); }); } // src/style.js var style_default = GM_addStyle(` .bigstar50,.bigstar45,.bigstar40,.bigstar35,.bigstar30,.bigstar25,.bigstar20,.bigstar15,.bigstar10,.bigstar05,.bigstar00 { display: inline-block; *display: inline; zoom:1;background: https://ptpimg.me/yze1gz.png) no-repeat; background: -webkit-image-set(https://ptpimg.me/yze1gz.png) 1x, url(https://ptpimg.me/n74cjc.png) 2x) no-repeat; background: -moz-image-set(https://ptpimg.me/yze1gz.png) 1x, url(https://ptpimg.me/n74cjc.png) 2x) no-repeat; background: -o-image-set(https://ptpimg.me/yze1gz.png) 1x, url(https://ptpimg.me/n74cjc.png) 2x) no-repeat; background: -ms-image-set(https://ptpimg.me/yze1gz.png) 1x, url(https://ptpimg.me/n74cjc.png) 2x) no-repeat; width: 75px; height: 15px; margin: 1px 0 0 0; overflow: hidden } .bigstar50+span.rating_num,.bigstar45+span.rating_num,.bigstar40+span.rating_num,.bigstar35+span.rating_num,.bigstar30+span.rating_num,.bigstar25+span.rating_num,.bigstar20+span.rating_num,.bigstar15+span.rating_num,.bigstar10+span.rating_num,.bigstar05+span.rating_num,.bigstar00+span.rating_num { font-size: 16px; line-height: 1 } .bigstar50 { background-position: 0 0px } .bigstar45 { background-position: 0 -15px } .bigstar40 { background-position: 0 -30px } .bigstar35 { background-position: 0 -45px } .bigstar30 { background-position: 0 -60px } .bigstar25 { background-position: 0 -75px } .bigstar20 { background-position: 0 -90px } .bigstar15 { background-position: 0 -105px } .bigstar10 { background-position: 0 -120px } .bigstar05 { background-position: 0 -135px } .bigstar00 { background-position: 0 -150px } .allstar50,.allstar45,.allstar40,.allstar35,.allstar30,.allstar25,.allstar20,.allstar15,.allstar10,.allstar05,.allstar00,.rating1-t,.rating15-t,.rating2-t,.rating25-t,.rating3-t,.rating35-t,.rating4-t,.rating45-t,.rating5-t,.rating-t,.starb~.stars5,.starb~.stars4,.starb~.stars3,.starb~.stars2,.starb~.stars1,.collectors .stars5,.collectors .stars4,.collectors .stars3,.collectors .stars2,.collectors .stars1 { display: inline-block; *display: inline; zoom:1;background: url(/f/movie/b8f4c3672ef81106701071831e22422a745d3b74/pics/rating_icons/ic_rating_s.png) no-repeat; background: -webkit-image-set(url(/f/movie/b8f4c3672ef81106701071831e22422a745d3b74/pics/rating_icons/ic_rating_s.png) 1x, url(/f/movie/076dc86067c402ced53eee7c09cd45402235733c/pics/rating_icons/ic_rating_s@2x.png) 2x) no-repeat; background: -moz-image-set(url(/f/movie/b8f4c3672ef81106701071831e22422a745d3b74/pics/rating_icons/ic_rating_s.png) 1x, url(/f/movie/076dc86067c402ced53eee7c09cd45402235733c/pics/rating_icons/ic_rating_s@2x.png) 2x) no-repeat; background: -o-image-set(url(/f/movie/b8f4c3672ef81106701071831e22422a745d3b74/pics/rating_icons/ic_rating_s.png) 1x, url(/f/movie/076dc86067c402ced53eee7c09cd45402235733c/pics/rating_icons/ic_rating_s@2x.png) 2x) no-repeat; background: -ms-image-set(url(/f/movie/b8f4c3672ef81106701071831e22422a745d3b74/pics/rating_icons/ic_rating_s.png) 1x, url(/f/movie/076dc86067c402ced53eee7c09cd45402235733c/pics/rating_icons/ic_rating_s@2x.png) 2x) no-repeat; width: 55px; height: 11px; margin: 0 3px 0 0; overflow: hidden } .status-item .allstar50,.status-item .allstar45,.status-item .allstar40,.status-item .allstar35,.status-item .allstar30,.status-item .allstar25,.status-item .allstar20,.status-item .allstar15,.status-item .allstar10,.status-item .allstar05,.status-item .allstar00,.status-item .rating1-t,.status-item .rating15-t,.status-item .rating2-t,.status-item .rating25-t,.status-item .rating3-t,.status-item .rating35-t,.status-item .rating4-t,.status-item .rating45-t,.status-item .rating5-t,.status-item .rating-t,.status-item .starb~.stars5,.status-item .starb~.stars4,.status-item .starb~.stars3,.status-item .starb~.stars2,.status-item .starb~.stars1,.status-item .collectors .stars5,.status-item .collectors .stars4,.status-item .collectors .stars3,.status-item .collectors .stars2,.status-item .collectors .stars1 { margin: 0 0 0 4px } .allstar50 { background-position: 0 0px } .allstar45 { background-position: 0 -11px } .allstar40 { background-position: 0 -22px } .allstar35 { background-position: 0 -33px } .allstar30 { background-position: 0 -44px } .allstar25 { background-position: 0 -55px } .allstar20 { background-position: 0 -66px } .allstar15 { background-position: 0 -77px } .allstar10 { background-position: 0 -88px } .allstar05 { background-position: 0 -99px } .allstar00 { background-position: 0 -110px } .rating5-t,.starb~.stars5,.collectors .stars5 { background-position: 0 0px } .rating45-t { background-position: 0 -11px } .rating4-t,.starb~.stars4,.collectors .stars4 { background-position: 0 -22px } .rating35-t { background-position: 0 -33px } .rating3-t,.starb~.stars3,.collectors .stars3 { background-position: 0 -44px } .rating25-t { background-position: 0 -55px } .rating2-t,.starb~.stars2,.collectors .stars2 { background-position: 0 -66px } .rating15-t { background-position: 0 -77px } .rating1-t,.starb~.stars1,.collectors .stars1 { background-position: 0 -88px } .rating1-t,.rating15-t,.rating2-t,.rating25-t,.rating3-t,.rating35-t,.rating4-t,.rating45-t,.rating5-t,.rating-t { padding-left: 5px } #stars { font-size: 0; vertical-align: text-bottom; cursor: pointer } #stars a img { vertical-align: text-bottom } .starstop,.stars { margin-right: 5px } .starstop { float: left } .rating_nums,.rating_num { color: #e09015; font-size: 12px; padding: 0 3px } .status-item .rating_num { font-size: 14px } .rating_nums { padding-left: 0 } .star .rating_num { color: #e09015; padding: 0 5px 0 0 } #interest_sect { overflow: hidden; word-wrap: break-word } #interest_sectl { float: left; width: 155px; margin: 2px 0 0 0; padding: 0 0 0 15px; border-left: 1px solid #eaeaea; color: #9b9b9b } #interest_sectl .rating_wrap { padding-bottom: 15px; font-size: 12px; line-height: 14px } #interest_sectl .rating_wrap .rating_logo { line-height: 1 } #interest_sectl .rating_self { padding: 0; line-height: 2 } #interest_sectl .rating_self:before,#interest_sectl .rating_self:after { content: ''; display: block; clear: both } #interest_sectl .rating_self .rating_sum { clear: both } #interest_sectl .rating_num { color: #494949; padding: 0; min-width: 30%; font-size: 28px } #interest_sectl .rating_right { float: left; padding: 10px 0 10px 6px } #interest_sectl .rating_right.not_showed { padding: 10px 0 } #interest_sectl .power { height: 10px; float: left; margin: 1px 4px; background: #ffd596 none repeat scroll 0 0 } #interest_sectl .power.color_gray { background: #ccc } #interest_sectl .rating_per { font-size: 11px } #interest_sectl .rating_betterthan { position: relative; padding: 15px 0; border-top: 1px solid #eaeaea; color: #9b9b9b; margin: 0 } .rating_logo_wrap .content { display: inline-block; *display: inline; zoom:1;vertical-align: top; font-size: 12px; line-height: 20px; color: #9b9b9b; margin-right: 4px } .rating_helper_wrap { display: inline-block; *display: inline; zoom:1;vertical-align: top; position: relative; line-height: 18px } .rating_helper_wrap:hover .rating_helper_icon { background-position: 0 -12px } .rating_helper_wrap:hover .rating_helper_content { display: block } .rating_helper_icon { background: url(/f/movie/16305b59f6b69b8acde51c880de2a5b6cde0155a/pics/icon/ic_qmark.png) no-repeat; background: -webkit-image-set(url(/f/movie/16305b59f6b69b8acde51c880de2a5b6cde0155a/pics/icon/ic_qmark.png) 1x, url(/f/movie/1fb4f85391f82c3286d7318d840577daae1c2eee/pics/icon/ic_qmark@2x.png) 2x) no-repeat; background: -moz-image-set(url(/f/movie/16305b59f6b69b8acde51c880de2a5b6cde0155a/pics/icon/ic_qmark.png) 1x, url(/f/movie/1fb4f85391f82c3286d7318d840577daae1c2eee/pics/icon/ic_qmark@2x.png) 2x) no-repeat; background: -o-image-set(url(/f/movie/16305b59f6b69b8acde51c880de2a5b6cde0155a/pics/icon/ic_qmark.png) 1x, url(/f/movie/1fb4f85391f82c3286d7318d840577daae1c2eee/pics/icon/ic_qmark@2x.png) 2x) no-repeat; background: -ms-image-set(url(/f/movie/16305b59f6b69b8acde51c880de2a5b6cde0155a/pics/icon/ic_qmark.png) 1x, url(/f/movie/1fb4f85391f82c3286d7318d840577daae1c2eee/pics/icon/ic_qmark@2x.png) 2x) no-repeat; display: inline-block; *display: inline; zoom:1;vertical-align: middle; width: 12px; height: 12px } .rating_helper_content { z-index: 10; color: #494949; display: none; position: absolute; left: 12px; bottom: 3px; width: 96px; background: #fef6e9; border: 1px solid #e3d9ca; padding: 8px 10px; border-radius: 4px; box-shadow: 0 2px 5px rgba(0,0,0,0.1) } .rating_content_wrap { width: 110%; padding-bottom: 8px } .rating_content_wrap .rating_avg { float: left; font-size: 16px; line-height: 28px; color: #494949; margin-right: 12px } .rating_content_wrap .friends { float: left; margin-right: 6px } .rating_content_wrap .avatar { float: left; margin-top: 6px; margin-right: 2px; line-height: 0; border-radius: 50%; overflow: hidden; cursor: default } .rating_content_wrap .avatar img { width: 16px } .rating_content_wrap .friends_count { float: left; line-height: 14px; margin-top: 7px } #screening .subject-rate { color: #e09015; font-size: 12px; margin-left: 2px } #screening .rating { display: inline-block; *display: inline; zoom:1;margin: 4px auto 2px; height: 19px } #screening .rating span { float: left } #screening .rating .rating-star { margin: 3px 3px 0 0; width: 55px } span.subject-rate,.rate,.subject-rating { color: #e09015 } img.rating { vertical-align: text-bottom } img.rating:nth-child(1) { padding-left: 10px } .rec-list .score { color: #e09015 } .album-item .star { line-height: 1; margin-top: 6px } .album-item .star .allstar50,.album-item .star .allstar45,.album-item .star .allstar40,.album-item .star .allstar35,.album-item .star .allstar30,.album-item .star .allstar25,.album-item .star .allstar20,.album-item .star .allstar15,.album-item .star .allstar10,.album-item .star .allstar05,.album-item .star .allstar00 { float: left } .album-item .star .score { color: #e09015 } .game-ratings strong { margin: 0 6px; color: #e09015 } .link-subject .rate-more span { font-size: 10px; color: #e09015 } .rating-controversy-reason { background-color: #FFFBF4; color: #494949; line-height: 14px; margin: 15px 0px 0px 0px; padding: 6px 20px 6px 35px; font-size: 11px; position: relative } .rating-controversy-reason:before { content: ''; display: block; width: 14px; height: 14px; position: absolute; left: 12px; top: 50%; transform: translateY(-50%); background-image: url("data:image/svg+xml, %3Csvg%20width%3D%2216%22%20height%3D%2216%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8%200a8%208%200%20110%2016A8%208%200%20018%200zm0%2010.667a1%201%200%20100%202%201%201%200%20000-2zm0-8a1.207%201.207%200%2000-1.2%201.326l.467%204.677a.737.737%200%20001.466%200l.468-4.677A1.207%201.207%200%20008%202.667z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E"); background-size: contain } body #douban-wrapper { width: 770px; height: 345px; margin: 0; font: 12px Helvetica,Arial,sans-serif } #douban-wrapper .ll { float: left } #douban-wrapper .col-container .fix-col { float: left } #douban-wrapper #content { background-repeat: no-repeat; padding: 10px; width: 750px; height: 325px; min-height: initial } #douban-wrapper #content h1 { font-size: 20px } #douban-wrapper #content .grid { width: 750px; height: 325px; border-radius: 9px } #douban-wrapper #content .grid .grid-col1 { width: 225px } #douban-wrapper #content .grid .grid-col2 { width: 254px; padding: 24px 18px; height: 277px; overflow: hidden } #douban-wrapper #content .grid .grid-col3 { width: 18px } #douban-wrapper #content .grid .grid-col4 { font-size: 14px; padding: 27px 14px 0 12px; width: 190px } #douban-wrapper #content .picture-douban-wrapper{ width: 225px; height: 325px; border-top-left-radius: 9px; border-bottom-left-radius: 9px; background-size: cover; background-position: center } #douban-wrapper #content .main-title h1,#douban-wrapper #content .sub-title h2 { overflow: hidden; word-break: break-all; max-height: 2.5em; line-height: 1.2; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical } #douban-wrapper #content .main-title h1 { font-weight: 500; font-size: 30px; color: #000000 } #douban-wrapper #content .sub-title { margin-top: 9px } #douban-wrapper #content .sub-title h2 { font-size: 18px; color: #ADADAD; font-weight: normal } #douban-wrapper #content .baseinfo { font-size: 16px; color: #000000; line-height: 25px; margin-top: 18px; letter-spacing: 1px; word-break: break-all; font-weight: 400; display: -webkit-box; overflow: hidden; -webkit-line-clamp: 5; -webkit-box-orient: vertical } #douban-wrapper #content .line-wrap { width: 18px; height: 100%; position: relative } #douban-wrapper #content .line-wrap img { width: 100%; height: 100% } #douban-wrapper #content .douban-icon { font-size: 0 } #douban-wrapper #content .douban-icon>span { font-size: 14px; display: inline-block; text-align: center; border: 1px solid #41BE57 } #douban-wrapper #content .douban-icon .icon-pt1 { background-color: #41BE57; color: white; border-top-left-radius: 4px; border-bottom-left-radius: 4px; width: 24px; height: 24px; line-height: 24px } #douban-wrapper #content .douban-icon .icon-pt2 { color: #3BA94D; background: #FFFFFF; border-top-right-radius: 4px; border-bottom-right-radius: 4px; width: 69px; height: 24px; line-height: 24px } #douban-wrapper #content .score-container .rating_self { margin-top: 15px } #douban-wrapper #content .score-container .rating_self .rating_num { font-size: 48px; line-height: 1; padding: 0; color: black; font-weight: normal } #douban-wrapper #content .score-container .rating_self .rating_right { float: left; padding-left: 10px; padding-top: 5px } #douban-wrapper #content .score-container .rating_self .rating_right .ll { float: none } #douban-wrapper #content .score-container .rating_self .rating_right .rating_sum { color: #3B3B3B } #douban-wrapper #content .score-container .rating_self .rating_right .rating_sum .rating_people,#douban-wrapper #content .score-container .rating_self .rating_right .rating_sum .rating_people:hover,#douban-wrapper #content .score-container .rating_self .rating_right .rating_sum .rating_people:visited,#douban-wrapper #content .score-container .rating_self .rating_right .rating_sum .rating_people:link { color: #3B3B3B; background: none } #douban-wrapper #content .score-container .ratings-on-weight { margin-top: 10px; min-weight: 1px } #douban-wrapper #content .score-container .ratings-on-weight .item { line-height: 1.5 } #douban-wrapper #content .score-container .ratings-on-weight .item .starstop { float: none; margin-right: 0; color: #3B3B3B } #douban-wrapper #content .score-container .ratings-on-weight .item>span,#douban-wrapper #content .score-container .ratings-on-weight .item>div { display: inline-block } #douban-wrapper #content .score-container .ratings-on-weight .item .power { height: 6px; background: #FAA032; border-radius: 3px; vertical-align: middle } #douban-wrapper #content .bottom-row { display: flex; align-items: center; justify-content: space-between } #douban-wrapper #content .bottom-row .rating-betterthan { font-size: 14px; color: #1C1C1C; line-height: 21px; width: 117px } #douban-wrapper #content .bottom-row .rating-betterthan .number { font-size: 14px; color: #41BE57 } #douban-wrapper #content .bottom-row .qr-code { width: 64px; height: 64px; overflow: hidden } #douban-wrapper #content .bottom-row .qr-code img { width: 100%; height: 100% } .contentlayout.douban-info { display: flex; justify-content: space-around; } .contentlayout.douban-info .detail{ flex:1; } .detail .title{ font-size: 26px; font-weight: 600; margin-bottom: 20px; } .detail .title a{ text-decoration: none; } .movie-detail{ display: flex; justify-content: space-between; } .movie-detail .synopsis { width: 60%; } .movie-detail .movieinfo { margin-right: 20px; max-width: 30%; } .icon-pt1{ font-size: 14px; display: inline-block; text-align: center; border: 1px solid #41be57; background-color: #41be57; color: white; border-top-left-radius: 4px; border-bottom-left-radius: 4px; width: 24px; height: 24px; line-height: 24px; } .ant .icon-pt1{ border-radius: 4px; } .icon-pt2{ display: inline-block; text-align: center; border: 1px solid #41be57; color: #3ba94d; background: #ffffff; border-top-right-radius: 4px; border-bottom-right-radius: 4px; width: 69px; height: 24px; line-height: 24px; font-size: 14px; } .douban-dom { display: flex; cursor: pointer; } .douban-dom { text-align: left; } #douban-wrapper *{ box-sizing: content-box; } #douban-wrapper .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden } #douban-wrapper .clearfix { zoom: 1; display: inline-block; _height: 1px; } #douban-wrapper .clearfix { height: 1% } #douban-wrapper .clearfix { display: block } #douban-wrapper .rating_per{ color: #111; } #douban-wrapper .grid{ overflow: initial; } .content-rounded #douban-wrapper div{ margin-left: 0; } #douban-wrapper #content .douban-icon .icon-pt1 { background-image:none; } #douban-wrapper h2,#douban-wrapper h1{ border:none; background-image: none; background-color: transparent; text-shadow: none; padding: 0; margin: 0 line-height: normal; } #douban-wrapper .grid-col5 { font-size: 14px; padding: 27px 14px 0 12px; width: 190px; overflow-y: auto; height: 277px; width: calc(100% - 225px - 254px - 36px - 280px); } #douban-wrapper .summary{ padding-top: 10px; color: #000000; line-height: 25px; letter-spacing: 1px; word-break: break-all; font-weight: 400; } #douban-wrapper { width: 100% !important; } .douban-dom>div{ width: 100%; } #douban-wrapper #content{ background-image:none !important; background: #fff; width: calc(100% - 20px) !important; } #douban-wrapper #content .grid{ width: 100% !important; } .bhd #douban-wrapper ::-webkit-scrollbar-track{ background-color: #fff; } .bhd #douban-wrapper ::-webkit-scrollbar-thumb{ background-color: #ddd; } .btn #douban-wrapper .grid-col1 { display: none; } .hdb #douban-wrapper .grid-col1 { display: none; } .hdt #douban-wrapper .grid-col1 { display: none; } .sc #douban-wrapper .grid-col1 { display: none; } .its #douban-wrapper .grid-col1 { display: none; } .bb #douban-wrapper .grid-col1 { display: none; } .btn #douban-wrapper .grid-col5 { width: calc(100% - 254px - 36px - 280px); } .hdt #douban-wrapper .grid-col5 { width: calc(100% - 254px - 36px - 280px); } .hdb #douban-wrapper .grid-col5 { width: calc(100% - 254px - 36px - 280px); } .sc #douban-wrapper .grid-col5 { width: calc(100% - 254px - 36px - 280px); } .its #douban-wrapper .grid-col5 { width: calc(100% - 254px - 36px - 280px); } .bb #douban-wrapper .grid-col5 { width: calc(100% - 254px - 36px - 280px); } .its #douban-wrapper { background-color: #131313; color: #fff; } `); // src/index.js (async () => { if (CURRENT_SITE_INFO) { const imdbId = getImdbId(); if (!imdbId) { return; } try { const savedIds = GM_getValue("ids") || {}; if (!savedIds[imdbId] || savedIds[imdbId] && savedIds[imdbId].updateTime && Date.now() - savedIds[imdbId].updateTime >= 30 * 24 * 60 * 60 * 1e3) { let doubanId = ""; const movieData = await getDoubanInfoByIMDB(imdbId); if (!movieData) { throw new Error("\u6CA1\u6709\u627E\u5230\u8C46\u74E3\u6761\u76EE"); } const {id = "", episodes = ""} = movieData; doubanId = id; if (episodes) { const tvData = await getTvSeasonData(movieData); doubanId = tvData.id; } if (CURRENT_SITE_NAME.match(/PTP/)) { addToPtpPage(movieData); } else if (CURRENT_SITE_NAME.match(/ANT/)) { addToANTPage(movieData); } else { createDoubanDom(doubanId, imdbId); } } else { const savedData = savedIds[imdbId]; if (CURRENT_SITE_NAME.match(/PTP/)) { addToPtpPage(savedData); } else if (CURRENT_SITE_NAME.match(/ANT/)) { addToANTPage(savedData); } else { createDoubanDom(savedData.doubanId, imdbId, savedData); } } } catch (error) { console.log(error); } } })(); })();