// ==UserScript== // @name 豆瓣评分增强大师 // @namespace doveboy_js // @version 10.7 // @description 支持电影、剧集、综艺、动画!包含 IMDb, 烂番茄指数, 爆米花指数, TMDB, Metacritic, Letterboxd, Allocine, AniList。 // @author 白鸽男孩 // @contributor Rhilip // @license Zlib/Libpng License // @icon data:image/png;base64,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 // @match https://movie.douban.com/subject/* // @grant GM_xmlhttpRequest // @connect bimzcy.github.io // @connect movie-is-fine-hvkm.vercel.app // @connect www.imdb.com // @connect query.wikidata.org // @connect www.rottentomatoes.com // @connect api.themoviedb.org // @connect www.metacritic.com // @connect letterboxd.com // @connect www.allocine.fr // @connect graphql.anilist.co // @connect www.omdbapi.com // ==/UserScript== (function() { 'use strict'; const movieId = window.location.pathname.split('/')[2]; const orangeColor = "#f0ad4e"; const tmdbAuth = "Bearer eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIyMzc1ZGIzOTYwYWVhMWI1OTA1NWMwZmM3ZDcwYjYwZiIsInN1YiI6IjYwYmNhZTk0NGE0YmY2MDA1OWJhNWE1ZSIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.DU51juQWlAIIfZ2lK99b3zi-c5vgc4jAwVz5h2WjOP8"; // --- 1. 排行榜 --- function initRankings() { const titleH1 = document.querySelector('#content h1'); if (!titleH1) { setTimeout(initRankings, 100); return; } let container = document.getElementById('custom-rank-container') || (() => { const div = document.createElement('div'); div.id = 'custom-rank-container'; // 初始设为隐藏 (display: none),并去除 min-height 避免无数据时撑开空白 div.style.cssText = "display: none; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; align-items: center;"; titleH1.parentNode.insertBefore(div, titleH1); return div; })(); const nativeTop250 = document.querySelector('.top250'); if (nativeTop250 && !document.getElementById('styled-top250')) { const noText = nativeTop250.querySelector('.top250-no')?.innerText || 'No.未知'; container.insertAdjacentHTML('afterbegin', `${noText}豆瓣电影Top250`); // 有数据加载,显示容器 container.style.display = 'flex'; nativeTop250.style.display = 'none'; } GM_xmlhttpRequest({ method: 'GET', url: 'https://bimzcy.github.io/rank4douban/data.json', onload: function(res) { if (res.status === 200) { try { const data = JSON.parse(res.responseText); for (const k in data) { if (k === 'top250' || data[k].short_title.includes("Top250")) continue; if (data[k].list[movieId]) { container.insertAdjacentHTML('beforeend', `${data[k].prefix || 'No.'}${data[k].list[movieId]}${data[k].short_title}`); // 有数据加载,显示容器 container.style.display = 'flex'; } } } catch(e){} } } }); } // --- 2. 核心控制器 --- async function initMain() { const infoDiv = document.querySelector('#info'); const ratingWrap = document.querySelector('.rating_wrap.clearbox') || document.querySelector('.rating_logo')?.parentNode; if (!infoDiv || !ratingWrap) { setTimeout(initMain, 100); return; } let sideArea = document.getElementById("custom-side-area") || (()=>{ const div = document.createElement('div'); div.id = "custom-side-area"; ratingWrap.appendChild(div); return div; })(); sideArea.innerHTML = `
`; const imdbMatch = infoDiv.innerText.match(/IMDb:\s*(tt\d+)/) || infoDiv.innerText.match(/tt\d+/); const imdbId = imdbMatch ? (imdbMatch[1] || imdbMatch[0]) : null; if (imdbId) { processOMDb(imdbId); processRottenTomatoes(imdbId); processTMDB(imdbId); processLetterboxd(imdbId); processAllocine(imdbId); // 改进后的 Allocine processAniList(imdbId); processMetacriticOfficial(imdbId); } GM_xmlhttpRequest({ method: "GET", url: `https://movie-is-fine-hvkm.vercel.app/movie/${movieId}`, onload: function(res) { if (res.status === 200) { const doc = new DOMParser().parseFromString(res.responseText, "text/html"); renderParentalGuide(doc, infoDiv); } } }); } // --- 3. Allocine 专用优化 (电影/电视剧双修复) --- function processAllocine(imdbId) { // 通过 Wikidata 获取 Allocine ID,区分 P1265(电影) 和 P1267(剧集) const sparql = `SELECT * WHERE {?s wdt:P345 "${imdbId}". OPTIONAL {?s wdt:P1265 ?filmID.} OPTIONAL {?s wdt:P1267 ?seriesID.}} LIMIT 1`; GM_xmlhttpRequest({ method: "GET", url: `https://query.wikidata.org/sparql?format=json&query=${encodeURIComponent(sparql)}`, onload: function(res) { try { const data = JSON.parse(res.responseText); const binding = data.results.bindings[0]; if (!binding) return; let allocineId = binding.seriesID?.value || binding.filmID?.value; let isSeries = !!binding.seriesID; if (!allocineId) return; // 构造正确的法国官网链接 const path = isSeries ? "series" : "film"; const filePrefix = isSeries ? "serie" : "film"; const url = `https://www.allocine.fr/${path}/fiche${filePrefix}_gen_c${filePrefix}=${allocineId}.html`; GM_xmlhttpRequest({ method: "GET", url: url, headers: { "User-Agent": navigator.userAgent }, onload: function(response) { const doc = new DOMParser().parseFromString(response.responseText, "text/html"); let score = ""; // 优先尝试从具体的评分项中提取(观众分优先) const items = doc.querySelectorAll('.stareval-item, .rating-item'); items.forEach(item => { const label = item.innerText; if (label.includes('Spectateurs') || label.includes('Presse')) { const note = item.querySelector('.stareval-note, .note'); if (note && (!score || label.includes('Spectateurs'))) { score = note.innerText.trim().replace(',', '.'); } } }); // 兜底方案:直接抓取首个出现的 note 类 if (!score) { const noteEl = doc.querySelector('.stareval-note, .note'); if (noteEl) score = noteEl.innerText.trim().replace(',', '.'); } if (score && !isNaN(parseFloat(score))) { renderScoreToBlock("block-allocine", "Allocine评分", (parseFloat(score) * 2).toFixed(1), "", url); } } }); } catch(e) {} } }); } // --- 4. 其他平台逻辑 --- function processRottenTomatoes(imdbId) { const sparql = `SELECT * WHERE {?s wdt:P345 "${imdbId}". OPTIONAL { ?s wdt:P1258 ?RTID. }}`; GM_xmlhttpRequest({ method: "GET", url: `https://query.wikidata.org/sparql?format=json&query=${encodeURIComponent(sparql)}`, onload: res => { try { const rtId = JSON.parse(res.responseText).results.bindings[0]?.RTID?.value; if (!rtId) return; const rtUrl = `https://www.rottentomatoes.com/${rtId}`; GM_xmlhttpRequest({ method: "GET", url: rtUrl, onload: res => { const doc = new DOMParser().parseFromString(res.responseText, "text/html"); const jsonEl = doc.getElementById("media-scorecard-json"); if (jsonEl) { const json = JSON.parse(jsonEl.textContent); if (json.criticsScore) renderScoreToBlock("block-rt", "烂番茄指数", (parseInt(json.criticsScore.score)/10).toFixed(1), json.criticsScore.ratingCount, rtUrl); if (json.audienceScore) renderScoreToBlock("block-popcorn", "爆米花指数", (parseInt(json.audienceScore.score)/10).toFixed(1), json.audienceScore.ratingCount || json.audienceScore.bandedRatingCount, rtUrl); } } }); } catch(e) {} } }); } function processOMDb(imdbId) { GM_xmlhttpRequest({ method: "GET", url: `https://www.omdbapi.com/?i=${imdbId}&apikey=thewdb`, onload: function(res) { if (res.status === 200) { const data = JSON.parse(res.responseText); if (data.Response === "True") { // 渲染 IMDb 评分 if (data.imdbRating !== 'N/A') { renderScoreToBlock("block-imdb", "IMDb评分", data.imdbRating, data.imdbVotes, `https://www.imdb.com/title/${imdbId}/`); } // 【新增】如果官网抓取失败,这里可以作为 Metascore 的保底方案 if (data.Metascore && data.Metascore !== 'N/A') { renderScoreToBlock("block-meta", "Meta评分", (parseFloat(data.Metascore)/10).toFixed(1), "", `https://www.metacritic.com/search/movie/${data.Title}/results`); } } } } }); } function processTMDB(imdbId) { GM_xmlhttpRequest({ method: "GET", url: `https://api.themoviedb.org/3/find/${imdbId}?external_source=imdb_id`, headers: { "Authorization": tmdbAuth }, onload: function(res) { try { const data = JSON.parse(res.responseText); const result = data.tv_results?.[0] || data.movie_results?.[0]; if (result) { const type = data.tv_results?.length > 0 ? 'tv' : 'movie'; renderScoreToBlock("block-tmdb", "TMDB评分", result.vote_average.toFixed(1), result.vote_count.toLocaleString(), `https://www.themoviedb.org/${type}/${result.id}`); } } catch(e) {} } }); } function processLetterboxd(imdbId) { const url = "https://letterboxd.com/imdb/" + imdbId; GM_xmlhttpRequest({ method: "GET", url: url, onload: function(res) { const match = res.responseText.match(/"ratingValue":\s*([0-9.]+)/); if (match) renderScoreToBlock("block-letterboxd", "Letterboxd评分", (parseFloat(match[1]) * 2).toFixed(1), "", url); } }); } function processAniList(imdbId) { const sparql = `SELECT ?anilistID WHERE {?s wdt:P345 "${imdbId}"; wdt:P8729 ?anilistID.}`; GM_xmlhttpRequest({ method: "GET", url: `https://query.wikidata.org/sparql?format=json&query=${encodeURIComponent(sparql)}`, onload: function(res) { try { const anilistId = JSON.parse(res.responseText).results.bindings[0]?.anilistID?.value; if (!anilistId) return; const query = `query ($id: Int) { Media (id: $id, type: ANIME) { id meanScore siteUrl } }`; GM_xmlhttpRequest({ method: "POST", url: "https://graphql.anilist.co", headers: { "Content-Type": "application/json" }, data: JSON.stringify({ query, variables: { id: parseInt(anilistId) } }), onload: function(response) { const result = JSON.parse(response.responseText); const rating = result.data.Media.meanScore; if (rating) renderScoreToBlock("block-anilist", "AniList评分", (rating / 10).toFixed(1), "", result.data.Media.siteUrl); } }); } catch(e) {} } }); } function processMetacriticOfficial(imdbId) { const sparql = `SELECT * WHERE {?s wdt:P345 "${imdbId}". OPTIONAL { ?s wdt:P1712 ?Metacritic_ID. }}`; GM_xmlhttpRequest({ method: "GET", url: `https://query.wikidata.org/sparql?format=json&query=${encodeURIComponent(sparql)}`, onload: function(response) { try { const mcId = JSON.parse(response.responseText).results.bindings[0]?.Metacritic_ID?.value; if (!mcId) return; const url = `https://www.metacritic.com/${mcId}`; GM_xmlhttpRequest({ method: "GET", url: url, headers: { "User-Agent": navigator.userAgent }, onload: function(mcRes) { const mcDoc = new DOMParser().parseFromString(mcRes.responseText, "text/html"); // --- 核心修复:精准定位用户分数 --- // 尝试多个可能的新版选择器 const userScoreEl = mcDoc.querySelector( '.c-productScoreInfo_scoreNumber[title*="User Score"] span, ' + // 新版主流选择器 '.c-siteReviewScore_background-user span, ' + // 用户评分背景类 '.u-p-left-small .c-siteReviewScore span' // 备用选择器 ); if (userScoreEl) { let scoreText = userScoreEl.textContent.trim(); // 逻辑处理:如果是 "tbd" 则不显示(代表评价人数不足,没有分数) if (scoreText.toLowerCase() === 'tbd') { console.log("Metacritic 用户评分目前为 tbd (评价人数不足)"); return; } // 验证是否为有效数字 if (!isNaN(parseFloat(scoreText))) { // Metacritic 用户分是 10 分制(例如 8.5),直接显示即可 renderScoreToBlock("block-meta", "Meta用户分", scoreText, "", url); } } } }); } catch(e) {} } }); } // --- 5. 渲染与辅助函数 --- function renderScoreToBlock(blockId, label, score, votes, href) { const container = document.getElementById(blockId); if (!container || !score || score === "0.0" || score === "N/A") return; const cleanVotes = votes ? votes.toString().replace(/Ratings|Rating|Verified|人/gi, '').trim() : ""; const starNum = Math.round(parseFloat(score)) * 5; container.innerHTML = `
${score}
${cleanVotes ? `` : ''}
`; } function renderParentalGuide(doc, infoDiv) { const guideButtons = doc.querySelectorAll('section.window-90s button'); if (guideButtons.length === 0) return; const guideRow = document.createElement('span'); guideRow.innerHTML = `家长指南: `; const tagsContainer = document.createElement('div'); tagsContainer.style.cssText = "display: inline-flex; flex-wrap: wrap; gap: 6px; vertical-align: top; margin-top: 4px; max-width: 350px;"; guideButtons.forEach(btn => { const label = btn.querySelector('.font-bold.text-sm')?.innerText; const severity = btn.querySelector('.bevel-outset')?.innerText; if (label && severity && severity !== "无") { let bgColor = (severity.includes("轻微")) ? "#00AA00" : (severity.includes("中等") ? "#FFCC00" : "#FF0000"); const tag = document.createElement('div'); tag.style.cssText = `background-color:${bgColor}; color:${bgColor==="#FFCC00"?'#000':'#FFF'}; padding:1px 6px; font-size:11px; font-weight:bold; border:1px solid #dfdfdf; box-shadow:1px 1px 0px #000; display:flex; align-items:center;`; tag.innerHTML = `${label}:${severity}`; tagsContainer.appendChild(tag); } }); if (tagsContainer.children.length > 0) { guideRow.appendChild(tagsContainer); infoDiv.appendChild(document.createElement('br')); infoDiv.appendChild(guideRow); } } initRankings(); initMain(); })();