├── README.md └── img ├── Pasted image 20230905134319.png ├── Pasted image 20230905135006.png ├── Pasted image 20230905141521.png └── Pasted image 20230905150535.png /README.md: -------------------------------------------------------------------------------- 1 | # XsRead 2 | 自己学习写书源的过程,碰到的问题解决方式,作为备份。 3 | 4 | 本文是给自己做个备份,以免忘记香色闺阁的书源制作方法,APP版本是V2.56.1,使用的是EDGE浏览器(google也是一样的)。KDE connect同步iphone和PC的剪切板内容。 5 | 6 | 找到一个软件,可以在PC端读取和编辑香色闺阁的书源:https://github.com/LinShengwzp/source-reader/releases/tag/v1.0.0 7 | 8 | 所有书源的制作实际上都是模拟网页访问过程,并截取网页中需要的内容,阅读、香色等均是如此。总体过程是: 9 | 告诉服务器你需要什么内容;2. 服务器向设备返回网页内容;3. 从网页内容中截取我们需要的信息。 10 | 无论是搜索书籍、获取书籍基本信息、目录、正文,都是上面的过程。获取视频、音频、漫画均是类似的过程。 11 | 12 | 以下以正常网页访问过程为顺序说明香色闺阁的制作过程。 13 | 14 | 第一步是进入书源制作页面,香色闺阁只能在手机上制作,打开手机APP,点击左上角文件夹图标,在弹出的菜单中选择“站点管理”,每一行均表示一个书源,向左滑会出现“副本”和“编辑”,首先点击副本备份,然后点击编辑进入书源编辑页面。 15 | 书源编辑页面中必须配置的选项:名称、host、httpHeaders、书籍搜索、章节列表、章节内容。其他的选填。 16 | 17 | 以下以https://www.bqgbi.com/为例进行说明 18 | 19 | ## 打开资源网站 20 | 21 | 正常访问网页一般会在浏览器的地址栏输入网址,例如`https://www.bqgbi.com`。这个过程对应书源编辑页面中的“基础信息”: 22 | - 名称:资源网站的名称,例如笔趣阁。 23 | 可以自定义,加emoj之类的,方便查看和分类书源。 24 | - host:网址,例如`https://www.bqgbi.com`。 25 | 注意,这里一般会去除com后面的斜杠/,我没试过加上会怎么样,最好去掉。 26 | - httpHeaders:包含给`https://www.bqgbi.com`这个网址的服务器发送的信息。可以理解为,向服务器发送一些要求,告诉服务器需要什么。 27 | 填入以下信息: 28 | ``` 29 | {"Referer":"https://www.bqgbi.com","User-Agent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/73.0.3683.75 Safari\/537.36"} 30 | ``` 31 | 把Referer后面的网址替换为需要的网址,其他的不用管。 32 | 这个过程在正常访问网页时也有,但是是浏览器在后台完成的,不可见。 33 | 34 | ## 搜索书籍 35 | 36 | 正常搜索书籍一般会在页面的搜索栏中输入搜索关键字,例如“都市”,然后点击搜索按钮即可出现搜索结果。这个过程对应书源编辑页面中的“书籍搜索”: 37 | 38 | - 请求信息 39 | 对应输入关键字点击搜索按钮的过程。 40 | 填入以下信息: 41 | ``` 42 | @js: 43 | let url=config.host+"/s"; 44 | 45 | let hh= { 46 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/13.0 Safari/604.1" 47 | }; 48 | 49 | let hp= {'q':params.keyWord}; 50 | 51 | return {'url':url, 'POST':false, 'httpParams':hp 52 | , "httpHeaders": config.httpHeaders,forbidCookie:true}; 53 | ``` 54 | 或者 55 | ``` 56 | /s?q=%@keyWord 57 | ``` 58 | 59 | 推荐第一种方式 60 | 61 | 我们需要通过如下方式获取需要的信息以填写上述代码中的某些信息。 62 |  63 | 64 |  65 | 66 | 有时候浏览器会显示链接为`https://www.bqgbi.com/s?q=都市`,有时为`https://www.bqgbi.com/s?q=%E9%83%BD%E5%B8%82`,可以看到`%E9%83%BD%E5%B8%82`和都市是同一个东西,只是编码问题,可自行百度。 67 | 68 | 下面解释一下如何根据上图中的信息修改代码: 69 | 第一句:不用改。“@js:”代表以下使用JavaScript语法。 70 | 第二句:必须改/s。`config.host`代表前面输入的host(这个例子中为`https://www.bqgbi.com`),`host+'/s'`后的完整的网址url为`https://www.bqgbi.com/s`。这里的url实际上就是`https://www.bqgbi.com/s?q=%E9%83%BD%E5%B8%82`中?之前的部分。在另一个网站中,网址为`http://www.duichongwang.com.cn/ar.php?keyWord=%E9%83%BD%E5%B8%82`,则“/s”应该被替换为`/ar.php`。 71 | 第三句:不用改。 72 | 第四句:必须要改'q'。这句对应?之后的部分,也就是上图“负载”显示的部分,在这个例子中参数为q,值为都市,图中表示为`q:都市`,在我们写的代码中以`'q':params.keyWord`表示。在另一个网站中,网址为`http://www.duichongwang.com.cn/ar.php?keyWord=%E9%83%BD%E5%B8%82`,则应该将q替换为?之后的keyWord。 73 | 第五句:必须改'POST'后面的值,根据情况写ture或者false。在第一个图中的红框中可以看到`请求方法:GET`,此时代码应该写成`'POST':false`,代表请求方法为GET;如果此处显示`请求方法:POST`,则代码应该写成`'POST':true`。 74 | 75 | - 请求参数编码方式和响应编码方式,一般为utf-8,如果不行则换成GBK。 76 | 77 | 以上修改可保证能够正常进行搜索了,如果想了解其他参数的含义,可参考文末尾的链接。 78 | 79 | - 响应规则 80 | 也就是完成搜索后已经获得了搜索结果页面,如何提取这个页面中的信息。 81 | 82 | *注:写响应规则的时候搞错了,搞成了http://www.duichongwang.com.cn,无所谓,实际内容没有本质区别。* 83 | 84 | 我们需要通过如下方式获取需要的信息以填写响应规则。 85 | 86 |  87 | 88 |  89 | 90 | 上图第3和第4步是为了定位我们检索到的书籍列表对应的代码的,相应代码在“元素”标签下面。可以看到,代码前面有个小三角,这表示代码是一层一层展开的,类似于文件夹的结构。上一级称为父节点,下一级称为子节点。每行代码都有一对小括号`<>>`,分别表示开始和结束。`<>`中,div、h2、ul、li、span均为标签,`<>`中标签后的内容为标签的属性,如class表示标签的类,id表示标签的唯一身份标识(类似于身份证),括号中间的黑色字体就是我们在网页中看到的文字内容,也就是我们最终需要的内容。 91 | 92 | 我们需要填写的内容实际上是为了从这种代码中提取出我们想要的信息,比如作品分类,名称,最新章节,作者。 93 | 94 | 列表(list) 95 | 表示整个列表,一个网页有非常多信息,我们需要先定位到搜索结果列表,才能获取想要的信息。此处代码为`//div[@class="row"]//ul/li`。可以点击“元素”下面的任意代码,然后按住ctrl+F,在弹出的搜索框中输入上述代码,可以直接定位到符合以上代码条件的标签,如果没有,则表明标签不正确。 96 | 97 | “//”表示:从当前节点选择子节点或者孙节点。比如,标签`