// ==UserScript== // @name 豆瓣评分增强大师 // @namespace doveboy_js // @version 10.44 // @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 // @grant GM_addStyle // @grant GM_setClipboard // @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 backend.metacritic.com // @connect letterboxd.com // @connect www.allocine.fr // @connect graphql.anilist.co // @connect www.omdbapi.com // @connect bgm.tv // @connect myanimelist.net // @connect neodb.social // @connect zduo.me // @connect wikidata.org // @connect metacritic.com // @require https://lib.baomitu.com/jquery/3.6.0/jquery.min.js // @require https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js // ==/UserScript== (function() { 'use strict'; // Base64 图标 const AL_ICON = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAD5UExURRkhLRkhLRkhLRkhLUxpcRkhLRkhLRkhLRkhLRkhLRkhLRkhLRkhLRkhLf///v///xgfLACq/wCs/xQdKgN4sfv7+wCo/A1Pc6irrwR1rvf3+GZrdKCjp6WorRkfKv39/QVzqmRpcUpQWuHi4zpBSygvO5WZnjE3Qtzd3xAYJfHy8uXm5yW4/+r3/hFAXX6DiQR9uQZupHd7grCzt25zelNYYsvN0Pb8/2XM/8zv/wmx/xkfKTy//3zU/yIqNQR5s4qNkxUwQ8DCxrq8vyxAUF1iat7z/mGUsAdikqTU7luPrtLT1U7G/4zY/tHT1avj/hONyr/p/rXm/lS/nxsAAAANdFJOU/ua3pYAfRAOd9nd4J6x3JfpAAABaUlEQVQ4y4WTh1LCQBCGDw0B1OQud4IhCakUKaJIb/be9f0fxivRgeESvskwyew3+yfLHlBy+QLQpIBCXlVAbjehzJWMCvIpdWpkQUFLZQ+AdGGljgQuvdxV479erTuOU7978v1eF0kEcgopxccSxtiXCRc3UKc8lwwDH0oiSNjiwkMnSbjidd2byAVUGwlB/8RSgQxpgmdR4aQj71CHOmxVmDGRCaj2SoWP8Jjm/GCJQO4tKjiaCXmGJMKhFSto2kWasdwUUIP2hu2wEbap+D3bEIjN3s6Kooh/x2IzwuRDoP8FH8WyPJ+7DBQLqBrFUxJMv44E10gIZMDezSsyPHo3XpQ4Ri/uAPq0AewHtm0Ht6zXu8HBZ0JA1TYb47BJCGkGrNl0tiaIVRnVUPzBEI7fDMy4jCPOzUrFHMRbxB9eygy/i/4GxVjdXU38uOtrnbD2Ww7Ozvajp2bSDu+BChQ1u5Ok7GdV5Reeuka5jCikYgAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAABJRU5ErkJggg==" const LBX_ICON = "data:image/vnd.microsoft.icon;base64,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Bv9elyT/ZVdD/2ZVRP9tWkT/upJB/+u2QP/0vED/9LxA/9+sQf+Wd0P/ZlVE/2ZVRP9mVUT/aFZER2dWRJVmVUT/ZlVE/y1tq/8AgP//AID//wCA//8AgP//AID//wCA//8Meuf/XFpS/1m9Ef9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9ZvRH/cV9D/+KvQP/0vED/9LxA//S8QP/0vED/9LxA//S8QP+0jkL/ZlVE/2ZVRP9nVkSVZ1VEv2ZVRP9KYXf/AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//9ap8n/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP/SxWv/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP+NcUP/ZlVE/2dVRL9mVkTZZlVE/x5zxv8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AoD//+32//9l3Dj/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/eeAq//768f/0vEH/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA/8mdQf9mVUT/ZlZE2WdVRPNmVUT/Cnzs/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8gj////////3rXhv9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP+r42H///////XEV//0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/57JA/2ZVRP9mVUTyZ1VE82ZVRP8KfOz/AID//wCA//8AgP//AID//wCA//8AgP//AID//yGQ////////eteG/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/6vjYf//////9cRX//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/nskD/ZlVE/2dVRPNmVkTZZlVE/x5zxv8AgP//AID//wCA//8AgP//AID//wCA//8AgP//A4H//+32//9l3Dj/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/eeEq//768f/0vEH/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA/8mdQf9mVUT/ZlZE2WdVRL9mVUT/SmF3/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//W6fK/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1Tg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RP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2dVReloVkU7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoVkZiZlVF+WZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVF+WhWRmIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKpVVQNmVkSOZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlZEjqpVVQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKpVVQNmVUWxZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUWxqlVVAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmVkSOZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZWRI4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoVkZiZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/aFZGYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoVkU7ZlVF+WZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRfloVkU7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmVUQeZ1VF6WZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/Z1VF6WZVRB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZ1ZFxGZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9nVkXE////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1dEYWZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2dXRGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcGBQEGZVRepmVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUXqcGBQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhWRoBmVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2hWRoAAAAAAAAAAAAAAAAAAAAAAAAAAAHZiTg1nVkXuZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9nVkXudmJODQAAAAAAAAAAAAAAAAAAAABmVkVzZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZWRXMAAAAAAAAAAAAAAAAAAAAAZ1VE1WZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZV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QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/5rFA/2xZRP9mVUT/ZlVE/2ZVRP9mVUSlZ1VFy2ZVRP9mVUT/ZlVE/0Jlhv8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//7jb///9/v//X9dD/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/gN4q//7+/P/77Mr/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP+ZekP/ZlVE/2ZVRP9mVUT/Z1VFy2dWRd9mVUT/ZlVE/2ZVRP8icb//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wuF/////////////4rVsv9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/8jkgf////////////S+SP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/xJlB/2ZVRP9mVUT/ZlVE/2dWRd9nVUTsZlVE/2ZVRP9mVUT/D3nj/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8vl/////////////+h2Nr/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP/j6Kb////////////2yGP/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA/9+sQf9mVUT/ZlVE/2ZVRP9nVUTsZlVF+WZVRP9mVUT/ZlVE/wR+9v8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//VKn/////////////v+Pt/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/8e/G////////////99J+//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/tuED/ZlVE/2ZVRP9mVUT/ZlVF+WZVRflmVUT/ZlVE/2ZVRP8Efvb/AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//1Sp/////////////7/j7f9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA//Hvxv////////////fSfv/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/7bhA/2ZVRP9mVUT/ZlVE/2ZVRflnVUTsZlVE/2ZVRP9mVUT/D3nj/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8wl/////////////+h2Nr/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP/j6Kj////////////2yGP/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA/9+sQf9mVUT/ZlVE/2ZVRP9nVUTsZ1ZF32ZVRP9mVUT/ZlVE/yJxv/8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//DYb/////////////itWy/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/yeSC////////////9L5I//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/EmUH/ZlVE/2ZVRP9mVUT/Z1ZF32dVRctmVUT/ZlVE/2ZVRP9CZYb/AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//+42////f7//1/XQ/9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/3/eKf/+/v3/++zK//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/mXpD/2ZVRP9mVUT/ZlVE/2dVRctmVUSlZlVE/2ZVRP9mVUT/YldL/wp76/8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//SKP//7Pd6f9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/7uy9//bOc//0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/5rFA/2xZRP9mVUT/ZlVE/2ZVRP9mVUSlZ1VFfmZVRP9mVUT/ZlVE/2ZVRP8+Zoz/AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wF//f9fwFj/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/4rKOP/zu0D/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA/519Qv9mVUT/ZlVE/2ZVRP9mVUT/Z1VFfmhWR1NmVUT/ZlVE/2ZVRP9mVUT/ZlVE/yNxvv8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//83aZn/ZGc6/1XWBf9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1XWBf9kZzr/p4VC//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA/8OZQf9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2hWR1NtVUkVZlVE/mZVRP9mVUT/ZlVE/2ZVRP9iV0r/HHTK/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wCA//8tbav/ZlVE/2ZVRP9idDT/VdYF/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1XWBf9idDT/ZlVE/2ZVRP+0jkL/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA/8yfQf9rWUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP5tVUkVAAAAAGZVRNJmVUT/ZlVE/2ZVRP9mVUT/ZlVE/2RWRv8wbKf/An/7/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AID//wZ+9P8/ZYv/ZlVE/2ZVRP9mVUT/ZlVE/2RnOv9Yww7/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1TgAP9U4AD/VOAA/1jDDv9kZzr/ZlVE/2ZVRP9mVUT/ZlVE/5x8Q//stkH/9LxA//S8QP/0vED/9LxA//S8QP/0vED/9LxA//S8QP/0vED/8rpA/7KMQv9nV0T/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUTSAAAAAAAAAABnVUWNZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/1dcXv8nb7f/B33x/wCA//8AgP//AID//wCA//8AgP//DHvo/zBsp/9eWVH/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVD/2CELf9ZvhD/Vd8A/1TgAP9U4AD/VOAA/1TgAP9V3wD/Wb4Q/2CELf9mVUP/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/cF1E/7KMQv/jsEH/9LxA//S8QP/0vED/9LxA//S8QP/ptEH/vpRC/3pkRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/Z1VFjQAAAAAAAAAAaVVGM2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2RWRv9SXmj/RmJ9/0Blif9IYXn/VVxi/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2VfPv9heDP/YIYs/2CGLP9heDP/ZV8+/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/31mRP+OckP/m3xC/5J1Qv+CaUP/Z1dE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2lVRjMAAAAAAAAAAAAAAABnVUTVZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2dVRNUAAAAAAAAAAAAAAAAAAAAAZlZFc2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVkVzAAAAAAAAAAAAAAAAAAAAAHZiTg1nVkXuZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9nVkXudmJODQAAAAAAAAAAAAAAAAAAAAAAAAAAaFZGgGZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/aFZGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBgUBBmVUXqZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVF6nBgUBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ1dEYWZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2dXRGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wFnVkXEZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2dWRcT///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZlVEHmdVRelmVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2dVRelmVUQeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoVkU7ZlVF+WZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRfloVkU7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhWRmJmVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9oVkZiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZlZEjmZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVkSOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKpVVQNmVUWxZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUWxqlVVAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqlVVA2ZWRI5mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVkSOqlVVAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaFZGYmZVRflmVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRfloVkZiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoVkU7Z1VF6WZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2dVReloVkU7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZVRB5nVkXEZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2dWRcRmVUQeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AWdXRGFmVUXqZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZVRP9mVUT/ZlVE/2ZV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" const ALC_ICON = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHYAAAB2BAMAAADviXoiAAAAGFBMVEUAAAAmJib/////ywBcUzPIoQmUehKRkZFw3PDCAAAAAXRSTlMAQObYZgAAA2BJREFUWMPdmU1P20AQQKv+AzeOe3WjSD1HG+fuptBz5JS7lY87qBJ/vxCyed6ZHS94b8wBiOTHzL7xLvbw5VPF18Vb1B8mF8OYQhIfqFZHPRUFTqNTYdA0nEaBk+hkOIoQ70Wf2+I1ymcBpyv+VxB/gqpTaX8WYTwlE8uk0dSJih8LHd/HqxaoBY+lXRbx+DWSGE1hlIc+FGanVWjnVtcfzcTGYu+dcxuxZIOVFZ/cSzSizUbJraz3Eq3/HC866njr3qIXru20xOzKrgojMaxq7fzKrmlyhCWtYpFFYp0WybDIQjWJYektrpBFj2Ep+VaYv/Tg2R2/j6KH7A9/K3XejfOxhv0Gq0u+e7mW5SIrUjTsdddQ48HdoiAES3OrDjl3jujlPob1JVfOx/n36fL94dxRyKBoUTIrJI7X/GtVNOz1xigFuvf2NvLArXWHOkegt0MWXQqW69USO+6vVi8YtmXXqa7OAlklLKqELARtDVmokrKo02lZsNzMsZIrPiBLsELWipIpAjbQzHXiPrTuLDQrWTevVKFEozm4ozeDDglZmkUWie57r6AxWY65Q7Dczh19Ja1o0rC9yOLaSm9hGuzZpT6T5S26Etu/lu0l1YYF6PPOYIvhpWJnJNmOEktIZJkssnbUj6xRFj+9Or52abaC3QbsOsGyyFaxzTiLLFgiwdJUfkLWOIsslCMrzVYWu06z5Y0tTwG7gY3tBWTxdEbE9gJ7EFksnmjVIavYGdeFt9YOVp85XB9l16PnFbJ6WCVLn7EE9YVsEz9jH6WsFayQxdlOg4kt9altaP89Amhi7EqyusEVsugvsmgvf7sJGgKLrAVsRPTBJ4ZFFpqlaM67po1vYf2sgiwM/T2fXhd5+YponpFMWTyf8fkoVBmy0BMsAlXmgjuqvN3iD/KJAXYZyvJxM78Xz8Bm0TO5dea9eDKzX1MqsWXtZ37dpZI7WAQdghVFd6gixDuOVfQB1ijZfqebGTU/wZrvklXMFe+S9jssspo+Nqio7XdnZG3aaNrafGdH1t6Yj1izAmQ1RyCRNjGjmDeiXmYU6dmIPQ6yZzJ2MJNJz4KM4VnODCpj9pUzc8ub9eXPGPNnm/kzVWA78mfI+bPr/Jl5/qwe2EKnwnXe/0Sm0Rn/A/pM8R8w2HBWwA4YRgAAAABJRU5ErkJggg==" // 样式注入 GM_addStyle(` #content h1 { margin-bottom: 0px !important; padding-bottom: 0px !important; line-height: 1.1 !important; } #dme-header-ratings { display: inline-flex !important; flex-wrap: wrap; width: 100%; align-items: center; margin: 4px 0 10px 0 !important; padding: 0 !important; gap: 8px; user-select: none; clear: both; } .drdm-capsule { display: inline-flex; align-items: center; border-radius: 4px; font-size: 13px; height: 24px; overflow: hidden; box-shadow: 0 1px 2px rgba(0,0,0,0.1); font-family: Arial, sans-serif; } .drdm-capsule a { text-decoration: none !important; display: flex; align-items: center; height: 100%; } /* 烂番茄胶囊 */ .drdm-capsule.rt-cap { background: #fff; border: 1px solid #ddd; } .drdm-rt-chip { display: flex; align-items: center; padding: 0 6px; height: 100%; font-weight: bold; color: #fff; } .drdm-rt-chip.critics { background: #fa320a; } .drdm-rt-chip.audience { background: #ffb300; color: #2c2c2c; } /* Metacritic 双拼胶囊样式 */ .mc-cap { background: #fff; border: 1px solid #ddd; display: inline-flex !important; align-items: stretch; height: 24px; margin-right: 8px; border-radius: 4px; overflow: hidden; } .drdm-mc-chip { padding: 0 7px; display: flex; align-items: center; font-weight: bold; font-size: 13px; height: 100%; } .drdm-mc-chip.users { background: #fccb30; color: #000; border-left: 1px solid #ddd; } /* 统一黄色系胶囊 (Meta, Letterboxd, Allocine) */ .drdm-capsule.yellow-cap { background: #ffcc33; border: 1px solid #d9aa00; color: #111; padding: 0 7px; font-weight: bold; } .drdm-capsule img { height: 14px; margin-right: 5px; } .view-original-btn { display: block !important; margin: 12px auto 0 !important; padding: 4px 0 !important; border: 1px solid #556783 !important; color: #556783 !important; border-radius: 2px !important; font-size: 13px !important; text-decoration: none !important; text-align: center !important; width: 120px !important; background: #f0f3f5 !important; } `); const movieId = window.location.pathname.split('/')[2]; const orangeColor = "#f0ad4e"; const tmdbAuth = "Bearer eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIyMzc1ZGIzOTYwYWVhMWI1OTA1NWMwZmM3ZDcwYjYwZiIsInN1YiI6IjYwYmNhZTk0NGE0YmY2MDA1OWJhNWE1ZSIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.DU51juQWlAIIfZ2lK99b3zi-c5vgc4jAwVz5h2WjOP8"; // 核心:强制排序插入逻辑 const CAPSULE_ORDER = ['header-rt-score', 'header-alc-score', 'header-mtc-score', 'header-anilist-score', 'header-lbx-score']; function renderHeaderCapsule(id, html) { if (document.getElementById(id)) return; const container = getHeaderContainer(); if (!container) return; const tempWrap = document.createElement('div'); tempWrap.innerHTML = html; const newEl = tempWrap.firstElementChild; newEl.id = id; // 查找位置:遍历顺序表,寻找当前 ID 之后的已存在元素 const myIndex = CAPSULE_ORDER.indexOf(id); let inserted = false; for (let i = myIndex + 1; i < CAPSULE_ORDER.length; i++) { const afterEl = document.getElementById(CAPSULE_ORDER[i]); if (afterEl) { container.insertBefore(newEl, afterEl); inserted = true; break; } } if (!inserted) container.appendChild(newEl); } function getHeaderContainer() { let container = document.getElementById('drdm-header-scores'); if (container) return container; container = document.createElement('div'); container.id = 'drdm-header-scores'; // --- 核心样式调整 --- // gap: 10px -> 统一所有胶囊之间的水平间距 // margin-top: 12px -> 调大胶囊与影视标题之间的距离 // margin-left: 0px -> 确保与标题左端对齐(如果还觉得不齐,可尝试 -1px) container.setAttribute('style', ` display: flex !important; flex-wrap: wrap; gap: 10px; margin-top: 12px; margin-bottom: 10px; align-items: center; clear: both; margin-left: 0px; `); // 插入在标题(h1)之后 const titleHeader = document.querySelector('#content h1'); if (titleHeader) { titleHeader.after(container); return container; } return null; } // --- 1. 排行榜终极修复:适配动画页面 rank-label 并统一合并 --- function initRankings() { const titleH1 = document.querySelector('#content h1'); if (!titleH1) { setTimeout(initRankings, 100); return; } // 创建唯一的 Flex 容器 let container = document.getElementById('unified-rank-wrapper'); if (!container) { container = document.createElement('div'); container.id = 'unified-rank-wrapper'; // 关键:margin-top 设为 10px 确保和标题有间距,底部 12px container.style.cssText = "display: flex !important; flex-wrap: wrap !important; gap: 8px !important; margin: 10px 0 12px 0 !important; padding: 0 !important; align-items: center !important; clear: both !important; width: 100% !important;"; // 确保容器在标题上方 titleH1.parentNode.insertBefore(container, titleH1); } const renderBadge = (no, name, url, isNative = false) => { const badgeId = isNative ? 'native-sync-badge' : `rank-${name}`; if (document.getElementById(badgeId)) return; const html = ` ${no} ${name} `; container.insertAdjacentHTML('beforeend', html); }; const syncNativeRank = () => { // 增加对动画页面 .rank-label 的识别 const nativeSelectors = '.top250, .top-list-rank, .rank-banner, .rank-label, .billboard'; document.querySelectorAll(nativeSelectors).forEach(el => { if (el.id === 'unified-rank-wrapper' || el.closest('#unified-rank-wrapper')) return; // 尝试多种方式提取排名 (No.XX) let noText = "No."; const noEl = el.querySelector('.rank-label-no, .top250-no, .rank, [class*="no"]'); if (noEl) { noText = noEl.innerText.trim(); } else { const match = el.innerText.match(/No\.?\s?\d+/i); if (match) noText = match[0].replace(/\s/g, ''); } // 提取榜单名称 let titleText = "豆瓣高分榜"; const linkEl = el.querySelector('.rank-label-link a, .top250-link, a'); if (linkEl) { titleText = linkEl.innerText.trim(); } else { titleText = el.innerText.replace(noText, '').replace(/[\s\(\)()]/g, '').trim(); } if (titleText.length > 15) titleText = "豆瓣高分榜"; const url = el.querySelector('a')?.href || window.location.href; renderBadge(noText, titleText, url, true); el.style.display = 'none !important'; // 隐藏原标签 el.remove(); // 彻底移除防止占位 }); }; // 立即执行 + 监听异步加载 syncNativeRank(); const obs = new MutationObserver(syncNativeRank); obs.observe(document.body, { childList: true, subtree: true }); // 获取 BGM / MAL 等第三方榜单 const movieId = (window.location.pathname.match(/subject\/(\d+)/) || [])[1]; 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]) { renderBadge((data[k].prefix || 'No.') + data[k].list[movieId], data[k].short_title, data[k].href); } } } catch(e){} } } }); } // 判定是否为动画/动漫页面 function isAnime() { var genres = document.querySelectorAll('span[property="v:genre"]'); for (var i = 0; i < genres.length; i++) { if (genres[i].textContent.includes('动画')) return true; } // 兜底逻辑:如果在标签(Tags)里发现“动画”或“动漫” var tags = document.querySelector('#db-tags-section'); if (tags && (tags.textContent.includes('动画') || tags.textContent.includes('动漫'))) return true; return false; } // --- 2. 核心控制器 --- async function initMain() { const movieId = location.href.match(/subject\/(\d+)/)?.[1]; 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; // --- 修复后的 IMDb 扩展评分加载逻辑 --- // --- 修复后的 IMDb 扩展评分加载逻辑 --- if (imdbId) { // 使用统一的 Wikidata 桥梁函数 getExtraIdsFromWikidata(imdbId, function(ids) { // 这里的 data.Title 来自 OMDb 请求的结果 var movieTitle = (typeof data !== 'undefined' && data.Title) ? data.Title : document.title.split('(豆瓣)')[0].trim(); // 1. 加载 Allocine if (ids.allocineId) { fetchAllocineDualScores(ids.allocineId); } // 2. 加载 Metacritic // 注意:即便 Wikidata 没查到 mcId,函数内部也有标题兜底逻辑 fetchMetacriticDualScores(ids.mcId, movieTitle); // 3. 渲染大中华差异对比(新功能) if (ids.labels) { renderKanjiZoneComparison(ids.labels); } if (ids.claims) { renderBoxOfficeModule(ids.claims); renderRatingModule(ids.claims); } }); } if (imdbId) { processOMDb(imdbId); processRottenTomatoes(imdbId); processTMDB(imdbId); processNeoDB(movieId); processLetterboxd(imdbId); // === 动漫专属逻辑开始 === if (isAnime()) { // AniList 通常也是动漫专用,建议也放在这里 processAniList(imdbId); // 获取当前豆瓣页面的电影/动画标题,用于搜索 const titleHeader = document.querySelector('h1 [property="v:itemregulated"]') || document.querySelector('h1 span'); const title = titleHeader ? titleHeader.innerText.replace(window.location.pathname.split('/')[2], '').trim() : ''; if (title) { processBangumi(title); processMAL(title); } } // === 动漫专属逻辑结束 === } 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. 各平台逻辑 --- 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); let tScore = json.criticsScore?.score; let aScore = json.audienceScore?.score; if (tScore || aScore) { let html = `
`; if (tScore) html += `🍅 ${tScore}%`; if (aScore) html += `🍿 ${aScore}%`; html += `
`; renderHeaderCapsule('header-rt-score', html); } } } }); } catch(e) {} } }); } /* --- Metacritic 修复版核心逻辑 --- */ // 2. 抓取与解析 function fetchMetacriticDualScores(mcId, title) { let path = mcId || ("movie/" + title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '')); const url = "https://www.metacritic.com/" + path; GM_xmlhttpRequest({ method: "GET", url: url, headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0" }, onload: function(resp) { if (resp.status !== 200) return; const parser = new DOMParser(); const doc = parser.parseFromString(resp.responseText, "text/html"); // 使用最新的选择器 const criticEl = doc.querySelector('div[data-testid="global-score-wrapper"]:has(a[href*="critic-reviews"]) span[data-testid="global-score-value"]'); const userEl = doc.querySelector('div[data-testid="global-score-wrapper"]:has(a[href*="user-reviews"]) span[data-testid="global-score-value"]'); const criticScore = criticEl ? criticEl.textContent.trim() : "N/A"; const userScore = userEl ? userEl.textContent.trim() : "N/A"; if (criticScore !== "N/A" || userScore !== "N/A") { renderMetacriticDoubleCapsule(path, criticScore, userScore); } } }); } // 3. 渲染 function renderMetacriticDoubleCapsule(path, critic, user) { // 1. 定义 Metacritic M 图标的 Base64 const mcIconBase64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAAElBMVEUAAAAzMzP/zDT+/v5oX0elmG641eaPAAAAAXRSTlMAQObYZgAAA3ZJREFUaN69mVFym0AQBVO6ARL8WxQ5gGulAyzGBwDL979K4tjmie2dmVKo8nxZpKbV83YFBH65dej/lv3PYbPqf9tVTw/29yggwq9nPfL1uwi9Xfv6GUTcz4r7owrzD2tHP2KIB3j/qMVQCPtvU/NZ7bSAEA9wy81dCaEhfIHcFDVCwRP43bBeQ0LRj+qCIQ7oB8FXYD8JnsKB+bFGRwH9PuHJFBjQNE3T+ndrKpgBtG8ppeuqdSwUIDCX/emz1uOLC6BASgWhq89gJfiS1spFjk81gQEDqC7KEYBYQENIgQAuYbqvq61wMARO6qYCAVyCtwSF+4XABGdjAihoBn+CLqW6wkiAImQEVGiLGbSLsYiGwlIFNMzQUjhqBq4BM6RCWwOcLcC1oqAQBMgGIG9muW7WgRHwl/SsNO4UjgQMBiDrTykoBC+C9k75VCoQkBvU/Vlgq6AQBCguhB/yawRQ2ISAXaDQBIBCVwIG7GEBoLBNkRl2CQAqlIC5NoBCpMLyDdAiUEDLSIWxAJg/wlxX0DIIwGuBZqBCJ4BWEechKOhguwUMmKCqoGMCYBuk5Cno0BZwRgSGgo4QwEWkwnpAG0H7iBlSQZ8dgKugj+MGAEtLQZ8CwPX1zVLIDuA0fwEu64aAwqVxACl9AbSgUMh1wLff5aSzQAcFFQDrIv0Tn7GrcwRQft8TQCEGpAIAhQBwAgAKNmCWgABQ8AEnABwF/Rb0a3wBAAo+oEuqOVLg+QDXo1ABpzTeBEhBWBVOqhuFeaOgg6oWp3VPQcd0GBcWR4ECvDJlV4ECBIQKMzYiLu+uwtXYiNoIngIEeIMxNJ4CBLSKulF1FSDQCaAUHYVSoDkCMLsKOB8tAAyNo6BihrrTtBVYHQF94yk4ESiERxTGCmB4RKEXADNAIYhAgOwpcAICzoECJzD+8x4rdABoHajgTsAHGFSIJ5BCU1F4NnYRANb9asNa+Binp4IEGKENmKUQCvTmkzApxAJSYAq2gABU6LMU/CXow+eRbVWg7SWAGbAdKwKjBKDAXwT7OwhQYTBOxXikCgUSuAICsHrGwH5MAAUQECAFqEAC+32F/sb85M8BqND/LpZgwjsSS0ESGV8vAVdBFrfpo3l6f+g1T1z7X1TtJOx+WRdV1B9X1B+XG+A+wk+9NiaB+nGh/Wde3hMSN/8BSXUWJsXAq8kAAAAASUVORK5CYII=" // 2. 核心颜色逻辑 let bgColor = "#ffcc33"; // 默认黄色 (40-60) let textColor = "#000"; // 默认黑色 const score = parseInt(critic); if (!isNaN(score)) { if (score <= 39) { bgColor = "#ff0000"; // 红色 textColor = "#fff"; // 白色 } else if (score >= 61) { bgColor = "#66cc33"; // 绿色 textColor = "#fff"; // 白色 } } // 3. 构造 HTML const html = '
' + '' + // 前半个胶囊 (Expert Score) '
' + '' + '' + critic + '' + '
' + // 后半个胶囊 (User Score) '
' + '👤' + '' + user + '' + '
' + '
' + '
'; // 4. 渲染 if (typeof renderHeaderCapsule === 'function') { renderHeaderCapsule('header-mtc-score', html); } } /* --- Metacritic 联动逻辑结束 --- */ // ================================================================ // 核心逻辑:Wikidata 桥梁与双评分系统 // ================================================================ // 1. Wikidata 统一查询 (一次请求获取多个 ID 和各地区译名) function getExtraIdsFromWikidata(imdbId, callback) { if (!imdbId) return; const searchUrl = "https://www.wikidata.org/w/api.php?action=query&list=search&srsearch=haswbstatement:P345=" + imdbId + "&format=json&srnamespace=0"; GM_xmlhttpRequest({ method: "GET", url: searchUrl, onload: function(res) { try { const searchData = JSON.parse(res.responseText); const entityId = searchData.query.search[0]?.title; if (!entityId) { callback({}); return; } const entityUrl = "https://www.wikidata.org/w/api.php?action=wbgetentities&ids=" + entityId + "&props=claims|labels&format=json"; GM_xmlhttpRequest({ method: "GET", url: entityUrl, onload: function(res2) { try { const data = JSON.parse(res2.responseText); const entity = data.entities[entityId]; callback({ mcId: entity.claims.P1712?.[0]?.mainsnak?.datavalue?.value, allocineId: entity.claims.P1265?.[0]?.mainsnak?.datavalue?.value, labels: entity.labels || {}, claims: entity.claims || {} // 必须包含这一行 }); } catch (e) { callback({}); } } }); } catch (e) { callback({}); } } }); } // 电影分级全能版 (新增千与千寻 MPA ID: Q18665334) function renderRatingModule(claims) { if (!claims) return; const RATING_DB = { // MPA (P1657) "Q219557": "G (全年龄)", "Q18665337": "G (全年龄)", "Q219555": "PG (建议陪同)", "Q18665338": "PG (建议陪同)", "Q18665334": "PG (建议陪同)", // 千与千寻专用 "Q219554": "PG-13 (13+)", "Q18665339": "PG-13 (13+)", "Q219552": "R (17+)", "Q18665340": "R (17+)", "Q219553": "NC-17 (18+)", "Q18665341": "NC-17 (18+)", // EIRIN (P2756 & P1144 - 日本) "Q23790275": "G (全年龄)", "Q6708782": "G (全年龄)", "Q23790278": "PG12 (12+)", "Q23790279": "PG12 (12+)", "Q6708785": "PG12 (12+)", "Q23790281": "R15+ (15+)", "Q6708788": "R15+ (15+)", "Q23790282": "R18+ (18+)", "Q6708790": "R18+ (18+)", // Kijkwijzer (P2684 & P1142 - 荷兰) "Q23649977": "AL (全年龄)", "Q12061936": "AL (全年龄)", "Q23649978": "6 (6+)", "Q12061937": "6 (6+)", "Q23649981": "9 (9+)", "Q12061938": "9 (9+)", "Q23649983": "12 (12+)", "Q12061939": "12 (12+)", "Q108130768": "14 (14+)", "Q23649984": "16 (16+)", "Q12061940": "16 (16+)", "Q112246473": "18 (18+)", // ClassInd (P3216 & P2334 - 巴西) "Q26678725": "L (全年龄)", "L": "L (全年龄)", "Q26678730": "10 (10+)", "10": "10 (10+)", "Q26678733": "12 (12+)", "12": "12 (12+)", "Q26678735": "14 (14+)", "14": "14 (14+)", "Q26678737": "16 (16+)", "16": "16 (16+)", "Q26678741": "18 (18+)", "18": "18 (18+)" }; const PROPS = [ { id: 'P1657', name: 'MPA' }, { id: 'P2756', name: 'EIRIN' }, { id: 'P1144', name: 'EIRIN' }, { id: 'P2684', name: 'Kijkwijzer' }, { id: 'P1142', name: 'Kijkwijzer' }, { id: 'P3216', name: 'ClassInd' }, { id: 'P2334', name: 'ClassInd' } ]; let htmlItems = ''; PROPS.forEach(p => { if (claims[p.id]) { let ratingStrings = []; claims[p.id].forEach(claim => { let val = claim.mainsnak.datavalue?.value; let key = (typeof val === 'object') ? val.id : val; if (key && RATING_DB[key] && !ratingStrings.includes(RATING_DB[key])) { ratingStrings.push(RATING_DB[key]); } }); if (ratingStrings.length > 0) { htmlItems += `
  • ${p.name}: ${ratingStrings.join(' / ')}
  • `; } } }); if (!htmlItems) return; const aside = document.querySelector('.aside'); if (!aside) return; const ratingDiv = document.createElement('div'); ratingDiv.className = "indent"; ratingDiv.id = "db-movie-ratings-pro"; ratingDiv.style.marginBottom = "30px"; ratingDiv.innerHTML = `

    电影分级 · · · · · ·

    `; let boxOffice = document.getElementById('db-movie-boxoffice-enhanced'); if (boxOffice) { boxOffice.after(ratingDiv); } else { aside.prepend(ratingDiv); } } // 票房与成本增强版 (支持自动货币识别) function renderBoxOfficeModule(claims) { const CURRENCY_MAP = { "Q1370": "$", // 美元 "Q17": "¥", // 日元 "Q4916": "€", // 欧元 "Q8146": "¥", // 人民币 "Q25344": "£", // 英镑 "Q188": "DM", // 马克 }; function formatMoney(amount, unitUrl) { const qid = unitUrl ? unitUrl.split('/').pop() : "Q1370"; const symbol = CURRENCY_MAP[qid] || "$"; const num = parseFloat(amount); if (num >= 1e8) return symbol + (num / 1e8).toFixed(2) + " 亿"; if (num >= 1e4) return symbol + (num / 1e4).toFixed(0) + " 万"; return symbol + num.toLocaleString(); } let costHtml = ''; if (claims.P2130) { const costData = claims.P2130[0].mainsnak.datavalue.value; costHtml = `
  • 制作成本: ${formatMoney(costData.amount, costData.unit)}
  • `; } let boxHtml = ''; if (claims.P2142) { const boxData = claims.P2142[0].mainsnak.datavalue.value; boxHtml = `
  • 全球票房: ${formatMoney(boxData.amount, boxData.unit)}
  • `; } if (!costHtml && !boxHtml) return; const aside = document.querySelector('.aside'); if (!aside) return; const boxDiv = document.createElement('div'); boxDiv.className = "indent"; boxDiv.id = "db-movie-boxoffice-enhanced"; boxDiv.style.marginBottom = "30px"; boxDiv.innerHTML = `

    电影票房 · · · · · ·

    `; const kanjiZone = document.getElementById('db-kanji-comparison'); if (kanjiZone) { kanjiZone.after(boxDiv); } else { aside.prepend(boxDiv); } } // 新增:汉字圈名字对比模块(含澳门、日本,过滤条件计入澳门、不计日本) function renderKanjiZoneComparison(labels) { if (!labels) return; // 1. 定义大中华五地配置(计入过滤条件) const gcRegions = [ { name: "中国大陆", langCodes: ["zh-cn", "zh-hans"] }, { name: "中国香港", langCodes: ["zh-hk", "zh-hant-hk"] }, { name: "中国澳门", langCodes: ["zh-mo", "zh-hant-mo"] }, { name: "中国台湾", langCodes: ["zh-tw", "zh-hant-tw"] }, { name: "新加坡", langCodes: ["zh-sg", "zh-hans-sg"] } ]; // 2. 定义日本配置(不计入过滤条件) const jpRegion = { name: "日本", langCodes: ["ja"] }; // 3. 提取大中华五地的有效译名 const gcResults = []; gcRegions.forEach(r => { let value = ""; for (let code of r.langCodes) { if (labels[code] && labels[code].value) { value = labels[code].value.trim(); break; } } if (value) { gcResults.push({ label: r.name, value: value }); } }); // 核心过滤:大中华五地(大陆、香港、澳门、台湾、新加坡)仅有一项或零项有值,则整个模块不出现 if (gcResults.length <= 1) return; // 4. 提取日本的有效译名,并合并到最终结果中 const finalResults = [...gcResults]; let jpVal = ""; for (let code of jpRegion.langCodes) { if (labels[code] && labels[code].value) { jpVal = labels[code].value.trim(); break; } } if (jpVal) { finalResults.push({ label: jpRegion.name, value: jpVal }); } // 5. 寻找豆瓣右侧边栏容器并渲染 const aside = document.querySelector('.aside'); if (!aside) return; // 创建汉字圈名字对比模块的 DOM const comparisonDiv = document.createElement('div'); comparisonDiv.id = "db-kanji-comparison"; comparisonDiv.className = "indent"; comparisonDiv.style.marginBottom = "30px"; // 生成模块标题(完美契合豆瓣原生样式) let html = `

    汉字圈名字对比 · · · · · ·

    `; comparisonDiv.innerHTML = html; // 插入到右侧最上方 aside.insertBefore(comparisonDiv, aside.firstChild); } // 2. 修正后的 Allocine 抓取逻辑 (将法式逗号替换为点号) function fetchAllocineDualScores(acId) { const url = "https://www.allocine.fr/film/fichefilm_gen_cfilm=" + acId + ".html"; GM_xmlhttpRequest({ method: "GET", url: url, onload: function(resp) { if (resp.status !== 200) return; const doc = new DOMParser().parseFromString(resp.responseText, "text/html"); let pressScore = "N/A", userScore = "N/A"; const ratingItems = doc.querySelectorAll('.rating-item'); ratingItems.forEach(item => { const titleEl = item.querySelector('.rating-title'); const noteEl = item.querySelector('.stareval-note'); if (titleEl && noteEl) { const titleText = titleEl.textContent.trim(); // 这里是核心改动:获取文本后立即将 ',' 替换为 '.' const noteText = noteEl.textContent.trim().replace(',', '.'); if (noteText !== "--") { if (titleText.includes("Presse")) { pressScore = noteText; } else if (titleText.includes("Spectateurs")) { userScore = noteText; } } } }); if (pressScore !== "N/A" || userScore !== "N/A") { renderAllocineDoubleCapsule(acId, pressScore, userScore); } } }); } // 3. Allocine 渲染 (按要求配色) function renderAllocineDoubleCapsule(id, press, user) { const html = '
    ' + // 这里删掉了 margin-right '' + // 前半部分:媒体分 (红色背景) '
    ' + // 移除了 filter: brightness(10),保持图标原色 ' ' + '' + press + '' + '
    ' + // 后半部分:用户分 (黄色背景) '
    ' + // 用户图标:使用和你 Meta 评分一样的 👤 图标 '👤' + '' + user + '' + '
    ' + '
    ' + '
    '; renderHeaderCapsule('header-alc-score', html); } function processLetterboxd(imdbId) { const url = "https://letterboxd.com/imdb/" + imdbId; GM_xmlhttpRequest({ method: "GET", url: url, onload: function(res) { const ratingMatch = res.responseText.match(/\"ratingValue\":\s*([0-9.]+)/); if (ratingMatch) { const score = parseFloat(ratingMatch[1]).toFixed(1); const html = `
    ${score}
    `; renderHeaderCapsule('header-lbx-score', html); } } }); } // --- 其他渲染逻辑 --- function processOMDb(imdbId) { GM_xmlhttpRequest({ method: "GET", url: "https://www.omdbapi.com/?i=" + imdbId + "&apikey=thewdb", // 确认apikey正确 onload: function(res) { if (res.status === 200) { const data = JSON.parse(res.responseText); if (data.Response === "True") { // 1. 原有的 IMDb 渲染逻辑 (保持不变) if (data.imdbRating !== 'N/A') { renderScoreToBlock("block-imdb", "IMDb评分", data.imdbRating, data.imdbVotes, "https://www.imdb.com/title/" + imdbId + "/"); } // 2. 插入新的 Metacritic 联动流程 // 注意:这里不再用 .then(),改用回调函数以获得最佳兼容性 getExtraIdsFromWikidata(imdbId, function(ids) { fetchMetacriticDualScores(ids.mcId, data.Title); }); } } } }); } 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 processNeoDB(doubanId) { if (!doubanId) return; GM_xmlhttpRequest({ method: "GET", url: "https://neodb.social/api/catalog/fetch?url=https://movie.douban.com/subject/" + doubanId + "/", headers: { "Accept": "application/json" }, onload: function(res) { if (res.status === 200) { try { const data = JSON.parse(res.responseText); if (data && data.rating) { // 渲染至我们刚刚在侧边栏创建的 block-neodb 容器中 renderScoreToBlock("block-neodb", "NeoDB评分", data.rating.toFixed(1), data.rating_count.toLocaleString(), "https://neodb.social" + data.url); } } catch(e) { console.error("NeoDB 解析失败"); } } } }); } 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; // 原始百分比分数 (如 85) const siteUrl = result.data.Media.siteUrl; if (rating) { // 保持百分比格式,拼接 % const formattedScore = `${rating}%`; // 直接使用脚本统一的 drdm-capsule yellow-cap 样式 const html = `
    ${formattedScore}
    `; renderHeaderCapsule('header-anilist-score', html); } } }); } catch(e) {} } }); } // ==================== 新增:动画评分获取与渲染模块 ==================== // 辅助延迟函数 const randomSleep = (max = 400, min = 200) => new Promise(resolve => setTimeout(resolve, Math.floor(Math.random() * (max - min + 1)) + min)); // 1. 获取 Bangumi 评分 function processBangumi(title) { const searchUrl = `https://bgm.tv/subject_search/${encodeURIComponent(title)}?cat=2`; // 获取豆瓣本页面的年份 const yearEl = document.querySelector(".year"); const dbYear = yearEl ? yearEl.textContent.replace(/\(|\)/g, "").trim() : null; GM_xmlhttpRequest({ method: "GET", url: searchUrl, onload: function(res) { try { const parser = new DOMParser(); const doc = parser.parseFromString(res.responseText, "text/html"); const items = doc.querySelectorAll("#browserItemList li"); let matchedResult = null; // 如果豆瓣页面有年份,优先匹配年份一致的项目 if (dbYear && items.length > 0) { for (let i = 0; i < items.length; i++) { const infoEl = items[i].querySelector(".info"); if (infoEl && infoEl.textContent.includes(dbYear)) { matchedResult = items[i]; break; } } } // 如果按年份没有匹配到,默认取第一项 if (!matchedResult && items.length > 0) { matchedResult = items[0]; } if (matchedResult) { const linkEl = matchedResult.querySelector("a.subjectCover"); const scoreEl = matchedResult.querySelector(".fade"); const countEl = matchedResult.querySelector(".tip_j"); if (linkEl && scoreEl) { const bgmUrl = "https://bgm.tv" + linkEl.getAttribute("href"); const score = parseFloat(scoreEl.innerText).toFixed(1); const count = countEl ? countEl.innerText.replace(/[^0-9]/g, "") : "0"; // 渲染到侧边栏,样式与 TMDB 完全保持一致 renderScoreToBlock("block-bangumi", "Bangumi评分", score, parseInt(count).toLocaleString(), bgmUrl); } } } catch (e) { console.error("解析 Bangumi 评分失败", e); } } }); } // 2. 获取 MyAnimeList (MAL) 评分 function processMAL(title) { const searchUrl = `https://myanimelist.net/search/prefix.json?type=anime&keyword=${encodeURIComponent(title)}&v=1`; // 获取豆瓣本页面的年份 const yearEl = document.querySelector(".year"); const dbYear = yearEl ? yearEl.textContent.replace(/\(|\)/g, "").trim() : null; GM_xmlhttpRequest({ method: "GET", url: searchUrl, onload: function(res) { try { const info = JSON.parse(res.responseText); const items = info.categories?.[0]?.items; if (items && items.length > 0) { let matchedItem = null; // 如果豆瓣页面有年份,优先匹配年份一致的项目 if (dbYear) { for (let i = 0; i < items.length; i++) { const item = items[i]; // MAL 返回的 aired 格式通常为 "Oct 2015" 或 "2015" const airedStr = item.payload?.aired || ""; if (airedStr.includes(dbYear)) { matchedItem = item; break; } } } // 如果按年份没匹配到,则默认取第一项 if (!matchedItem) { matchedItem = items[0]; } if (matchedItem && matchedItem.url) { const pageUrl = matchedItem.url; // 延迟请求避免高频被ban randomSleep(300, 100).then(() => { GM_xmlhttpRequest({ method: "GET", url: pageUrl, onload: function(pageRes) { try { const parser = new DOMParser(); const doc = parser.parseFromString(pageRes.responseText, "text/html"); const scoreEl = doc.querySelector(".fl-l.score"); if (scoreEl) { const scoreText = scoreEl.textContent.trim(); // 排除未开播无评分的情况 (N/A) if (scoreText === "N/A" || !scoreText) return; const score = parseFloat(scoreText).toFixed(1); const count = scoreEl.dataset.user ? scoreEl.dataset.user.replace(/users|,/g, "").trim() : "0"; renderScoreToBlock("block-mal", "MAL评分", score, parseInt(count).toLocaleString(), pageUrl); } } catch (err) { console.error("解析 MAL 页面失败", err); } } }); }); } } } catch (e) { console.error("获取 MAL 数据失败", e); } } }); } function renderScoreToBlock(blockId, label, score, votes, href) { const container = document.getElementById(blockId); if (!container || !score || score === "0.0" || score === "N/A") return; const starNum = Math.round(parseFloat(score)) * 5; container.innerHTML = `
    ${score}
    `; } 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(); injectTrendChart(); setTimeout(function() { injectSteamUI(); }, 200); (function addViewOriginalLogic() { const mainPic = document.querySelector('#mainpic'); if (!mainPic) return; const img = mainPic.querySelector('img'); if (img) { const rawUrl = img.src.replace(/photo\/[sl](_ratio_poster|pic)\/public\/(p\d+).+$/, "photo/l/public/$2.jpg"); const btn = document.createElement('a'); btn.className = 'view-original-btn'; btn.href = rawUrl; btn.target = '_blank'; btn.innerText = '查看原图'; mainPic.appendChild(btn); } })(); function addCopyIntroButton() { const mainpic = document.querySelector('#mainpic'); if (!mainpic) return; // 1. 精准定位“查看原图”按钮 const allLinks = mainpic.getElementsByTagName('a'); let originalBtn = null; for (let a of allLinks) { if (a.innerText.trim() === '查看原图') { originalBtn = a; break; } } // 如果没找到原按钮,或者我们的按钮已经存在,则退出 if (!originalBtn || document.getElementById('copy-intro-btn')) return; // 2. 强制原按钮样式:缩小宽度、取消块级显示、左浮动 // 使用 cssText + !important 是覆盖原生样式的最强手段 originalBtn.style.cssText = ` display: inline-block !important; width: 48% !important; float: left !important; text-align: center !important; padding: 6px 0 !important; margin: 10px 0 0 0 !important; box-sizing: border-box !important; font-size: 13px !important; height: auto !important; line-height: normal !important; `; // 3. 创建并设置“复制简介”按钮 const copyBtn = document.createElement('a'); copyBtn.id = 'copy-intro-btn'; copyBtn.href = 'javascript:void(0);'; copyBtn.innerText = '复制简介'; copyBtn.className = originalBtn.className; // 继承原生皮肤 // 强制复制按钮样式:并在右侧 copyBtn.style.cssText = ` display: inline-block !important; width: 48% !important; float: right !important; text-align: center !important; padding: 6px 0 !important; margin: 10px 0 0 0 !important; box-sizing: border-box !important; font-size: 13px !important; cursor: pointer !important; height: auto !important; line-height: normal !important; `; // 4. 点击逻辑 copyBtn.onclick = function(e) { e.preventDefault(); const fullContent = generateMovieInfo(); navigator.clipboard.writeText(fullContent).then(() => { const oldText = copyBtn.innerText; copyBtn.innerText = '已复制 ✔'; setTimeout(() => { copyBtn.innerText = oldText; }, 1500); }); }; // 5. 插入按钮 originalBtn.after(copyBtn); // 6. 插入清除浮动的元素,确保不影响下方的评分区域 const clearer = document.createElement('div'); clearer.style.cssText = "clear: both !important; width: 100% !important; height: 1px !important;"; copyBtn.after(clearer); } // --- 2. 简介生成逻辑 (修正重复定义并添加 TMDB 链接) --- function generateMovieInfo() { let ld = {}; const ldJsonText = document.querySelector('script[type="application/ld+json"]')?.innerText; if (ldJsonText) { try { const cleanJson = ldJsonText.replace(/[\x00-\x1F\x7F-\x9F]/g, ""); ld = JSON.parse(cleanJson); } catch (e) { console.warn("JSON解析跳过"); } } const infoDiv = document.querySelector('#info'); const getInfoValue = (key) => { if (!infoDiv) return ""; const nodes = Array.from(infoDiv.querySelectorAll('.pl')); const target = nodes.find(n => n.innerText.includes(key)); return target ? target.nextSibling.textContent.trim().replace(/^:\s*/, "") : ""; }; const title = document.querySelector('#content h1 [property="v:itemreviewed"]')?.innerText || document.title.replace('(豆瓣)', '').trim(); const year = document.querySelector('.year')?.innerText.replace(/\(|\)/g, '') || ""; const poster = document.querySelector('#mainpic img')?.src || ""; const region = getInfoValue("制片国家/地区"); const language = getInfoValue("语言"); const aka = getInfoValue("又名"); const duration = document.querySelector('[property="v:runtime"]')?.innerText || getInfoValue("片长") || getInfoValue("单集片长"); const episodes = getInfoValue("集数"); // 链接抓取 const imdbLink = infoDiv?.querySelector('a[href*="imdb.com/title/"]')?.href || ""; // 获取脚本渲染出来的 TMDB 链接 (ID 为 block-tmdb 的容器) const tmdbLink = document.querySelector('#block-tmdb a')?.href || ""; const dbScore = document.querySelector('.rating_num[property="v:average"]')?.innerText || "暂无"; const dbVotes = document.querySelector('.rating_people [property="v:votes"]')?.innerText || "0"; const introEl = document.querySelector('[id^="link-report"] [property="v:summary"]') || document.querySelector('[id^="link-report"] .all.hidden') || document.querySelector('[id^="link-report"]'); let introduction = "暂无简介"; if (introEl) { introduction = introEl.innerText.replace(/投诉/g, "").replace(/\s+显示全部$/g, "").trim().replace(/^\s+/gm, ""); } const getList = (type) => { const el = infoDiv?.querySelector(`span.attrs[data-type="${type}"]`); if (el) return el.innerText.trim(); const pl = Array.from(infoDiv?.querySelectorAll('.pl') || []).find(n => n.innerText.includes(type === 'actor' ? '主演' : (type === 'director' ? '导演' : '编剧'))); return pl ? pl.nextElementSibling.innerText.trim() : ""; }; const director = (ld.director ? ld.director.map(p => p.name).join(' / ') : getList('director')); const writer = (ld.author ? ld.author.map(p => p.name).join(' / ') : getList('writer')); const cast = (ld.actor ? ld.actor.map(p => p.name).join(' / ') : getList('actor')); let desc = ""; if (poster) desc += `[img]${poster}[/img]\n\n`; desc += `◎片  名 ${title}\n`; if (aka) desc += `◎又  名 ${aka}\n`; if (year) desc += `◎年  代 ${year}\n`; if (region) desc += `◎产  地 ${region}\n`; const genres = Array.from(document.querySelectorAll('[property="v:genre"]')).map(g => g.innerText).join(' / '); if (genres) desc += `◎类  别 ${genres}\n`; if (language) desc += `◎语  言 ${language}\n`; const pubDate = Array.from(document.querySelectorAll('[property="v:initialReleaseDate"]')).map(d => d.innerText).join(' / '); if (pubDate) desc += `◎上映日期 ${pubDate}\n`; if (dbScore !== "暂无") desc += `◎豆瓣评分 ${dbScore}/10 from ${dbVotes} users\n`; desc += `◎豆瓣链接 ${window.location.href.split('?')[0]}\n`; if (imdbLink) desc += `◎IMDb链接 ${imdbLink}\n`; // 插入 TMDB 链接 if (tmdbLink) desc += `◎TMDB链接 ${tmdbLink}\n`; if (episodes) desc += `◎集  数 ${episodes}\n`; if (duration) desc += `◎片  长 ${duration}\n`; if (director) desc += `◎导  演 ${director}\n`; if (writer) desc += `◎编  剧 ${writer}\n`; if (cast) { const formattedCast = cast.split(' / ').slice(0, 10).join('\n' + ' '.repeat(4) + '  '); desc += `◎主  演 ${formattedCast}\n`; } desc += `\n◎简  介\n\n  ${introduction.replace(/\n/g, '\n  ')}\n`; return desc; } // --- 3. 运行逻辑:使用每秒轮询,确保按钮被刷新后能立刻补上 --- setInterval(addCopyIntroButton, 1000); // === 历史趋势图:对齐简介栏版 === function injectTrendChart() { let subject_id = (window.location.href.match(/\/subject\/(\d+)/) || [])[1]; if (!subject_id) { subject_id = $('html').attr('id') || ''; } const typeMatch = window.location.href.match(/https?:\/\/(movie|book|music)\.douban\.com/); const subject_type = typeMatch ? typeMatch[1] : 'movie'; if (!subject_id) return; GM_xmlhttpRequest({ method: "GET", url: `https://zduo.me/2020/doubanqushi/api.php?subject_type=${subject_type}&subject_id=${subject_id}&rd=${Math.random()}`, headers: { "Referer": "https://movie.douban.com/", "User-Agent": navigator.userAgent }, onload: function(response) { try { const res = JSON.parse(response.responseText); if (res.code == 1) { if (!res.html) { res.html = ` `; } // 【关键改动 1】:目标锁定为电影主信息容器内部 const $infoTarget = $('.subject.clearfix'); if ($infoTarget.length > 0) { // 【关键改动 2】: // 1. 去掉 max-width: 675px,使用 100% 让他跟随父容器(简介栏)的宽度 // 2. 使用 clear: both 确保它在海报和导演信息下方开始显示 const $trendWrapper = $('
    '); let trendHtml = res.html.replace(/width:\s*650px/g, 'width:100%') .replace('border: 1px solid #ffd596;', 'border: none;'); $trendWrapper.append('

    评分人数与想看趋势

    '); $trendWrapper.append(trendHtml); // 【关键改动 3】:插入到 .subject 容器的末尾 // 这样它就会跟在“又名/IMDb号”后面,但依然在左侧栏范围内 $infoTarget.append($trendWrapper); setTimeout(() => { renderTrendChart('echars_main_rate', res.data.day_rate); renderTrendChart('echars_main_collect', res.data.day_collect); renderTrendChart('echars_main_wish', res.data.day_wish); }, 300); } } } catch (e) { console.error("【趋势大师】解析失败", e); } } }); } function renderTrendChart(domId, option) { const dom = document.getElementById(domId); if (dom && option) { dom.style.width = "100%"; dom.style.height = "280px"; const myChart = echarts.init(dom); // 优化边距适应超宽显示 option.grid = { left: '50px', right: '30px', top: '50px', bottom: '40px' }; // 设置图表颜色更接近豆瓣绿 if(option.color) option.color = ['#42bd56', '#258dcd', '#f8ba35']; myChart.setOption(option); window.addEventListener('resize', () => myChart.resize()); } } // === Steam风格评分系统 2.1 (修复 Bug + 严谨重构版) === // 1. 核心计算逻辑:将五星制转化为 Steam 的满意度二元论 async function getSteamRating(sort = 'time', limit = 100, gravity = 15) { const subjectId = (window.location.href.match(/\/subject\/(\d+)/) || [])[1]; if (!subjectId) return -1; const cacheKey = `steam_v2_${subjectId}_${sort}`; const cached = localStorage.getItem(cacheKey); if (cached) { const cacheObj = JSON.parse(cached); if (Date.now() - cacheObj.timestamp < 12 * 60 * 60 * 1000) return cacheObj.score; } try { const url = `https://movie.douban.com/subject/${subjectId}/comments?sort=${sort}&limit=${limit}`; const response = await fetch(url); const text = await response.text(); const doc = new DOMParser().parseFromString(text, 'text/html'); const items = doc.querySelectorAll('.comment-item'); let totalWeight = 0, positiveWeight = 0; items.forEach((item, i) => { const rateEl = item.querySelector('.rating'); const voteEl = item.querySelector('.votes.vote-count'); if (rateEl && voteEl) { const match = rateEl.className.match(/allstar(\d+)/); if (match) { const star = parseInt(match[1]); const votes = parseInt(voteEl.textContent) || 0; // 位置衰减:前排权重更高,模拟读者心理权重 const posFactor = 1 - (i / items.length) * 0.5; const weight = (gravity + votes) * posFactor; // 满意度映射:4-5星=1, 3星=0.5, 1-2星=0 let satisfaction = (star >= 40) ? 1 : (star === 30 ? 0.5 : 0); totalWeight += weight; positiveWeight += (satisfaction * weight); } } }); const finalScore = totalWeight ? (positiveWeight / totalWeight) * 100 : -1; localStorage.setItem(cacheKey, JSON.stringify({ timestamp: Date.now(), score: finalScore })); return finalScore; } catch (e) { return -1; } } // 2. Steam 官方色值规范 function formatSteamText(score) { if (isNaN(score) || score === -1 || score === 0) return { text: '评价不足', color: '#888' }; const s = Math.round(score); if (s >= 95) return { text: '好评如潮', color: '#66c0f4' }; // Steam Blue if (s >= 80) return { text: '特别好评', color: '#66c0f4' }; if (s >= 70) return { text: '多半好评', color: '#66c0f4' }; if (s >= 40) return { text: '褒贬不一', color: '#b9a074' }; // Steam Yellow if (s >= 20) return { text: '多半差评', color: '#a34c32' }; // Steam Red return { text: '差评如潮', color: '#a34c32' }; } function injectSteamUI() { const $weightBars = $('.ratings-on-weight'); if ($weightBars.length === 0 || $('#steam-rating-section').length) return; // 样式修复:移除 border-bottom,仅保留 top 线,并对齐豆瓣原生边距 const $steamBox = $(`
    豆瓣总评:计算中...
    热门影评:读取中...
    最新影评:读取中...
    `); $weightBars.after($steamBox); // --- 逻辑部分保持不变 --- const $stars = $('.ratings-on-weight .item'); if($stars.length === 5) { const getP = (i) => { const txt = $stars.eq(i).find('.rating_per').text(); return parseFloat(txt) || 0; }; const realSatisfaction = getP(0) + getP(1) + (getP(2) * 0.5); const res = formatSteamText(realSatisfaction); $('#st-total').html(`${res.text}(${Math.round(realSatisfaction)}%)`); } setTimeout(async () => { const score = await getSteamRating('new_score', 100, 20); const res = formatSteamText(score); $('#st-hottest').html(`${res.text}(${Math.round(score)}%)`); }, 300); setTimeout(async () => { const score = await getSteamRating('time', 100, 40); const res = formatSteamText(score); $('#st-latest').html(`${res.text}(${Math.round(score)}%)`); }, 800); } })();