Greasy Fork is available in English.

硕鼠一键视频解析

调用硕鼠网站解析网页中的视频,支持解析国内各类主流视频网站、综合网站、教育网站、MV音频网站、网络电视台、游戏网站、体育网站以及部分国外视频网站的视频,支持网站列表截至2023.05.14

// ==UserScript==
// @name         硕鼠一键视频解析
// @version      1.1
// @author       猫不理
// @namespace    https://www.flvcd.com/index.htm
// @license      MIT
// @description  调用硕鼠网站解析网页中的视频,支持解析国内各类主流视频网站、综合网站、教育网站、MV音频网站、网络电视台、游戏网站、体育网站以及部分国外视频网站的视频,支持网站列表截至2023.05.14
// @match        *://tv.sohu.com/v/*
// @match        *://www.letv.com/ptv/vplay/*
// @match        *://www.ku6.com/video/detail?id=*
// @match        *://www.56.com/*/*
// @match        *://c.m.163.com/news/v/*
// @match        *://share.tangdou.com/h5/play?vid=*
// @match        *://weibo.com/tv/show/*
// @match        *://www.miaopai.com/show/*
// @match        *://www.meipai.com/media/*
// @match        *://m.eyepetizer.net/u1/*
// @match        *://www.ixigua.com/*
// @match        *://www.bilibili.com/video/*
// @match        *://haokan.baidu.com//v?vid=*
// @match        *://krcom.cn/*/episodes/*
// @match        *://www.pearvideo.com/video_*
// @match        *://v.douyin.com/*/*
// @match        *://www.365yg.com/group/*
// @match        *://video.mtime.com/*/*
// @match        *://www.boosj.com/*.html
// @match        *://movie.douban.com/trailer/*
// @match        *://www.news.cn/*/*
// @match        *://www.v1.cn/video/*
// @match        *://v.tom.com/*/*
// @match        *://video.baomihua.com/*/*
// @match        *://www.ouou.com/article/index/id/*/cid/*
// @match        *://finance.ce.cn/*/*
// @match        *://www.cuctv.com/*/*
// @match        *://art.china.cn/shipin/*
// @match        *://www.kankanews.com/*/*
// @match        *://www.pinshan.com/*/*
// @match        *://apiapp.people.cn/*/*
// @match        *://www.yicai.com/video/*
// @match        *://www.jiemian.com/video/*
// @match        *://www.huxiu.com/article/*
// @match        *://www.yizhibo.com/l/*
// @match        *://www.zhihu.com/zvideo/*
// @match        *://www.zhanqi.tv/v2/videos/*
// @match        *://v.autohome.com.cn/*
// @match        *://wx.vzan.com/live/*
// @match        *://live.ddeliveu.com/live/*
// @match        *://zj.cztv.live/live/page/*
// @match        *://www.huajiao.com/l/*
// @match        *://mparticle.uc.cn/video.html?*
// @match        *://www.skypixel.com/videos/*
// @match        *://bbs.mihoyo.com/ys/article/*
// @match        *://www.yy.com/sv/*
// @match        *://www.koushare.com/video/videodetail/*
// @match        *://www.wasu.cn/Play/show/id/*
// @match        *://art.sclsje.com/share/detail/video_out.html?*
// @match        *://mp.weixin.qq.com/s?*
// @match        *://roadshow.eastmoney.com/luyan/*
// @match        *://www.docuchina.cn/*/*
// @match        *://video.mct.gov.cn/v.html?id=*
// @match        *://tieba.baidu.com/p/*
// @match        *://yidumen.cn/chatroom/*/*
// @match        *://www.360kuai.com/*
// @match        *://tv.81.cn/*/*
// @match        *://wap.che.360.cn/share/h5/detail/*
// @match        *://www.ntv.cn/*/*
// @match        *://video.caixin.com/*/*
// @match        *://roadshow.sseinfo.com/roadshowIndex.do?id=*
// @match        *://live.baidu.com/m/media/pclive/pchome/live.html?room_id=*
// @match        *://www.fuyinfm.com/content/view/movid/*
// @match        *://rs.p5w.net/html/*
// @match        *://www.pdnews.cn/video/*
// @match        *://www.cantonfair.org.cn/zh-CN/eventShows/*
// @match        *://www.zaobao.com/*/*
// @match        *://www.chinanews.com.cn/*/*
// @match        *://www.yangtse.com/content/*
// @match        *://www.lontv.cn/index.php?*
// @match        *://www.dongchedi.com/video/*
// @match        *://tv.southcn.com/*/*
// @match        *://yn.chinadaily.com.cn/*/*
// @match        *://www.qlwb.com.cn/videoDetail/*
// @match        *://www.jingju.com/video_detail.php?id=*
// @match        *://baijiahao.baidu.com/s?id=*
// @match        *://m.dianping.com/smallvideo/*
// @match        *://v.ccdi.gov.cn/*/*
// @match        *://open.163.com/newview/movie/free?pid=*
// @match        *://www.zxx.edu.cn/syncClassroom/classActivity?activityId=*
// @match        *://new.hbeducloud.com/course/*
// @match        *://v.ucas.ac.cn/course/*
// @match        *://www.centv.cn/*/p/*
// @match        *://www.xuexi.cn/lgpage/detail/index.html?id=*
// @match        *://lv.ulikecam.com/*/*
// @match        *://www.wkzj.com/shared/*
// @match        *://zy.szedu.cn/*/*
// @match        *://mskzkt.jse.edu.cn/*/*
// @match        *://www.ahedu.cn/course/video.html?id=*
// @match        *://e.dxy.cn/broadcast/live/id/*/replay
// @match        *://v.91360.com/lectures/*
// @match        *://www.houdask.com/site/hd/resources/views/free/play.html?id=*
// @match        *://www.dangjian.cn/shouye/shipinxinwen/*
// @match        *://hezhibo.migucloud.com/watch/*
// @match        *://live.yanxiu.com/lv2/program/*/detail
// @match        *://www.scedu.com.cn/ThirdPortalService/html/indexNew/index.html#/detailVideo?as_id=*
// @match        *://mooc1.chaoxing.com/nodedetailcontroller/visitnodedetail?courseId=*
// @match        *://yun.ercmedia.cn/gswsd/index.php?p=*
// @match        *://youzy.cn/learn/classrooms/detail1?packId=*
// @match        *://h5.dingtalk.com/group-live-share/index.htm?*
// @match        *://meeting.tencent.com/v2/cloud-record/share?id=*
// @match        *://zhibo.chaoxing.com/*
// @match        *://www.wookey.cn/mkzt?id=*
// @match        *://www.wupen.org/lectures/1?lesson=*
// @match        *://web.guangdianyun.tv/live/*
// @match        *://www.leleketang.com/cr/stage.php?id=*
// @match        *://www.manamana.net/video/detail?id=*
// @match        *://video.pku.edu.cn/videos.html*
// @match        *://m.inmuu.com/v1/live/news/*
// @match        *://www.yinyuetai.com/play?id=*
// @match        *://www.1ting.com/album_*
// @match        *://y.qq.com/n/ryqq/*/*
// @match        *://www.kugou.com/*/*
// @match        *://music.163.com/#/*
// @match        *://www.beva.com/page/videoPlayer?albumId=*
// @match        *://www.ximalaya.com/album/*
// @match        *://kuwo.cn/*/*
// @match        *://www.hqgq.com/video/show/*
// @match        *://qishui.douyin.com/s/*
// @match        *://www.qtfm.cn/channels/*/programs/*
// @match        *://tv.cctv.com/*/*
// @match        *://news.cctv.com/*/*
// @match        *://www.cutv.com/v2/*
// @match        *://v.ifeng.com/c/*
// @match        *://v.jstv.com/a/*
// @match        *://www.zjstv.com/zcloud/video/*
// @match        *://v.iqilu.com/*/*
// @match        *://item.btime.com/*
// @match        *://tv.cztv.com/vplay/*
// @match        *://www.gztv.com/video/videoIndex.html?uuid=*
// @match        *://www.xmtv.cn/*/*
// @match        *://pc.yun.jxntv.cn/*/*
// @match        *://headline.fjtv.net/*/*
// @match        *://gdtv.cn/tv/*
// @match        *://www.sjzjx.gov.cn/col/*
// @match        *://live.ipanda.com/*/*
// @match        *://tv.hoolo.tv/*/*
// @match        *://news.cgtn.com/*/*
// @match        *://www.hebtv.com/*/*
// @match        *://live.nbwbwx.com/live/*
// @match        *://www.gzstv.com/v/*
// @match        *://www.csztv.com/doc/*
// @match        *://vod.gxtv.cn/video/videoShow_*
// @match        *://www.js7tv.cn/video/*
// @match        *://www.sxrtv.com/live*
// @match        *://zmt-m.hljtv.com/video_details.html?*
// @match        *://www.hljtv.com/*/*
// @match        *://news.hbtv.com.cn/p/*
// @match        *://kscgc.sctv-tf.com/*/*
// @match        *://17173.tv.sohu.com/v/*
// @match        *://v.4399pk.com/*/video_*
// @match        *://v.huya.com/play/*
// @match        *://v.douyu.com/show/*
// @match        *://m.dongqiudi.com/article/*
// @match        *://v.zhibo.tv/detail/headerline/*
// @match        *://www.zhibo8.cc/*/*
// @match        *://www.formula1.com/*/*
// @match        *://www3.nhk.or.jp/*/*
// @icon         https://www.flvcd.com/b30.gif
// @grant        GM_openInTab
// @run-at       document-idle
// ==/UserScript==

(function() {
    'use strict';

    var isMenuOpen = false;

    function setButtonStyle(button) {
        button.style.position = 'fixed';
        button.style.left = '10px';
        button.style.transform = 'translateY(-50%)';
        button.style.zIndex = '9999';
        button.style.opacity = '0.7';
        button.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
        button.style.borderRadius = '15px';
        button.style.color = 'white';
        button.style.padding = '5px';
    }

    function toggleMenu() {
        if (!isMenuOpen) {
            openMenu();
        } else {
            closeMenu();
        }
    }

    function openMenu() {
        if (!isMenuOpen) {
            isMenuOpen = true;
            document.body.appendChild(updateButton);
        }
    }

    function closeMenu() {
        if (isMenuOpen) {
            isMenuOpen = false;
            if (updateButton && updateButton.parentNode) {
                updateButton.parentNode.removeChild(updateButton);
            }
        }
    }

    function checkForUpdates() {
        const crv = GM_info.script.version;
        let updateUrl = GM_info.scriptUpdateURL || GM_info.script.updateURL || GM_info.script.downloadURL;
        updateUrl = `${updateUrl}?t=${Date.now()}`;
        fetch(updateUrl, {
            cache: 'no-cache'
        }).then((response) => {
            response.text().then((data) => {
                const m = data.match(/@version\s+(\S+)/);
                const ltv = m && m[1];
                if (ltv && verInt(ltv) > verInt(crv)) {
                    GM_openInTab(updateUrl, { active: true });
                } else {
                    updateButton.textContent = '暂无更新';
                    setTimeout(function() {
                        closeMenu();
                        updateButton.textContent = '检查更新';
                    }, 3000);
                }
            });
        }).catch(e => console.log(e));
    };

    const verInt = function(vs) {
        const vl = vs.split('.');
        let vi = 0;
        for (let i = 0; i < vl.length && i < 3; i++) {
            vi += parseInt(vl[i]) * (1000 ** (2 - i));
        }
        return vi;
    };

    var button = document.createElement('button');
    button.textContent = '一键解析';
    button.style.top = '50%';
    setButtonStyle(button);

    button.addEventListener('click', function() {
        var currentUrl = encodeURIComponent(window.location.href);
        var searchUrl = 'https://www.flvcd.com/parse.php?kw=' + currentUrl;
        GM_openInTab(searchUrl, { active: true });
    });

    button.addEventListener('contextmenu', function(event) {
        event.preventDefault();
        toggleMenu();
    });

    var updateButton = document.createElement('button');
    updateButton.textContent = '检查更新';
    updateButton.style.top = 'calc(50% + 40px)';
    setButtonStyle(updateButton);

    updateButton.addEventListener('click', function() {
        checkForUpdates();
    });

    updateButton.addEventListener('contextmenu', function(event) {
        event.preventDefault();
        closeMenu();
    });

    document.body.appendChild(button);
})();