Greasy Fork

Greasy Fork is available in English.

我就是要跳轉(B站番劇投稿頁跳轉去番劇頁)

解決有時打開B站番劇投稿頁不會跳轉去番劇頁的問題

当前为 2017-04-21 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         我就是要跳轉(B站番劇投稿頁跳轉去番劇頁)
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  解決有時打開B站番劇投稿頁不會跳轉去番劇頁的問題
// @author       i9602097
// @include      *://www.bilibili.com/video/av*
// @run-at       document-start
// @grant      GM_registerMenuCommand
// @grant      unsafeWindow
// ==/UserScript==
// 
function getJSON(url) {
    var request = new XMLHttpRequest();
    request.open("GET", url, false);
    // request.setRequestHeader("If-Modified-Since","0");
    try {
        request.send();
    } catch (e) {
        console.log(e);
        console.log("跨域失敗");
    }
    // console.log(request.readyState);
    // console.log(request.responseText);
    console.log(request.getAllResponseHeaders());
    if (request.readyState == 4 && request.responseText) {
        try {
            return JSON.parse(request.responseText);
        } catch (e) {
            console.log("JSON file error:" + url);
            return {
                "code": -2
            };
        }
    } else {
        console.log("Get JSON error:" + url);
        return {
            "code": -1
        };
    }
}

function getDataWithZone(text, zone) {
    return new Date(Date.parse(text) - (3600000 * zone) - (new Date().getTimezoneOffset() * 60000));
}

function getEpisodeID(aid, pid) {
    var avjson = getJSON("https://www.biliplus.com/api/view?id=" + aid);
    console.log("avjson.code:" + avjson.code);
    if (!avjson.code) {
        var updateDate = new Date();
        updateDate.setDate(updateDate.getDate() - 1);
        console.log("緩存時間是" + getDataWithZone(avjson.lastupdate.replace(/-/g, "/"), 8).toString() + ",如果比" + updateDate.toString() + "早則會更新緩存並重新加載");
        if (getDataWithZone(avjson.lastupdate.replace(/-/g, "/"), 8) < updateDate) {
            console.log("緩存過早,更新緩存並重新加載");
            getJSON("https://www.biliplus.com/api/view?id=" + aid + "&update=true");
            avjson = getJSON("https://www.biliplus.com/api/view?id=" + aid);
            console.log("avjson.code:" + avjson.code);
            if (!avjson.code) {
                console.log("新的緩存時間是" + getDataWithZone(avjson.lastupdate.replace(/-/g, "/"), 8).toString());
            }
        }
    } else {
        console.log("緩存錯誤,更新緩存並重新加載");
        getJSON("https://www.biliplus.com/api/view?id=" + aid + "&update=true");
        avjson = getJSON("https://www.biliplus.com/api/view?id=" + aid);
        console.log("avjson.code:" + avjson.code);
        if (!avjson.code) {
            console.log("新的緩存時間是" + getDataWithZone(avjson.lastupdate.replace(/-/g, "/"), 8).toString());
        }
    }
    if (!avjson.code) {
        console.log("標題:" + avjson.title);
        if (avjson.bangumi) {
            console.log("投稿API番劇標題:" + avjson.bangumi.title);
            var cid;
            for (var i = 0; i < avjson.list.length; i++) {
                if (avjson.list[i].page == pid) {
                    cid = avjson.list[i].cid;
                }
            }
            console.log("cid:" + cid);
            var bangumijson = getJSON("https://www.biliplus.com/api/bangumi?season=" + avjson.bangumi.season_id);
            console.log("bangumijson.code:" + bangumijson.code);
            if (!bangumijson.code) {
                console.log("番劇API番劇標題:" + bangumijson.result.bangumi_title);
                var episode_id;
                if (cid) {
                    for (var i = 0; i < bangumijson.result.episodes.length; i++) {
                        if (bangumijson.result.episodes[i].danmaku == cid) {
                            episode_id = bangumijson.result.episodes[i].episode_id;
                        }
                    }
                }
                if (!episode_id) {
                    console.log("cid反查失敗,使用AV號和分P反查");
                    for (var i = 0; i < bangumijson.result.episodes.length; i++) {
                        if (bangumijson.result.episodes[i].av_id == aid && bangumijson.result.episodes[i].page == pid) {
                            episode_id = bangumijson.result.episodes[i].episode_id;
                        }
                    }
                }
                if (!episode_id) {
                    console.log("分P反查失敗,只用AV號反查,結果可能有出入");
                    for (var i = 0; i < bangumijson.result.episodes.length; i++) {
                        if (bangumijson.result.episodes[i].av_id == aid) {
                            episode_id = bangumijson.result.episodes[i].episode_id;
                        }
                    }
                }
                if (episode_id) {
                    console.log("episode_id:" + episode_id);
                    return episode_id;
                } else {
                    console.log("episode_id查詢失敗");
                }
            } else {
                console.log("bangumi json error");
            }
        } else {
            console.log("no bangumi");
        }
    } else {
        console.log("av json error");
    }
}

function redirectURL() {
    console.log("call redirectURL");
    if (!episode_id) {
        episode_id = getEpisodeID(aid, pid);
    }
    if (episode_id) {
        location.replace("http://bangumi.bilibili.com/anime/v/" + episode_id);
    }
}
document.addEventListener('DOMContentLoaded', function() {
    console.log("網址:" + location.href);
    var aid = new String();
    aid = unsafeWindow.aid;
    if (!aid) {
        aid = location.href.match("av[0-9]*");
        aid = aid.toString();
        aid = aid.substr(2);
    }
    aid = Number(aid);
    console.log("aid:" + aid);
    var pid = new String();
    pid = location.href.match("index_[0-9]*");
    if (pid) {
        pid = pid.toString();
        pid = pid.substr(6);
    } else {
        pid = "1";
    }
    pid = Number(pid);
    console.log("pid:" + pid);
    episode_id = getEpisodeID(aid, pid);
    if (episode_id) {
        GM_registerMenuCommand('跳轉到http://bangumi.bilibili.com/anime/v/' + episode_id, redirectURL);
        let msg = document.querySelector('.z-msg');
        if (msg && confirm("是否跳轉到http://bangumi.bilibili.com/anime/v/" + episode_id)) {
            location.replace("http://bangumi.bilibili.com/anime/v/" + episode_id);
        }
    }
}, false);