IOS看书终极选择|源阅读转换|开源阅读|IOS自签

铁佛  金牌会员 | 2024-6-19 19:20:43 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 794|帖子 794|积分 2382

环境:IOS想使用 换源阅读
问题:换新手机,源阅读下架后,没有好的APP阅读小说
解决办法:自签APP + 转换源仓库书源
  终极预览 :https://rc.real9.cn/
   配景:自从我换了新iPhone手机,就无法使换源阅读了,于是我自用上,结果发现如今的书源发展的很快,旧版本的源阅读APP部分书源的语法不支持,于是我反复总结对比,写了一个主动转换的python程序,如上链接
    解决过程:自签APP+转换书源
  
  

1.下载 ipa:

下载地址我就不放了
2.自签IPA:

关于怎么自签,你们可以用轻松签、全能签,小白啥也不会就算了
3.转换书源

3.1 获得书源

源仓库也不提供了,自己搜:
https://yuedu.miaogongzi.net/
3.2 转换规则

由于这款APP版本是2021年左右的,许多新版书源不支持,我们要进行转换,我自己花了点时间总结了一点转换规则:
最常见的规则是不支持a.1@text 这种,要转换,其他参考下列
  1. 书源类型
  2. 0    文本
  3. 2    视频
  4. 3    漫画
  5. 1    音频
  6. -------------------------------
  7. #    选择ID
  8. .     选择元素 class之类
  9. >     子元素
  10. ~     第二个,兄弟元素,同级关系
  11. p:nth-child(2) 父元素的第n个子元素
  12. []    属性选择器            [class^=book] 选择class以book开头的元素
  13. !    倒序选择器            img:!-1 选择最后一个img元素
  14. ||      列组合选择器            col||td 选择col和td元素
  15. ( )    分组选择器            (div,p) 选择所有div和p
  16. ,      多个选择器            .item, .active 选择item和active类
  17. *       通用元素选择器        *.item 选择所有类名包含item的元素
  18. n      表达式选择器            li:nth-child(3n) 按序选择li元素,每个li元素的父元素中的第 3、6、9、12等序号
  19. a.-1@text     改为a:nth-last-child(1)@text
  20. a.1@text         a:nth-child(1)@text```
  21. ### 3.3 步骤3.3
复制代码
3.3 转换书源

如今开始转换,笨的办法是用记事本替换,我写了个python脚原来主动替换
  1. import json
  2. import requests
  3. def replace_selectors(json_data):
  4.     # 替换选择器的函数
  5.     def replace_selector(selector):
  6.         if "." in selector and "@" in selector:
  7.             parts = selector.split('.')
  8.             tag = parts[0]
  9.             selector_part = parts[1]
  10.             if "@" in selector_part:
  11.                 num, at_text = selector_part.split('@', 1)
  12.                 if ":" in num:
  13.                     num, tag_after_colon = num.split(':', 1)
  14.                     num = f"{num}@{tag_after_colon}"
  15.                 if num.replace("-", "").replace(".", "").isdigit():
  16.                     num = "1" if num == "0" else num  # 处理小数点后面是0的情况
  17.                     if num.startswith("-"):
  18.                         num = num[1:]
  19.                         return f"{tag}:nth-last-child({num})@{at_text}"
  20.                     else:
  21.                         return f"{tag}:nth-child({num})@{at_text}"
  22.         return selector
  23.     # 处理列表类型的 JSON 数据
  24.     if isinstance(json_data, list):
  25.         for item in json_data:
  26.             replace_selectors(item)
  27.         return
  28.     # 遍历字典类型的 JSON 数据,查找并替换选择器
  29.     for key, value in json_data.items():
  30.         if isinstance(value, str):
  31.             if "@" in value:
  32.                 value = replace_selector(value)
  33.             json_data[key] = value
  34.         elif isinstance(value, dict):
  35.             replace_selectors(value)
  36.         elif isinstance(value, list):
  37.             for item in value:
  38.                 if isinstance(item, dict):
  39.                     replace_selectors(item)
  40.     # 增加替换规则,当"ruleExplore": []时,替换为"ruleExplore": "##"
  41.     if "ruleExplore" in json_data and not json_data["ruleExplore"]:
  42.         json_data["ruleExplore"] = "##"
  43. if __name__ == "__main__":
  44.     # 用户输入 JSON 文件的 URL
  45.     json_url = input("请输入 JSON 文件的 URL: ")
  46.     # 下载 JSON 数据
  47.     response = requests.get(json_url)
  48.     json_data = response.json()
  49.     # 替换选择器
  50.     replace_selectors(json_data)
  51.     # 提取文件名,并保存 JSON 内容到文件
  52.     file_name = json_url.split('/')[-1]
  53.     with open(file_name, 'w', encoding='utf-8') as file:
  54.         json.dump(json_data, file, indent=4, ensure_ascii=False)
  55.     print(f"JSON 内容已按照新的替换原则进行替换并保存为文件:{file_name}")
复制代码
4.在线转换

本地转换有点麻烦,我玩手机的时候电脑又不会一直在身边,我就把上面的代码改成了web版本,这些复制转换后的连接,到APP剪贴板导入就好了,结果如下:




4.1 web版源代码:

  1. import json
  2. import os
  3. import requests
  4. from flask import Flask, render_template, request, send_from_directory, url_for
  5. from werkzeug.utils import secure_filename
  6. app = Flask(__name__)
  7. def replace_selectors(json_data):
  8.     # 替换选择器的函数
  9.     def replace_selector(selector):
  10.         if "." in selector and "@" in selector:
  11.             parts = selector.split('.')
  12.             tag = parts[0]
  13.             selector_part = parts[1]
  14.             if "@" in selector_part:
  15.                 num, at_text = selector_part.split('@', 1)
  16.                 if ":" in num:
  17.                     num, tag_after_colon = num.split(':', 1)
  18.                     num = f"{num}@{tag_after_colon}"
  19.                 if num.replace("-", "").replace(".", "").isdigit():
  20.                     num = "1" if num == "0" else num  # 处理小数点后面是0的情况
  21.                     if num.startswith("-"):
  22.                         num = num[1:]
  23.                         return f"{tag}:nth-last-child({num})@{at_text}"
  24.                     else:
  25.                         return f"{tag}:nth-child({num})@{at_text}"
  26.         return selector
  27.     # 处理列表类型的 JSON 数据
  28.     if isinstance(json_data, list):
  29.         for item in json_data:
  30.             replace_selectors(item)
  31.         return
  32.     # 遍历字典类型的 JSON 数据,查找并替换选择器
  33.     for key, value in json_data.items():
  34.         if isinstance(value, str):
  35.             if "@" in value:
  36.                 value = replace_selector(value)
  37.             json_data[key] = value
  38.         elif isinstance(value, dict):
  39.             replace_selectors(value)
  40.         elif isinstance(value, list):
  41.             for item in value:
  42.                 if isinstance(item, dict):
  43.                     replace_selectors(item)
  44.    
  45.     # 增加替换规则,当"ruleExplore": []时,替换为"ruleExplore": "##"
  46.     if "ruleExplore" in json_data and not json_data["ruleExplore"]:
  47.         json_data["ruleExplore"] = "##"
  48. if __name__ == "__main__":
  49.     @app.route('/', methods=['GET', 'POST'])
  50.     def index():
  51.         if request.method == 'POST':
  52.             json_url = request.form['json_url']
  53.             response = requests.get(json_url)
  54.             json_data = response.json()
  55.             replace_selectors(json_data)
  56.             # 提取文件名,并保存 JSON 内容到文件
  57.             file_name = json_url.split('/')[-1]
  58.             json_dir = os.path.join(os.path.dirname(__file__), 'json')
  59.             if not os.path.exists(json_dir):
  60.                 os.makedirs(json_dir)
  61.             json_path = os.path.join(json_dir, file_name)
  62.             with open(json_path, 'w', encoding='utf-8') as file:
  63.                 json.dump(json_data, file, indent=4, ensure_ascii=False)
  64.             # 生成下载链接
  65.             download_link = url_for('download', file_name=file_name)
  66.             return render_template('result.html', json_data=json_data, download_link=download_link)
  67.         return render_template('form.html')
  68.     @app.route('/json/<path:file_name>', methods=['GET'])
  69.     def download(file_name):
  70.         json_dir = os.path.join(os.path.dirname(__file__), 'json')
  71.         file_path = os.path.join(json_dir, file_name)
  72.         return send_from_directory(json_dir, file_name, as_attachment=True)
  73.     app.run(host='0.0.0.0', port=5000, debug=True)
复制代码
4.2 我还写了个docker版本的

  1. docker pull realwang/booksource_transios:latest
  2. docker run -d  --name transios -p 5000:5000 booksource_transios
复制代码
  1. # 使用python3环境作为基础镜像
  2. FROM python:3
  3. # 设置工作目录
  4. WORKDIR /app
  5. # 安装git,用于从GitHub下载代码
  6. #RUN apt-get update && apt-get install -y git
  7. # 从GitHub下载代码
  8. RUN git clone https://ghproxy.com/https://github.com/wangrui1573/booksource_transIOS.git /app
  9. # 切换到代码目录
  10. WORKDIR /app
  11. # 安装python依赖
  12. RUN pip install --no-cache-dir -r requirements.txt
  13. # 将容器5000端口映射到主机的5000端口
  14. EXPOSE 5000
  15. # 启动Python应用程序
  16. CMD ["python", "api/conv_book_web.py"]
  17. # docker run -d -p 5000:5000 booksource_transios
复制代码
源代码:https://github.com/wangrui1573/booksource_transIOS

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表