Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new sites #1067

Merged
merged 13 commits into from
Sep 6, 2020
Merged

Add new sites #1067

merged 13 commits into from
Sep 6, 2020

Conversation

src/website_list.json Outdated Show resolved Hide resolved
@Kenshin
Copy link
Owner

Kenshin commented Sep 4, 2020

没事的,我明天看下。

src/website_list.json Outdated Show resolved Hide resolved
@binsee
Copy link
Contributor Author

binsee commented Sep 5, 2020

已经重新提交

@Kenshin
Copy link
Owner

Kenshin commented Sep 5, 2020

okay 完美,我下午看下。

@@ -461,7 +461,7 @@
""
]
},{
"name" : "book.douban.com",
"name" : "reading.book.douban.com",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

由于book.douban.com域名下有多种页面分类,因此将标识进一步明确

@Kenshin
Copy link
Owner

Kenshin commented Sep 5, 2020

太强了!👍🏻👍🏻
无奈今天一直被用户的各种奇葩问题「骚扰」,一直没来及看…

@binsee
Copy link
Contributor Author

binsee commented Sep 5, 2020

经过这些站点适配,发现简悦的站点管理器确实体验不够友好,有些看似理论能匹配的匹配不到,应该生效的不生效。
觉得后续需要提升一下自行适配的体验,比如能在开发者工具中查看简悦进行匹配时的错误提示、日志之类,以便更快速定位问题。
当然多数一般站点是容易适配的,使用动态加载的页面是最麻烦最不好预测问题的。

自行适配的体验提升了,就可以更利于鼓励大家自行适配,减轻需要开发者进行适配的压力。

@Kenshin
Copy link
Owner

Kenshin commented Sep 5, 2020

谢谢反馈以及第一手的体验。


比如能在开发者工具中查看简悦进行匹配时的错误提示、日志之类,以便更快速定位问题。

Devtools 可以实现吗?或者说我记得有可以给它做插件的? React 就是这么做的,只是不知道原理。
不知道你有没有什么好的建议。

动态加载的页面是最麻烦最不好预测问题的。

是的,所以说,我会考虑将适配列表直接加入延迟加载的方式。


站点适配器确实需要一点上手门槛,我一直没找到更好(降低门槛)的方式。

不知道你有没有什么好想法?

@binsee
Copy link
Contributor Author

binsee commented Sep 5, 2020

错误提示、日志之类,主要是因为在适配时,遇到编写的规则没有达到预期效果或者没有生效,尤其是网页会被js动态改变时,xpath和jquery规则有时候会遇到无法生效的情况,我只能多次尝试失败后换另一种匹配方式。但为什么没生效,搞不清楚。这个时候如果有日志提示,就会容易定位了。

例如开启输出调试信息后,手动进入阅读模式,在以下时间点输出信息:

  • url匹配结果
  • 应用匹配规则的概要(如规则标识,或者内置解析引擎)
  • 标题、描述 匹配结果
  • 高亮区域匹配结果(内容太多,可以只输出一些概要,知道是否匹配到内容和大致位置即可)
  • 隐藏列表,从网页移除元素的主标签概要信息
  • 头像名称、地址,前后页匹配结果

最主要的作用就是提示用了什么规则,字段是否匹配到和匹配到的元素概要。

在适配过程中,在Devtools中手动成功定位元素的语句,有些在简悦中不生效

  • 有些页面XPath匹配不好用
  • 有些页面,在Devtools能用人为注入的JQuery匹配,但同样的语句,到简悦中就用不了

具体是因为页面js干扰,还是因为简悦内部匹配优先级之类的原因,搞不清楚,有点懵


现在适配方式有两种

  • 在文章页面上使用 站点编辑器 的浮动小窗,编辑后重载页面
  • 在插件的站点管理器界面,新建站点,编辑规则并保存,然后刷新文章页面

因此,可以在文章页面内,通过console.log输出调试信息,这样在Devtools能看到。

@binsee
Copy link
Contributor Author

binsee commented Sep 5, 2020

站点适配方面,我觉得目前从技术上降低使用门槛是一方面,另一方面就是需要增加适配教程。
用几篇文章由浅入深的示范不同的适配方式,简单的举例几个使用XPath和JQuery进行适配。
有示例,学习门槛也会降低一些。

@binsee
Copy link
Contributor Author

binsee commented Sep 5, 2020

有个想法,是否能做一个文章页面上的即时适配编辑器,可以用于增强站点编辑器的功能。

在站点编辑器中增加一个功能,在输入框内输入匹配规则,然后在显示匹配结果。这样,在文章页面新建规则,先编写规则,用匹配测试,得到期望效果后,复制到对应字段里,然后再编写、测试下一个字段的规则。
将整个编写规则的流程,直接就在当前页面完成,比较直观一些。

我现在适配时,屏幕1开着文章页,对应的Devtools窗口放屏2,在Devtools中检查元素情况、编写与测试匹配规则,然后再粘贴到插件-站点管理器的新建站点里。
一个站点的匹配,需要编写规则后多次保存与刷新页面查看效果。规则在插件内部的匹配情况,只有文章页进入阅读模式时才能知道结果,中间哪里有问题,就需要多次尝试。遇到页面情况复杂点的,确实会比较费时间。
如果能在文章页面,直接用简悦内部的规则匹配流程,测试编写的规则,会省些力。

@Kenshin
Copy link
Owner

Kenshin commented Sep 5, 2020

开启输出调试信息后,手动进入阅读模式,在以下时间点输出信息...

emmm ... 谢谢,很有启发,我会考虑的。

在适配过程中,在Devtools中手动成功定位元素的语句,有些在简悦中不生效

这种情况一般都是因为 JS 改变造成适配失败的。

关于教程的缺失问题

确实关于这部分的内容比较薄弱,从 1.0.0 开始就有了站点适配器的功能,但一直用它的用户太少,导致我放在这块的精力就少很多,毕竟我自己维护简悦,精力有限,只能有所取舍。

@Kenshin
Copy link
Owner

Kenshin commented Sep 5, 2020

有个想法,是否能做一个文章页面上的即时适配编辑器,可以用于增强站点编辑器的功能。

在站点编辑器中增加一个功能,在输入框内输入匹配规则,然后在显示匹配结果。

我也有类似的想法,但一直没想好落脚点,我大致参考过 uBlock 做法…

按照你的思路。

这个功能独立于阅读模式,可直接作用在原页面,是个可交互的编辑器,例如输入标题的适配规则,则直接显示得到的结果,一目了然。

觉得如何?

@binsee
Copy link
Contributor Author

binsee commented Sep 5, 2020

有个想法,是否能做一个文章页面上的即时适配编辑器,可以用于增强站点编辑器的功能。

在站点编辑器中增加一个功能,在输入框内输入匹配规则,然后在显示匹配结果。

我也有类似的想法,但一直没想好落脚点,我大致参考过 uBlock 做法…

按照你的思路。

这个功能独立于阅读模式,可直接作用在原页面,是个可交互的编辑器,例如输入标题的适配规则,则直接显示得到的结果,一目了然。

觉得如何?

非常棒,这样体验会好很多,相信也能让更多用户愿意尝试自己动手适配规则。

@Kenshin
Copy link
Owner

Kenshin commented Sep 5, 2020

okay 我也觉得不错,可以提上日程。

但只能下个版本提供,不过暂时可以用 zip 的方式优先提供给有动手能力用户体验。

@@ -272,7 +272,7 @@
"url" : "https://zhuanlan.zhihu.com/p/",
"title" : "<h1 class='Post-Title'>",
"desc" : "",
"include" : "<div class='RichText Post-RichText'>",
"include" : "[[[(function(){$('.ztext-gif').each(function(){if(this.src.match(/.jpg$/))this.src=this.src.replace(/.jpg$/,'.gif')});return $('.Post-RichText');}())]]]",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

通过阅读简悦的代码,发现可以通过构造自执行函数的方式来执行自定义逻辑,只要在闭包最后返回正常的查询结果便不会影响站点解析。

此条修改通过代码来先加载知乎专栏页面的gif动画,然后进入阅读模式便能正常播放gif啦。

但随之一个问题便是,是否允许或鼓励使用这样的方式来解决适配问题。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

closes #1080

Copy link
Owner

@Kenshin Kenshin Sep 6, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

是的,简悦支持这种方式,适配列表中也有类似的适配规则。

另外,我用此方式也完美实现过微信读书的阅读模式,碍于某些原因,一直没加。

原则就是:不鼓励,也不提,但你自己能做的话,那我也没法限制。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

okay,遇到实在特殊的情况再用

@Kenshin
Copy link
Owner

Kenshin commented Sep 6, 2020

嗨,周末麻烦你了,我看到 Fixed 了好多的站,如果暂时告一段落的话,我下午把它们集中发布一次?


因为是周末,不用为此特意回复我,明天告诉我就行。

@binsee
Copy link
Contributor Author

binsee commented Sep 6, 2020

嗯,暂时结束了。

@Kenshin Kenshin merged commit 4aa2ad2 into Kenshin:develop Sep 6, 2020
@binsee binsee deleted the add-new-sites branch September 6, 2020 08:08
@Kenshin
Copy link
Owner

Kenshin commented Sep 6, 2020

嗨,我 Merge 这个 PR,但是有以下三处修改

"name" : "annotation.book.douban.com",
"url" : "https://book.douban.com/annotation/*",
"title" : "<title>",
"desc" : "",
"include" : "[[`//*[@id='link-report']`]]",
"exclude" : [
""
],
"css" : "sr-rd-content p {white-space: pre-wrap;}"

"name" : "question.zhihu.com",
"url" : "https://www.zhihu.com/question/**",
"type" : "multi",
"avatar" : [
{"name" : "[[{$('.AuthorInfo-name')}]]"},
{"url" : "[[{$('.AuthorInfo-avatar')}]]"}
],
"title" : "[[{$('.QuestionHeader-main').find('h1').text()}]]",
"desc" : "[[{($('.QuestionRichText span').html(JSON.parse(JSON.stringify($.parseJSON($('#js-initialData').text()).initialState.entities.questions).replace(/\"\\d+\":/,'\"questions\":')).questions.detail.replaceAll('。','.')).text()+'。').replace(/.。$/,'。')}]]",
"include" : "[[{$('.RichContent-inner')}]]",
"exclude" : [
"<i class='icon-external'>",
"<div class='RichText-MCNLinkCardContainer'>"
],
"css" : ".simpread-font {overflow: initial!important;}\n.MCNLinkCard-info { margin-left: 12px;}"

simpread/src/website_list.json

Lines 2288 to 2299 in 2e6fbbb

"name" : "www.guancha.cn",
"url" : "https://www.guancha.cn/**/*html",
"title" : "<title>",
"desc" : "[[{$('meta[name=Description]').attr('content')||$('meta[name=description]').attr('content')}]]",
"paging" : [
{"prev" : "[[{$('a.prev').last().attr('onclick')}]]"},
{"next" : "[[{$('a.next').attr('onclick')}]]"}
],
"include" : "[[[$('.content-main .content')]]]",
"exclude" : [
""
]

第三段代码的修改是因为 原适配列表存在 guancha.cn 所以我做了替换。

@binsee
Copy link
Contributor Author

binsee commented Sep 6, 2020

okay

@Kenshin
Copy link
Owner

Kenshin commented Sep 6, 2020

周末也不休息?忘记说前两处了。

  1. 不加 css 的话,无法自动换行

  2. 未登录知乎的话, html 会 overflow: hidden


另外,在宣传更新适配列表时,需不需要 at 你的社交账户?需要的话,告诉我个账户,或者把你 github 带上?

@binsee
Copy link
Contributor Author

binsee commented Sep 6, 2020

哈哈,正好在电脑前。github就好,社恐

@Kenshin
Copy link
Owner

Kenshin commented Sep 6, 2020

哈哈,多出去玩玩。

我这段时间确实没啥时间啊。 😅

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants