// ==UserScript== // @name Pixiv Previewer // @namespace https://github.com/Ocrosoft/PixivPreviewer // @version 3.0.24 // @description Display preview images (support single image, multiple images, moving images); Download animation(.zip); Sorting the search page by favorite count(and display it). Updated for the latest search page. // @description:zh-CN 显示预览图(支持单图,多图,动图);动图压缩包下载;搜索页按热门度(收藏数)排序并显示收藏数,适配11月更新。 // @description:ja プレビュー画像の表示(単一画像、複数画像、動画のサポート); アニメーションのダウンロード(.zip); お気に入りの数で検索ページをソートします(そして表示します)。 最新の検索ページ用に更新されました。 // @description:zh_TW 顯示預覽圖像(支持單幅圖像,多幅圖像,運動圖像); 下載動畫(.zip); 按收藏夾數對搜索頁進行排序(並顯示)。 已為最新的搜索頁面適配。 // @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); } // If you want to help improve the translate, please var Lang = { // 中文-中国大陆 zh_CN: 0, // 英语-美国 en_US: 1, }; var Texts = {}; Texts[Lang.zh_CN] = { // 安装或更新后弹出的提示 install_title: '欢迎使用 PixivPreviewer v', install_body: '

语言更新(v3.0.15): 这个版本更新了英语翻译,对使用简体/繁体中文版本 Pixiv 的用户没有任何影响。


v3.0.x 是对 v2.08 进行了大量改动后的版本,因此可能不稳定,如果发现问题,请到 反馈页面 反馈,我会尽快修复,也欢迎提出建议,非常感谢!

排序功能会比之前的版本慢,具体时间视Pixiv的加载速度而定,原因是新的搜索页面不会再显示排序所必须的收藏量。


如果您是第一次使用,推荐到 详情页 查看脚本介绍。

', // 设置项 setting_preview: '预览', setting_sort: '排序(仅搜索页生效)', setting_anime: '动图下载(动图预览及详情页生效)', setting_origin: '预览时优先显示原图(慢)', setting_maxPage: '每次排序时统计的最大页数', setting_hideWork: '隐藏收藏数少于设定值的作品', setting_hideFav: '排序时隐藏已收藏的作品', setting_blank: '使用新标签页打开作品详情页', setting_turnPage: '使用键盘←→进行翻页(排序后的搜索页)', setting_save: '保存设置', setting_reset: '重置脚本', setting_resetHint: '这会删除所有设置,相当于重新安装脚本,确定要重置吗?', }; // translate by google Texts[Lang.en_US] = { install_title: 'Welcome to PixivPreviewer v', install_body: '

Language update(v3.0.15): If your Pixiv\'s language is not Simplified Chinese or Traditional Chinese, script will display in English now.


v3.0.x is a version with a lot of changes to v2.08, so it may be unstable. If you find a problem, please go to Feedback Page to feedback, I will fix it as soon as possible, and suggestions are welcome, thank you very much!

The sorting function will be slower than the previous version. The specific time depends on the loading speed of Pixiv, because the new search page will no longer display the amount of favorites necessary for sorting.


If you are using it for the first time, it is recommended to go to the Details Page to see the script introduction.

', setting_preview: 'Preview', setting_sort: 'Sorting (Search page)', setting_anime: 'Animation download (Preview and Artwork page)', setting_origin: 'Display original image when preview (slow)', setting_maxPage: 'Maximum number of pages counted per sort', setting_hideWork: 'Hide works with less than set value', setting_hideFav: 'Hide favorites when sorting', setting_blank: 'Open works\' details page in new tab', setting_turnPage: 'Use ← → to turn pages (Search page)', setting_save: 'Save', setting_reset: 'Reset', setting_resetHint: 'This will delete all settings and set it to default. Are you sure?', }; 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; } } } // 语言,如果 g_autoDetectLanguage 的值为 true,则默认值无效;如果希望使用某种语言,请这样操作: // 1.修改 g_language 的值,中文(Lang.zh_CN)、英文(Lang.en_US) // 2.将 g_autoDetectLanguage 的值从 true 修改为 false // ===== // If you want to set language instead auto detect it, follow this: // 1.Change g_language's value, Chinese(Lang.zh_CN), English(Lang.en_US). // 2.Change g_autoDetectLanguage's value from true to false. var g_language = Lang.zh_CN; // 自动检测语言,开启后 g_language 的默认值将无效 var g_autoDetectLanguage = true; // 版本号,第三位不需要跟脚本的版本号对上,第三位更新只有需要弹更新提示的时候才需要更新这里 var g_version = '3.0.16'; // 添加收藏需要这个 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; // 排序是否隐藏已关注画师的作品,如果希望隐藏,将 "false" 修改为 "true" 即可 var g_enableFilterByUser = false; // 页面相关的一些预定义,包括处理页面元素等 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) { // 没有 /artworks 的页面不支持 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, '