Greasy Fork

来自缓存

Greasy Fork is available in English.

豆瓣时光

查看豆瓣、时光网的原图。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         豆瓣时光
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  查看豆瓣、时光网的原图。
// @icon         http://static1.mtime.cn/favicon.ico
// @author       cw2012
// @include      https://movie.douban.com/subject/*/photos/
// @include      https://movie.douban.com/photos/*
// @include      https://movie.douban.com/celebrity/*/photo/*
// @include      https://music.douban.com/musician/*/photo/*
// @include      http*://movie.mtime.com/*/posters_and_images/*
// @include      http*://people.mtime.com/*/photo_gallery/*/
// @grant        GM_xmlhttpRequest
// @connect      service.library.mtime.com
// @run-at       document-end
// ==/UserScript==

(function() {
    let type = location.href.split('/')[3];
    switch(type){
        case 'subject':
            managePoster();
            break;
        case 'photos':
            replacePhoto(`https://img3.doubanio.com/view/photo/raw/public/p${location.href.match(/\d+/)[0]}.jpg`);
            break;
        case 'celebrity':
            replacePhoto(`https://img9.doubanio.com/view/photo/raw/public/p${location.href.match(/\d+/g)[1]}.jpg`);
            break;
        case 'musician':
            replacePhoto(`https://img9.doubanio.com/view/photo/raw/public/p${location.href.match(/\d+/g)[1]}.jpg`);
            break;
        default:
            setTimeout(replaceMtime, 200);
            break;
    }

    // 替换单幅图片
    function replacePhoto(rawPhotoUrl){
        let show = document.querySelectorAll('.update.magnifier .j.a_show_login')[0];
        show.href = rawPhotoUrl;
        show.parentNode.replaceChild(show.cloneNode(true), show);
        let zoom = document.querySelectorAll('.photo-zoom.j.a_show_login')[0];
        zoom.href = rawPhotoUrl;
        zoom.parentNode.replaceChild(zoom.cloneNode(true), zoom);
    }
    // 海报
    function managePoster(){
        let lis = document.querySelectorAll('#content .article li');
        if (lis){
            for (let li of lis) {
                li.getElementsByTagName("img")[0].src = `https://img3.doubanio.com/view/photo/raw/public/p${li.getAttribute('data-id')}.jpg`
                }
        }
    }
    // mtime
    function replaceMtime(){
        let picBox = document.querySelector('#imageRegion img');
        // 如果图片不对,再尝试替换
        let size = document.querySelector('#imageSize').innerText.match(/\d+x\d+/)[0];
        picBox.onerror = err=>{
            GM_xmlhttpRequest({
                // 电影和影人的参数略有不同
                url:`http://service.library.mtime.com/Comment.api?Ajax_CallBack=true&Ajax_CallBackType=Mtime.Library.Services&Ajax_CallBackMethod=`+
                    `${location.href.indexOf('movie')!=-1?'DownloadNoWatermarkImage':'DownloadPersonBigImage'}&Ajax_CrossDomain=1&Ajax_RequestUrl=`
                     +`${encodeURIComponent(location.href)}&t=${getTimeString()}&Ajax_CallBackArgument0=${location.href.split('/')[5]}`,
                method:'get',
                onload:res=>{
                    let text = res.responseText;
                    if(text.indexOf('{"success":true')!=-1){
                        let picUrl = text.substr(text.indexOf('src":"')+6,86);
                        picBox.src = picUrl;
                        picBox.style.height = '100%';
                    }else{
                        alert('获取数据出错,可能需要登录才能获取到图片');
                    }
                }
            });
        };
        picBox.src = picBox.src.replace(/\d+[xX]\d+\.jpg/, size + '.jpg');
        picBox.style.height = '100%';
    }
    function getTimeString(){
        let tmp = new Date();
        let month = tmp.getMonth + 1, date = tmp.getDate(), hour = tmp.getHours(), minute = tmp.getMinutes(), sec = tmp.getSeconds();
        // 2020122115411830739
        return `${tmp.getFullYear()}${(month>9?'':'0')+month}${(date>9?'':'0')+date}${(hour>9?'':'0')+hour}${(minute>9?'':'0')+minute}${(sec>9?'':'0')+sec}30739`;
    }
})();