LuckyPuppy514 / Play-With-MPV

使用 MPV 播放网页中的视频
MIT License
602 stars 20 forks source link

添加华为人才在线 #84

Closed orz12 closed 1 year ago

orz12 commented 1 year ago

勉强实现了 但感觉不太优雅 还请斧正 *未支持选择清晰度(这个应该靠api来查询对应链接,但我能力不够,没找到那个资源编号是从哪里来的,只好换这个方式获取链接了)

LuckyPuppy514 commented 1 year ago

image

有几个小问题

  1. 没有提供例子,请参考已经有的 handler,提供一个可以测试的链接,以注释形式写入代码中
  2. 请不要修改已经有的方法,标题在 handler 中设置即可,请参考下列代码
  3. 子页面上传链接给父页面已经有方法实现,不要重复实现,请参考下列代码
        handler: class Handler extends BaseHandler {
            constructor() {
                super();
                this.addTopListener();
            }
            async parse() {
                 // 获取视频链接 videoUrl 和标题 title
                 ...
                this.media.setVideoUrl(videoUrl);
                this.media.setTitle(title);
            }
        }
orz12 commented 1 year ago

image

有几个小问题

  1. 没有提供例子,请参考已经有的 handler,提供一个可以测试的链接,以注释形式写入代码中
  2. 请不要修改已经有的方法,标题在 handler 中设置即可,请参考下列代码
  3. 子页面上传链接给父页面已经有方法实现,不要重复实现,请参考下列代码
        handler: class Handler extends BaseHandler {
            constructor() {
                super();
                this.addTopListener();
            }
            async parse() {
                 // 获取视频链接 videoUrl 和标题 title
                 ...
                this.media.setVideoUrl(videoUrl);
                this.media.setTitle(title);
            }
        }

我可能没太理解……子页面通过message传上来的media要怎么触发(或者传递给)parse?还是说另外写一个addTopListener覆盖通用的?

orz12 commented 1 year ago

我的思路是这样,因为这个子页面内才是选择和切换课程的地方,子页面本身没有更换,只是局部刷新了,也就是说父页面需要持续接收子页面传过来的media,才能知道现在播放的课程;

我看了代码里之前写的所有带有addIframeListener()的解析器,都不涉及这个问题,基本都是父页面切换剧集之类的,然后把子页面替换掉,所以如果只在addIframeListener里面判空才替换,应该是不太一样;

另外也只有一个叫做【天空影视】的网站在子页面有setTitle(config.title)的写法,虽然我打开这个网站一直显示 Play-With-MPV:解析失败:SecurityError: Failed to read the 'localStorage' property from 'Window': Access is denied for this document. 不知道是不是我配置得不对,画面也加载不出来,所以我不太确定它的逻辑或者结果是什么,能不能真的修改到标题……

我是个前端小白,理解不到位的地方还请多多指教,谢谢大佬

LuckyPuppy514 commented 1 year ago

伪代码都给你了,而且你说的子页面局部刷新的问题,已经有现成的例子,比如:

    {
        // ✅ https://www.dora-family.com/Resource:TV
        name: "哆啦A梦新番",
        home: [
            "https://www.dora-family.com/Resource:TV"
        ],
        regex: /^https:\/\/www\.dora-family\.com\/Resource:TV/g,
        handler: class Handler extends BaseHandler {
            initCheck() {
                if (super.initCheck()) {
                    return true;
                }
                let oldVideoUrl = this.media.videoUrl;
                let newVideoUrl = this.videoParser();
                if (oldVideoUrl && oldVideoUrl != newVideoUrl) {
                    return true;
                }
                return false;
            }
            async parse() {
                this.media.setVideoUrl(this.videoParser());
            }
        }
    },

如果你还是不会,我建议你自己用就行了 😂,因为这种学习类视频, 第一受众很小; 第二是否应该更专注于内容,我不太理解需要调用外部播放器来看的理由; 第三是我没法一步一步教你怎么写,这样比我自己写的时间更本都高,如果你有兴趣,可以参考已有解析器+上网自学 😂。

orz12 commented 1 year ago

伪代码都给你了,而且你说的子页面局部刷新的问题,已经有现成的例子,比如:

    {
        // ✅ https://www.dora-family.com/Resource:TV
        name: "哆啦A梦新番",
        home: [
            "https://www.dora-family.com/Resource:TV"
        ],
        regex: /^https:\/\/www\.dora-family\.com\/Resource:TV/g,
        handler: class Handler extends BaseHandler {
            initCheck() {
                if (super.initCheck()) {
                    return true;
                }
                let oldVideoUrl = this.media.videoUrl;
                let newVideoUrl = this.videoParser();
                if (oldVideoUrl && oldVideoUrl != newVideoUrl) {
                    return true;
                }
                return false;
            }
            async parse() {
                this.media.setVideoUrl(this.videoParser());
            }
        }
    },

如果你还是不会,我建议你自己用就行了 😂,因为这种学习类视频, 第一受众很小; 第二是否应该更专注于内容,我不太理解需要调用外部播放器来看的理由; 第三是我没法一步一步教你怎么写,这样比我自己写的时间更本都高,如果你有兴趣,可以参考已有解析器+上网自学 😂。

感谢提点,我理解了,给initcheck赋值true可以在定时器里触发重新初始化handler,这样确实更好。您对脚本思路更熟悉,代码的封装方式和风格也值得学习,感谢您的不吝赐教。至于这个网站,我是作为一个切入点来尝试写(当然用MPV是便于加速静音片段),其他网站或许也有类似需求,我尽量按照您的思路来实现,减少您的麻烦。ฅ՞•ﻌ•՞ฅ

LuckyPuppy514 commented 1 year ago

这个暂时不合并了 😂

orz12 commented 1 year ago

这个暂时不合并了 😂

没关系 不过我想知道一下 你觉得最后我改的这个写法合适吗?