// ==UserScript== // @name Pixiv Previewer // @namespace https://github.com/Ocrosoft/PixivPreviewer // @version 3.0.13 // @description 显示预览图(支持单图,多图,动图);动图压缩包下载;搜索页按热门度(收藏数)排序并显示收藏数,适配11月更新 // @author Ocrosoft // @match *://www.pixiv.net/* // @grant none // @compatible Chrome // @downloadURL none // ==/UserScript== // 测试 JQuery,如果不支持就插入 //var $ = function () { }; try { $(); } catch (e) { var script = document.createElement('script'); script.src = 'https://code.jquery.com/jquery-2.2.4.min.js'; document.head.appendChild(script); } var Languages = { // 中文-中国大陆 zh_CN: 0, // 英语-美国 en_US: 1, }; var LogLevel = { None: 0, Error: 1, Warning: 2, Info: 3, Elements: 4, }; function DoLog(level, msgOrElement) { if (level <= g_logLevel) { var prefix = '%c'; var param = ''; if (level == LogLevel.Error) { prefix += '[Error]'; param = 'color:#ff0000'; } else if (level == LogLevel.Warning) { prefix += '[Warning]'; param = 'color:#ffa500'; } else if (level == LogLevel.Info) { prefix += '[Info]'; param = 'color:#000000'; } else if (level == LogLevel.Elements) { prefix += 'Elements'; param = 'color:#000000'; } if (level != LogLevel.Elements) { console.log(prefix + msgOrElement, param); } else { console.log(msgOrElement); } if (++g_logCount > 512) { console.clear(); g_logCount = 0; } } } // 版本号,第三位不需要跟脚本的版本号对上,第三位更新只有需要弹更新提示的时候才需要更新这里 var g_version = '3.0.6'; // 添加收藏需要这个 var g_csrfToken = ''; // 打的日志数量,超过一定数值清空控制台 var g_logCount = 0; // 当前页面类型 var g_pageType = -1; // 图片详情页的链接,使用时替换 #id# var g_artworkUrl = '/artworks/#id#'; // 获取图片链接的链接 var g_getArtworkUrl = '/ajax/illust/#id#/pages'; // 获取动图下载链接的链接 var g_getUgoiraUrl = '/ajax/illust/#id#/ugoira_meta'; // 鼠标位置 var g_mousePos = { x: 0, y: 0 }; // 加载中图片 var g_loadingImage = 'https://pp-1252089172.cos.ap-chengdu.myqcloud.com/loading.gif'; // 页面打开时的 url var initialUrl = location.href; // 默认设置,仅用于首次脚本初始化 var g_defaultSettings = { 'enablePreview': 1, 'enableSort': 1, 'enableAnimeDownload': 1, 'original': 0, 'pageCount': 2, 'favFilter': 0, 'hideFavorite': 0, 'linkBlank': 1, 'pageByKey': 0, 'logLevel': 1, 'version': g_version, }; // 设置 var g_settings; // 日志等级 var g_logLevel = LogLevel.Warning; // 排序时同时请求收藏量的 Request 数量,没必要太多,并不会加快速度 var g_maxXhr = 10; // 页面相关的一些预定义,包括处理页面元素等 var PageType = { // 搜索 Search: 0, // 关注的新作品 BookMarkNew: 1, // 发现 Discovery: 2, // 用户主页 Member: 3, // 首页 Home: 4, // 排行榜 Ranking: 5, // 大家的新作品 NewIllust: 6, // R18 R18: 7, // 自己的收藏页 BookMark: 8, // 动态 Stacc: 9, // 作品详情页(处理动图预览及下载) Artwork: 10, // 总数 PageTypeCount: 11, }; var Pages = {}; /* Pages 必须实现的函数 * PageTypeString: string,字符串形式的 PageType * bool CheckUrl: function(string url),用于检查一个 url 是否是当前页面的目标 url * ReturnMap ProcessPageElements: function(),处理页面(寻找图片元素、添加属性等),返回 ReturnMap * ReturnMap GetProcessedPageElements: function(), 返回上一次 ProcessPageElements 的返回值(如果没有上次调用则调用一次) * Object GetToolBar: function(), 返回工具栏元素(右下角那个,用来放设置按钮) * HasAutoLoad: bool,表示这个页面是否有自动加载功能 */ var ReturnMapSample = { // 页面是否加载完成,false 意味着后面的成员无效 loadingComplete: false, // 控制元素,每个图片的鼠标响应元素 controlElements: [], }; var ControlElementsAttributesSample = { // 图片信息,内容如下: // [必需] 图片 id illustId: 0, // [必需] 图片类型(0:普通图片,2:动图) illustType: 0, // [必需] 页数 pageCount: 1, // [可选] 标题 title: '', // [可选] 作者 id userId: 0, // [可选] 作者昵称 userName: '', // [可选] 收藏数 bookmarkCount: 0, }; Pages[PageType.Search] = { PageTypeString: 'SearchPage', CheckUrl: function (url) { return /^https?:\/\/www.pixiv.net\/tags\/.*\/artworks/.test(url) || /^https?:\/\/www.pixiv.net\/en\/tags\/.*\/artworks/.test(url); }, ProcessPageElements: function () { var returnMap = { loadingComplete: false, controlElements: [], }; var sections = $('section'); DoLog(LogLevel.Info, 'Page has ' + sections.length + '
.'); DoLog(LogLevel.Elements, sections); // 先对 section 进行评分 var sectionIndex = -1; var bestScore = -99; sections.each(function (i, e) { var section = $(e); var score = 0; if (section.find('ul').length > 0) { var childrenCount = section.children().length; if (childrenCount != 2) { DoLog(LogLevel.Warning, '