├── .gitignore ├── .idea ├── .gitignore ├── dbnavigator.xml ├── dr_py.iml ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml ├── misc.xml ├── modules.xml └── vcs.xml ├── 404.jpg ├── LICENSE ├── app.py ├── app.sh ├── base ├── R.py ├── __init__.py ├── alist.conf ├── config.py ├── custom.conf ├── database.py ├── live.txt ├── rules.db ├── 直播.txt └── 解析.conf ├── commands.txt ├── controllers ├── __init__.py ├── admin.py ├── classes.py ├── cls.py ├── cms.py ├── home.py ├── layui.py ├── parse.py ├── service.py ├── vod.py └── web.py ├── doc ├── banips.sh ├── chatgpt搭建教程.md ├── js压缩.md ├── python最强js引擎.md ├── termux使用问题.md ├── windows搭建说明.md ├── 其他好玩的项目.md ├── 写源教程.md ├── 大佬友链.md ├── 安卓本地搭建说明.md ├── 接口文档.md ├── 更新日志.md ├── 海阔视界道长仓库搭建说明.md └── 道长乱说.md ├── docker ├── amd64_dockerfile.txt ├── arm64_dockerfile.txt ├── armv7_dockerfile.txt └── merge.sh ├── dockerfile ├── dockerfile_arm64.txt ├── dockerfile_armv7.txt ├── images ├── 1.jpg ├── 2.jpg ├── 3.jpg ├── 4.jpg ├── odoo.jpg ├── zb.jpg ├── 城市长凳.jpg ├── 绿林.jpg └── 高铁.jpg ├── jiexi ├── 168.jsd ├── bozrc.php ├── dyg.js ├── dyg.php ├── vip.js ├── vip.php ├── vqq.php ├── 万能.js ├── 刚刚.js ├── 周星驰.js ├── 哔哩.js ├── 图片.jsi ├── 多多.jsd ├── 完美看看.jsd ├── 插萝莉慢.js ├── 斗鱼.js ├── 无名.js ├── 江湖.js ├── 江湖加密.js ├── 苹果爱微.jsi ├── 解析.conf ├── 酷云.js ├── 飞跃.js └── 鸿途.js ├── js ├── 007影视.jsd ├── 139影视.js ├── 188影视.js ├── 18哈.js ├── 310直播.js ├── 333影视.js ├── 348电影网.js ├── 360影视.js ├── 4K电影网.js ├── 4k剧院.js ├── 555影视[飞].js ├── 555电影[V2].js ├── 567电影院.js ├── 58动漫.js ├── 69美剧.js ├── 69美剧[V2].js ├── 6V新版[磁].js ├── 7喜影院.js ├── 88看球.js ├── 8号影院.js ├── 996影视.js ├── 9U电影.jsd ├── A8音乐.js ├── AGE动漫.js ├── AnFuns.js ├── Anime1动畫.js ├── Auete.js ├── B站影视.js ├── DJ音乐.js ├── Fun4K.js ├── HDmoli.js ├── Icio影视.jsd ├── JRKAN直播.js ├── JangoIndex.js ├── JustLive.js ├── KOK影院.js ├── KUBO影视[飞].js ├── LIBVIO.js ├── MV263.jsd ├── NT动漫.js ├── NY影院.js ├── NyaFun.js ├── TVB云播.js ├── UM电影.jsd ├── UrleBird[飞].js ├── alist.conf ├── cokemv.js ├── ddys.js ├── drpy.js ├── drpy.txt ├── gaze.jsd ├── i275听书.js ├── if101[飞].js ├── ikanbot2.js ├── ikanbot3.js ├── jsapi.js ├── jsapi2.js ├── l0l.jsd ├── rules.py ├── version.txt ├── vidhub.jsd ├── voflix.js ├── 两个BT.js ├── 中国人线上看.js ├── 乐猪TV.jsd ├── 乐鱼影视.js ├── 九酷.jsd ├── 人人影视.js ├── 优酷.js ├── 兄弟影视.js ├── 免费看.js ├── 兔小贝.js ├── 六月听书.js ├── 兰花影院.js ├── 农民影视.js ├── 凌云影视.js ├── 刺桐[V2].js ├── 剧白白.jsd ├── 剧迷su.js ├── 动漫岛.js ├── 北川影视.js ├── 华乐影院[飞].js ├── 南柯电影网.jsd ├── 南瓜影视.js ├── 博看听书.js ├── 厂长资源.js ├── 去看吧.js ├── 双十电影.jsd ├── 听书网.js ├── 吼吼[飞].jsd ├── 咕噜[V2].js ├── 哔哩影视.js ├── 哔哩直播.js ├── 哔嘀影视.js ├── 唐人街影视[飞].jsd ├── 啦啦DJ.js ├── 喜马拉雅.js ├── 喵次元.js ├── 四个圈影视.js ├── 在线之家.js ├── 多瑙影视.js ├── 大师兄影视.js ├── 大米星球.js ├── 大米星球[V2].js ├── 天天视频[飞].js ├── 奇优影院.js ├── 奇珍异兽.js ├── 奇米动漫.js ├── 奈飞中文.js ├── 奈飞狗[V2].js ├── 好趣网.js ├── 妮可动漫.js ├── 孜然影视.js ├── 小品网.js ├── 小宝影院[飞].js ├── 小强迷.jsd ├── 小狗影院.js ├── 小猫咪.jsd ├── 小白菜电影.js ├── 尘落影视.js ├── 干饭影视.js ├── 广播迷FM.js ├── 开眼视频.js ├── 异世界动漫.js ├── 影渣渣.js ├── 影视之家[V2].js ├── 影视工场.js ├── 往往影视.jsd ├── 徕米TV.js ├── 快看.js ├── 思古影视.js ├── 思古影视[V2].js ├── 怡萱动漫.js ├── 悠久影院.js ├── 我爱跟剧.js ├── 我的哔哩.js ├── 播客.js ├── 斗鱼直播.js ├── 新片场.js ├── 新视觉影视.js ├── 无名小站.jsd ├── 星辰.js ├── 映迷影院.js ├── 曲奇动漫.js ├── 曲奇影视[V2].js ├── 有声小说吧.js ├── 有声绘本网.js ├── 朴樱影视.js ├── 楚门影院.js ├── 模板.js ├── 欧乐影院[飞].js ├── 欧帝影院.js ├── 武享吧.js ├── 歪片星球.js ├── 海洋听书.js ├── 清风DJ.js ├── 热播之家.js ├── 热播库.js ├── 爱上你听书网.js ├── 爱壹帆[飞].js ├── 爱弹幕.js ├── 爱看.js ├── 爱看影院.js ├── 爱看机器人.js ├── 爱车MV.js ├── 爱迪[V2].js ├── 爱迪影视.js ├── 独播库[飞].js ├── 猫了个咪.js ├── 电影先生.js ├── 百忙无果.js ├── 相声随身听.js ├── 看了么.js ├── 看韩剧.js ├── 真不卡.jsd ├── 短剧网.jsd ├── 短视频.js ├── 石榴影院.jsd ├── 磁力熊[磁].js ├── 私人影院.js ├── 秋霞.js ├── 种子音乐.jsd ├── 童趣.js ├── 米爱影视.js ├── 粤爱看.jsd ├── 素白白.js ├── 网易公版影像.js ├── 网飞.TV.js ├── 美剧网.js ├── 美益达[V2].js ├── 胖虎.js ├── 腾云驾雾.js ├── 苹果DJ.jsd ├── 苹果爱微.js ├── 荐片.js ├── 莫扎兔.jsd ├── 菜狗.js ├── 落攻阁影视.js ├── 蓝光影院.js ├── 蓝莓影视.jsd ├── 蘑菇.jsd ├── 虎牙直播.js ├── 蛋蛋剧.js ├── 蛋蛋赞.js ├── 蜻蜓FM.js ├── 评书随身听.js ├── 起飞影院.js ├── 跑TV.js ├── 路漫漫.js ├── 达达龟.js ├── 追剧迷.js ├── 酷6网.js ├── 酷云77.js ├── 酷奇MV.js ├── 酷狗MV.jsd ├── 量子影视.js ├── 量子资源.js ├── 金曼影视.js ├── 音悦网.jsd ├── 飞兔影视.js ├── 饭团影视.jsd ├── 首播影院.js ├── 骚火电影.js └── 鸭奈飞.jsd ├── libs ├── alist.js ├── alist.min.js ├── atob.js ├── base64.js ├── base64.min.js ├── cat_index.js ├── cheerio.min.js ├── cheerio.min.jsd ├── crypto-hiker.js ├── crypto-js.js ├── drT.js ├── drpy-ym.js ├── drpy.js ├── drpy.min.js ├── drpy.ym.js ├── drpy2-2838.js ├── drpy2.js ├── drpy2.min.js ├── es6py.js ├── exRegExp.js ├── gbk.js ├── gbk2.js ├── jar │ ├── SP.jar │ ├── base.jar │ ├── chajian.zip │ ├── custom_jsapi.jar │ ├── custom_spider.jar │ ├── custom_spider.mini.jar │ ├── custom_spider_dz1201.jar │ ├── custom_spider_dz230509.jar │ ├── custom_spider_qy0627.jar │ ├── custom_spider_tang.jar │ ├── custom_spider_xiaoya.jar │ └── custom_spider_xyq1106.jar ├── jsencrypt.js ├── live2cms.js ├── live2mv.js ├── maomi_aes.js ├── mod.js ├── nameOrder.js ├── parse │ └── getck_vqq.js ├── pdf.js ├── pinyin_getFirstLetterList.js ├── pre.js ├── rsa.js ├── searchFilter.js ├── sortName.js ├── underscore-esm-min.js ├── uri.min.js └── util.ym.js ├── logs └── 这里动态日志文件.txt ├── models ├── __init__.py ├── playparse.py ├── ruleclass.py ├── storage.py └── vipParse.py ├── py ├── 360二级.js ├── base64转图片.py ├── chatgpt调用.py ├── drpy一级.js ├── drpy推荐.js ├── gaze一级.js ├── gaze筛选.py ├── mxpro筛选.py ├── php自建解析.py ├── qkjs │ ├── js2py执行性能.png │ ├── pr修改 │ │ ├── module.c │ │ └── test_quickjs.py │ ├── qkjs执行性能.png │ ├── quick.py │ ├── quickjs_py交互.py │ ├── test_py_mini_racer.py │ ├── test_quickjs.py │ └── 测试报告.txt ├── test_time.py ├── 下载jar.py ├── 九酷.py ├── 九酷一级.js ├── 优酷一级.js ├── 优酷二级.js ├── 优酷搜索.js ├── 优酷筛选.py ├── 低端免嗅.js ├── 低端选集.js ├── 厂长预处理.js ├── 哔哩一级.js ├── 哔哩二级.js ├── 哔哩免嗅.js ├── 哔哩推荐.js ├── 哔哩搜索.js ├── 唐人街电影.html ├── 外部更新环境变量.py ├── 奇优搜索.js ├── 学生直播一级.js ├── 对比提取独有目录.py ├── 干饭.js ├── 干饭.py ├── 批量重命名.py ├── 抖音去水印.py ├── 搜狗二级.js ├── 搜狗免嗅.js ├── 搜狗搜索.js ├── 搜狗筛选.py ├── 搜索一级.js ├── 日常.html ├── 时钟玩具.py ├── 有声小说列表.js ├── 测试pdf.py ├── 测试注视.py ├── 爱奇艺一级.js ├── 爱奇艺二级.js ├── 爱奇艺推荐.js ├── 爱奇艺筛选.json ├── 爱奇艺筛选.py ├── 猫了个咪一级.js ├── 猫了个咪免嗅.js ├── 猫了个咪搜索.js ├── 石榴免嗅.js ├── 腾讯临时二级.js ├── 腾讯二级.js ├── 腾讯搜索.js ├── 腾讯筛选.py ├── 芒果二级.js ├── 芒果搜索.js ├── 芒果筛选.py ├── 荐片筛选.py ├── 荐片选集列表.js ├── 蓝莓.js ├── 豆瓣测试.py ├── 豆瓣筛选.py ├── 通用免嗅.py ├── 酷云二级.js ├── 酷云免嗅.js ├── 酷云筛选.py └── 首图2筛选.py ├── readme.md ├── requirements.txt ├── sources.list ├── start.sh ├── static ├── css │ ├── admin.css │ ├── grey.css │ ├── home.css │ ├── index.css │ ├── jquery-confirm.min.css │ ├── login.css │ └── settings.css ├── img │ ├── 404.jpg │ ├── check.png │ ├── checked.png │ ├── favicon.svg │ ├── icon.png │ ├── login_background.png │ ├── logo.png │ ├── logo_drpy1.png │ ├── logo_drpy2.png │ ├── logo_drpy3.png │ ├── yzm.png │ └── 豆瓣.png ├── js │ ├── app.js │ ├── axios.min.js │ ├── common.js │ ├── dzUtil.js │ ├── eruda.js │ ├── grey.js │ ├── jquery-confirm.min.js │ ├── jquery.cookie.min.js │ ├── jquery.js │ ├── jquery.lazyload.min.js │ ├── jquery.min.js │ ├── particles.js │ ├── pinyin-pro.js │ ├── tools.js │ └── vue3.js ├── plugin │ ├── codemirror │ │ ├── lib │ │ │ ├── codemirror.css │ │ │ └── codemirror.js │ │ ├── mode │ │ │ ├── apl │ │ │ │ ├── apl.js │ │ │ │ └── index.html │ │ │ ├── asciiarmor │ │ │ │ ├── asciiarmor.js │ │ │ │ └── index.html │ │ │ ├── asn.1 │ │ │ │ ├── asn.1.js │ │ │ │ └── index.html │ │ │ ├── asterisk │ │ │ │ ├── asterisk.js │ │ │ │ └── index.html │ │ │ ├── brainfuck │ │ │ │ ├── brainfuck.js │ │ │ │ └── index.html │ │ │ ├── clike │ │ │ │ ├── clike.js │ │ │ │ ├── index.html │ │ │ │ ├── scala.html │ │ │ │ └── test.js │ │ │ ├── clojure │ │ │ │ ├── clojure.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── cmake │ │ │ │ ├── cmake.js │ │ │ │ └── index.html │ │ │ ├── cobol │ │ │ │ ├── cobol.js │ │ │ │ └── index.html │ │ │ ├── coffeescript │ │ │ │ ├── coffeescript.js │ │ │ │ └── index.html │ │ │ ├── commonlisp │ │ │ │ ├── commonlisp.js │ │ │ │ └── index.html │ │ │ ├── crystal │ │ │ │ ├── crystal.js │ │ │ │ └── index.html │ │ │ ├── css │ │ │ │ ├── css.js │ │ │ │ ├── gss.html │ │ │ │ ├── gss_test.js │ │ │ │ ├── index.html │ │ │ │ ├── less.html │ │ │ │ ├── less_test.js │ │ │ │ ├── scss.html │ │ │ │ ├── scss_test.js │ │ │ │ └── test.js │ │ │ ├── cypher │ │ │ │ ├── cypher.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── d │ │ │ │ ├── d.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── dart │ │ │ │ ├── dart.js │ │ │ │ └── index.html │ │ │ ├── diff │ │ │ │ ├── diff.js │ │ │ │ └── index.html │ │ │ ├── django │ │ │ │ ├── django.js │ │ │ │ └── index.html │ │ │ ├── dockerfile │ │ │ │ ├── dockerfile.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── dtd │ │ │ │ ├── dtd.js │ │ │ │ └── index.html │ │ │ ├── dylan │ │ │ │ ├── dylan.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── ebnf │ │ │ │ ├── ebnf.js │ │ │ │ └── index.html │ │ │ ├── ecl │ │ │ │ ├── ecl.js │ │ │ │ └── index.html │ │ │ ├── eiffel │ │ │ │ ├── eiffel.js │ │ │ │ └── index.html │ │ │ ├── elm │ │ │ │ ├── elm.js │ │ │ │ └── index.html │ │ │ ├── erlang │ │ │ │ ├── erlang.js │ │ │ │ └── index.html │ │ │ ├── factor │ │ │ │ ├── factor.js │ │ │ │ └── index.html │ │ │ ├── fcl │ │ │ │ ├── fcl.js │ │ │ │ └── index.html │ │ │ ├── forth │ │ │ │ ├── forth.js │ │ │ │ └── index.html │ │ │ ├── fortran │ │ │ │ ├── fortran.js │ │ │ │ └── index.html │ │ │ ├── gas │ │ │ │ ├── gas.js │ │ │ │ └── index.html │ │ │ ├── gfm │ │ │ │ ├── gfm.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── gherkin │ │ │ │ ├── gherkin.js │ │ │ │ └── index.html │ │ │ ├── go │ │ │ │ ├── go.js │ │ │ │ └── index.html │ │ │ ├── groovy │ │ │ │ ├── groovy.js │ │ │ │ └── index.html │ │ │ ├── haml │ │ │ │ ├── haml.js │ │ │ │ ├── index.html │ │ │ │ └── test.js │ │ │ ├── handlebars │ │ │ │ ├── handlebars.js │ │ │ │ └── index.html │ │ │ ├── haskell-literate │ │ │ │ ├── haskell-literate.js │ │ │ │ └── index.html │ │ │ ├── haskell │ │ │ │ ├── haskell.js │ │ │ │ └── index.html │ │ │ ├── haxe │ │ │ │ ├── haxe.js │ │ │ │ └── index.html │ │ │ ├── htmlembedded │ │ │ │ ├── htmlembedded.js │ │ │ │ └── index.html │ │ │ ├── htmlmixed │ │ │ │ ├── htmlmixed.js │ │ │ │ └── index.html │ │ │ ├── http │ │ │ │ ├── http.js │ │ │ │ └── index.html │ │ │ ├── idl │ │ │ │ ├── idl.js │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ ├── javascript │ │ │ │ ├── index.html │ │ │ │ ├── javascript.js │ │ │ │ ├── json-ld.html │ │ │ │ ├── test.js │ │ │ │ └── typescript.html │ │ │ ├── jinja2 │ │ │ │ ├── index.html │ │ │ │ └── jinja2.js │ │ │ ├── jsx │ │ │ │ ├── index.html │ │ │ │ ├── jsx.js │ │ │ │ └── test.js │ │ │ ├── julia │ │ │ │ ├── index.html │ │ │ │ └── julia.js │ │ │ ├── livescript │ │ │ │ ├── index.html │ │ │ │ └── livescript.js │ │ │ ├── lua │ │ │ │ ├── index.html │ │ │ │ └── lua.js │ │ │ ├── markdown │ │ │ │ ├── index.html │ │ │ │ ├── markdown.js │ │ │ │ └── test.js │ │ │ ├── mathematica │ │ │ │ ├── index.html │ │ │ │ └── mathematica.js │ │ │ ├── mbox │ │ │ │ ├── index.html │ │ │ │ └── mbox.js │ │ │ ├── meta.js │ │ │ ├── mirc │ │ │ │ ├── index.html │ │ │ │ └── mirc.js │ │ │ ├── mllike │ │ │ │ ├── index.html │ │ │ │ └── mllike.js │ │ │ ├── modelica │ │ │ │ ├── index.html │ │ │ │ └── modelica.js │ │ │ ├── mscgen │ │ │ │ ├── index.html │ │ │ │ ├── mscgen.js │ │ │ │ ├── mscgen_test.js │ │ │ │ ├── msgenny_test.js │ │ │ │ └── xu_test.js │ │ │ ├── mumps │ │ │ │ ├── index.html │ │ │ │ └── mumps.js │ │ │ ├── nginx │ │ │ │ ├── index.html │ │ │ │ └── nginx.js │ │ │ ├── nsis │ │ │ │ ├── index.html │ │ │ │ └── nsis.js │ │ │ ├── ntriples │ │ │ │ ├── index.html │ │ │ │ └── ntriples.js │ │ │ ├── octave │ │ │ │ ├── index.html │ │ │ │ └── octave.js │ │ │ ├── oz │ │ │ │ ├── index.html │ │ │ │ └── oz.js │ │ │ ├── pascal │ │ │ │ ├── index.html │ │ │ │ └── pascal.js │ │ │ ├── pegjs │ │ │ │ ├── index.html │ │ │ │ └── pegjs.js │ │ │ ├── perl │ │ │ │ ├── index.html │ │ │ │ └── perl.js │ │ │ ├── php │ │ │ │ ├── index.html │ │ │ │ ├── php.js │ │ │ │ └── test.js │ │ │ ├── pig │ │ │ │ ├── index.html │ │ │ │ └── pig.js │ │ │ ├── powershell │ │ │ │ ├── index.html │ │ │ │ ├── powershell.js │ │ │ │ └── test.js │ │ │ ├── properties │ │ │ │ ├── index.html │ │ │ │ └── properties.js │ │ │ ├── protobuf │ │ │ │ ├── index.html │ │ │ │ └── protobuf.js │ │ │ ├── pug │ │ │ │ ├── index.html │ │ │ │ └── pug.js │ │ │ ├── puppet │ │ │ │ ├── index.html │ │ │ │ └── puppet.js │ │ │ ├── python │ │ │ │ ├── index.html │ │ │ │ ├── python.js │ │ │ │ └── test.js │ │ │ ├── q │ │ │ │ ├── index.html │ │ │ │ └── q.js │ │ │ ├── r │ │ │ │ ├── index.html │ │ │ │ └── r.js │ │ │ ├── rpm │ │ │ │ ├── changes │ │ │ │ │ └── index.html │ │ │ │ ├── index.html │ │ │ │ └── rpm.js │ │ │ ├── rst │ │ │ │ ├── index.html │ │ │ │ └── rst.js │ │ │ ├── ruby │ │ │ │ ├── index.html │ │ │ │ ├── ruby.js │ │ │ │ └── test.js │ │ │ ├── rust │ │ │ │ ├── index.html │ │ │ │ ├── rust.js │ │ │ │ └── test.js │ │ │ ├── sas │ │ │ │ ├── index.html │ │ │ │ └── sas.js │ │ │ ├── sass │ │ │ │ ├── index.html │ │ │ │ ├── sass.js │ │ │ │ └── test.js │ │ │ ├── scheme │ │ │ │ ├── index.html │ │ │ │ └── scheme.js │ │ │ ├── shell │ │ │ │ ├── index.html │ │ │ │ ├── shell.js │ │ │ │ └── test.js │ │ │ ├── sieve │ │ │ │ ├── index.html │ │ │ │ └── sieve.js │ │ │ ├── slim │ │ │ │ ├── index.html │ │ │ │ ├── slim.js │ │ │ │ └── test.js │ │ │ ├── smalltalk │ │ │ │ ├── index.html │ │ │ │ └── smalltalk.js │ │ │ ├── smarty │ │ │ │ ├── index.html │ │ │ │ └── smarty.js │ │ │ ├── solr │ │ │ │ ├── index.html │ │ │ │ └── solr.js │ │ │ ├── soy │ │ │ │ ├── index.html │ │ │ │ ├── soy.js │ │ │ │ └── test.js │ │ │ ├── sparql │ │ │ │ ├── index.html │ │ │ │ └── sparql.js │ │ │ ├── spreadsheet │ │ │ │ ├── index.html │ │ │ │ └── spreadsheet.js │ │ │ ├── sql │ │ │ │ ├── index.html │ │ │ │ └── sql.js │ │ │ ├── stex │ │ │ │ ├── index.html │ │ │ │ ├── stex.js │ │ │ │ └── test.js │ │ │ ├── stylus │ │ │ │ ├── index.html │ │ │ │ └── stylus.js │ │ │ ├── swift │ │ │ │ ├── index.html │ │ │ │ ├── swift.js │ │ │ │ └── test.js │ │ │ ├── tcl │ │ │ │ ├── index.html │ │ │ │ └── tcl.js │ │ │ ├── textile │ │ │ │ ├── index.html │ │ │ │ ├── test.js │ │ │ │ └── textile.js │ │ │ ├── tiddlywiki │ │ │ │ ├── index.html │ │ │ │ ├── tiddlywiki.css │ │ │ │ └── tiddlywiki.js │ │ │ ├── tiki │ │ │ │ ├── index.html │ │ │ │ ├── tiki.css │ │ │ │ └── tiki.js │ │ │ ├── toml │ │ │ │ ├── index.html │ │ │ │ └── toml.js │ │ │ ├── tornado │ │ │ │ ├── index.html │ │ │ │ └── tornado.js │ │ │ ├── troff │ │ │ │ ├── index.html │ │ │ │ └── troff.js │ │ │ ├── ttcn-cfg │ │ │ │ ├── index.html │ │ │ │ └── ttcn-cfg.js │ │ │ ├── ttcn │ │ │ │ ├── index.html │ │ │ │ └── ttcn.js │ │ │ ├── turtle │ │ │ │ ├── index.html │ │ │ │ └── turtle.js │ │ │ ├── twig │ │ │ │ ├── index.html │ │ │ │ └── twig.js │ │ │ ├── vb │ │ │ │ ├── index.html │ │ │ │ └── vb.js │ │ │ ├── vbscript │ │ │ │ ├── index.html │ │ │ │ └── vbscript.js │ │ │ ├── velocity │ │ │ │ ├── index.html │ │ │ │ └── velocity.js │ │ │ ├── verilog │ │ │ │ ├── index.html │ │ │ │ ├── test.js │ │ │ │ └── verilog.js │ │ │ ├── vhdl │ │ │ │ ├── index.html │ │ │ │ └── vhdl.js │ │ │ ├── vue │ │ │ │ ├── index.html │ │ │ │ └── vue.js │ │ │ ├── wast │ │ │ │ ├── index.html │ │ │ │ ├── test.js │ │ │ │ └── wast.js │ │ │ ├── webidl │ │ │ │ ├── index.html │ │ │ │ └── webidl.js │ │ │ ├── xml │ │ │ │ ├── index.html │ │ │ │ ├── test.js │ │ │ │ └── xml.js │ │ │ ├── xquery │ │ │ │ ├── index.html │ │ │ │ ├── test.js │ │ │ │ └── xquery.js │ │ │ ├── yacas │ │ │ │ ├── index.html │ │ │ │ └── yacas.js │ │ │ ├── yaml-frontmatter │ │ │ │ ├── index.html │ │ │ │ └── yaml-frontmatter.js │ │ │ ├── yaml │ │ │ │ ├── index.html │ │ │ │ └── yaml.js │ │ │ └── z80 │ │ │ │ ├── index.html │ │ │ │ └── z80.js │ │ └── theme │ │ │ ├── 3024-day.css │ │ │ ├── 3024-night.css │ │ │ ├── abcdef.css │ │ │ ├── ambiance-mobile.css │ │ │ ├── ambiance.css │ │ │ ├── ayu-dark.css │ │ │ ├── ayu-mirage.css │ │ │ ├── base16-dark.css │ │ │ ├── base16-light.css │ │ │ ├── bespin.css │ │ │ ├── blackboard.css │ │ │ ├── cobalt.css │ │ │ ├── colorforth.css │ │ │ ├── darcula.css │ │ │ ├── dracula.css │ │ │ ├── duotone-dark.css │ │ │ ├── duotone-light.css │ │ │ ├── eclipse.css │ │ │ ├── elegant.css │ │ │ ├── erlang-dark.css │ │ │ ├── gruvbox-dark.css │ │ │ ├── hopscotch.css │ │ │ ├── icecoder.css │ │ │ ├── idea.css │ │ │ ├── isotope.css │ │ │ ├── lesser-dark.css │ │ │ ├── liquibyte.css │ │ │ ├── lucario.css │ │ │ ├── material-darker.css │ │ │ ├── material-ocean.css │ │ │ ├── material-palenight.css │ │ │ ├── material.css │ │ │ ├── mbo.css │ │ │ ├── mdn-like.css │ │ │ ├── midnight.css │ │ │ ├── monokai.css │ │ │ ├── moxer.css │ │ │ ├── neat.css │ │ │ ├── neo.css │ │ │ ├── night.css │ │ │ ├── nord.css │ │ │ ├── oceanic-next.css │ │ │ ├── panda-syntax.css │ │ │ ├── paraiso-dark.css │ │ │ ├── paraiso-light.css │ │ │ ├── pastel-on-dark.css │ │ │ ├── railscasts.css │ │ │ ├── rubyblue.css │ │ │ ├── seti.css │ │ │ ├── shadowfox.css │ │ │ ├── solarized.css │ │ │ ├── ssms.css │ │ │ ├── the-matrix.css │ │ │ ├── tomorrow-night-bright.css │ │ │ ├── tomorrow-night-eighties.css │ │ │ ├── ttcn.css │ │ │ ├── twilight.css │ │ │ ├── vibrant-ink.css │ │ │ ├── xq-dark.css │ │ │ ├── xq-light.css │ │ │ ├── yeti.css │ │ │ ├── yonce.css │ │ │ └── zenburn.css │ └── layui │ │ ├── css │ │ ├── layui.css │ │ └── modules │ │ │ ├── code.css │ │ │ ├── laydate │ │ │ └── default │ │ │ │ └── laydate.css │ │ │ └── layer │ │ │ └── default │ │ │ ├── icon-ext.png │ │ │ ├── icon.png │ │ │ ├── layer.css │ │ │ ├── loading-0.gif │ │ │ ├── loading-1.gif │ │ │ └── loading-2.gif │ │ ├── ext │ │ └── soulTable │ │ │ ├── excel.js │ │ │ ├── soulTable.css │ │ │ ├── soulTable.js │ │ │ ├── soulTable.slim.js │ │ │ ├── tableChild.js │ │ │ ├── tableFilter.js │ │ │ └── tableMerge.js │ │ ├── font │ │ ├── iconfont.eot │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ └── iconfont.woff2 │ │ └── layui.js └── sweetalert │ ├── sweetalert-dev.js │ └── sweetalert.css ├── super ├── flask.conf ├── sflask.conf ├── stermux.conf └── termux.conf ├── templates ├── 404.html ├── admin.html ├── cms │ └── mxpro │ │ ├── categoryContent.html │ │ ├── css │ │ ├── commonUI.css │ │ ├── iconfont.css │ │ ├── notice.css │ │ └── stui_default.css │ │ ├── detailContent.html │ │ ├── homeContent.html │ │ ├── img │ │ ├── back.png │ │ ├── help.png │ │ ├── load.gif │ │ ├── logo.png │ │ ├── play.png │ │ └── show.png │ │ ├── js │ │ ├── commonUI.js │ │ ├── commonUtil.js │ │ ├── home.js │ │ ├── html5shiv.min.js │ │ ├── index.js │ │ ├── js-sdk-pro.min.js │ │ ├── mxhtml.js │ │ ├── respond.min.js │ │ ├── rich-tf.js │ │ └── stui_default.js │ │ └── searchContent.html ├── config.txt ├── config.txt.old ├── config.txt.old2 ├── edit_rule.html ├── edit_rule_mobile.html ├── index.html ├── layui_index.html ├── layui_jxs.html ├── layui_list.html ├── lives.html ├── login.html ├── logtail.html ├── player │ ├── mui │ │ ├── css │ │ │ ├── common.css │ │ │ ├── home.css │ │ │ ├── mui-player.min.css │ │ │ └── muiplayer.css │ │ ├── favicon.ico │ │ ├── imges │ │ │ ├── GEBDGDCAJSP4DhK.png │ │ │ ├── background.jpg │ │ │ └── loading.gif │ │ ├── index.html │ │ └── js │ │ │ ├── chunk.common.js │ │ │ ├── chunk.home.js │ │ │ ├── chunk.vendor.js │ │ │ ├── flv.min.js │ │ │ ├── flv.min.js.map │ │ │ ├── hls.min.js │ │ │ ├── hls.min.js.map │ │ │ ├── jquery.min.js │ │ │ ├── jquery.xctips.js │ │ │ ├── mui-player-desktop-plugin.min.js │ │ │ ├── mui-player-mobile-plugin.min.js │ │ │ ├── mui-player.min.js │ │ │ ├── runtime.js │ │ │ └── setting.js │ ├── p2p-media-loader │ │ ├── DPlayer.min.css │ │ ├── DPlayer.min.js │ │ ├── class.main.js │ │ ├── hls.js │ │ ├── images │ │ │ ├── line.png │ │ │ ├── list.png │ │ │ ├── loading_pc.jpg │ │ │ ├── loading_wap.gif │ │ │ ├── loading_wapx.gif │ │ │ ├── logo.png │ │ │ ├── next.png │ │ │ └── pront.png │ │ ├── jquery.min.js │ │ ├── p2p-media-loader-core.min.js │ │ ├── p2p-media-loader-hlsjs.min.js │ │ ├── p2p-media-loader-servers.js │ │ └── p2pm3u8.html │ ├── p2phls │ │ ├── cbplayer2.js │ │ ├── hls.min.js │ │ ├── jquery.min.js │ │ ├── loading_pc.jpg │ │ └── p2phls.html │ └── p2pplayer │ │ ├── DPlayer.min.css │ │ ├── DPlayer.min.js │ │ ├── images │ │ ├── line.png │ │ ├── list.png │ │ ├── loading_pc.jpg │ │ ├── next.png │ │ └── pront.png │ │ ├── index.htm │ │ └── p2p.min.js ├── rules_to_clear.html ├── rules_to_view.html ├── settings.html ├── show_search.html └── tools.html ├── test ├── EP.py ├── flaskOcrDz.py ├── yzm.png ├── yzm1.png ├── 测试.py ├── 测试OCR.py ├── 测试gui.py └── 测试过验证.py ├── txt ├── help.txt ├── hipy │ ├── base_java_loader.py │ ├── base_spider.json │ ├── base_spider.py │ ├── bidi.jar │ ├── cntv央视.json │ ├── cntv央视.py │ ├── test_1.txt │ ├── 两个BT.json │ ├── 两个BT.py │ ├── 哔滴影视.py │ ├── 喵次元.py │ ├── 新浪资源.py │ ├── 樱花动漫.json │ └── 樱花动漫.py ├── issue.txt ├── jar │ ├── 0906.jar │ └── spiders.zip ├── js │ ├── 18 │ │ ├── 18av.js │ │ ├── Missav.js │ │ ├── banan.js │ │ ├── 养端.js │ │ ├── 吸瓜.js │ │ ├── 朱古力.js │ │ └── 玩偶姐姐.js │ ├── origin │ │ ├── alist.js │ │ └── 原始JS.js │ └── tg │ │ ├── MXONE.jsd │ │ ├── 两个BT.jsd │ │ ├── 剧迷.jsd │ │ ├── 天空影视.jsd │ │ ├── 快云影院.jsd │ │ ├── 爱看电影.jsd │ │ ├── 特狗影视.jsd │ │ ├── 皮皮泡.jsd │ │ └── 胖虎影视.jsd ├── json │ ├── E8plus.json │ ├── alist.json │ ├── bili.json │ ├── live2mv_data.json │ ├── sniffer.json │ └── tang.json ├── libs.txt ├── lives │ ├── 18fm.txt │ ├── ad99.txt │ ├── bili.txt │ ├── douyu.txt │ ├── huya.txt │ ├── mv.txt │ ├── stv.txt │ ├── tvlive.txt │ ├── ytvb_ys.json │ ├── zb_drpy.m3u │ ├── zb_drpy.txt │ ├── 大杂烩.txt │ ├── 月光.txt │ ├── 苹果爱薇.txt │ └── 达人专用源.txt ├── muban │ ├── adb调试相关.bash │ ├── drpy模板.js │ ├── nodejs_urljoin.js │ ├── 原生js.js │ └── 海阔urljoin.png ├── pluto │ ├── drT.js │ ├── drpy.js │ ├── drpy_真不卡.js │ └── muban.js ├── py │ ├── py_ali.py │ ├── py_alist.py │ ├── py_bilibili.py │ ├── py_bilibili2.py │ ├── py_bilimd.py │ ├── py_bilimy.py │ ├── py_bilivd.py │ ├── py_biliys.py │ ├── py_bilizb.py │ ├── py_cokemv.py │ ├── py_czspp.py │ ├── py_douyu.py │ ├── py_genmov.py │ ├── py_gimytv.py │ ├── py_gitcafe.py │ ├── py_huya.py │ ├── py_jrskbs.py │ ├── py_kuaikan.py │ ├── py_kunyu77.py │ ├── py_pansou.py │ ├── py_voflix.py │ ├── py_xmaomi.py │ ├── py_yiso.py │ ├── py_yunso.py │ ├── py_zhaozy.py │ └── py_zxzj.py ├── supervisord.service ├── ts │ └── tools.ts └── update_old.py ├── utils ├── HtmlParser.cs ├── HtmlParser.java ├── cfg.py ├── common_api.py ├── config.py ├── download_progress.py ├── encode.py ├── env.py ├── error.py ├── files.py ├── htmlParseerOld.py ├── htmlParser.py ├── log.py ├── parser.py ├── pyctx.py ├── render.py ├── safePython.py ├── system.py ├── ua.py ├── update.py └── web.py ├── whl ├── gevent-21.12.0-cp37-cp37m-linux_armv7l.whl ├── gevent-21.12.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl └── quickjs-1.19.2-cp37-cp37m-linux_armv7l.whl └── zhengban ├── AcFun.py ├── DouYu.py ├── LICENSE ├── MGTV.py ├── README.md ├── bilibili.py ├── douyin.py ├── douyin_live.py ├── haokan.py ├── huya.py ├── iqiyi.py ├── js ├── cmd5x.js ├── getck.js ├── iqiyi.js ├── pptv.js ├── qqmusic.js ├── tx-ckey.wasm └── xigua.js ├── ke_qq.py ├── kuaishou.py ├── kugou.py ├── kuwoMusic.py ├── migu.py ├── music163.py ├── pptv.py ├── qqmusic.py ├── sohu.py ├── tencent.py ├── vqq.py ├── xigua.py └── youku.py /.gitignore: -------------------------------------------------------------------------------- 1 | /tmp/dr_py-main/ 2 | /tmp/dr_py.zip 3 | /logs/dr.log 4 | /static/js/.idea/ 5 | /.idea/ 6 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # 默认忽略的文件 2 | /shelf/ 3 | /workspace.xml 4 | # 基于编辑器的 HTTP 客户端请求 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /.idea/dr_py.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 13 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /404.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/404.jpg -------------------------------------------------------------------------------- /app.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #kill -9 $(cat supervisord.pid) # 杀掉进程 3 | msg='flask或0 ubuntu下自动识别gevent或普通启动flask\nsflask或1 ubuntu下gunicorn启动flask\ntermux或2 termux下自动识别gevent或普通启动flask\nstermux或3 termux下gunicorn启动flask\n' 4 | case "$1" in 5 | flask) 6 | supervisord -c ./super/flask.conf 7 | ;; 8 | 0) 9 | supervisord -c ./super/flask.conf 10 | ;; 11 | sflask) 12 | supervisord -c ./super/sflask.conf 13 | ;; 14 | 1) 15 | supervisord -c ./super/sflask.conf 16 | ;; 17 | termux) 18 | supervisord -c ./super/termux.conf 19 | ;; 20 | 2) 21 | supervisord -c ./super/termux.conf 22 | ;; 23 | stermux) 24 | supervisord -c ./super/stermux.conf 25 | ;; 26 | 3) 27 | supervisord -c ./super/stermux.conf 28 | ;; 29 | *) 30 | echo -e $msg 31 | ;; 32 | esac 33 | # 保留一个 bash 34 | /bin/bash -------------------------------------------------------------------------------- /base/R.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : R.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/6 6 | 7 | from flask import jsonify 8 | 9 | class copy_utils: 10 | 11 | @staticmethod 12 | def obj_to_dic(obj): 13 | ''' 14 | 将传入的data对象转成字典 15 | ''' 16 | result = {} 17 | for temp in obj.__dict__: 18 | if temp.startswith('_') or temp == 'metadata': 19 | continue 20 | result[temp] = getattr(obj, temp) 21 | return result 22 | 23 | @staticmethod 24 | def obj_to_list(list_obj): 25 | ''' 26 | 将传入的data对象转成List,list中的元素是字典 27 | ''' 28 | result = [] 29 | for obj in list_obj: 30 | result.append(copy_utils.obj_to_dic(obj)) 31 | return result 32 | 33 | 34 | class R(object): 35 | 36 | @classmethod 37 | def ok(self,msg='操作成功',data=None): 38 | if not data: 39 | data = [] 40 | result = {"code": 200, "msg": msg, "data": data,"count":len(data)} 41 | return jsonify(result) 42 | 43 | @classmethod 44 | def error(self,msg="系统异常",code=404): 45 | result = {"code": code, "msg": msg} 46 | return jsonify(result) 47 | 48 | @classmethod 49 | def success(self,msg='操作成功', data=None): 50 | return self.ok(msg,data) 51 | 52 | @classmethod 53 | def failed(self,msg="系统异常", code=404): 54 | return self.error(msg,code) -------------------------------------------------------------------------------- /base/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : __init__.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/6 6 | 7 | from . import database 8 | from . import config 9 | from . import R 10 | -------------------------------------------------------------------------------- /base/alist.conf: -------------------------------------------------------------------------------- 1 | # c=[];for(let i in a){c.push(i+','+a[i])}d=c.join('\n');console.log(d); 2 | 🙋丫仙女,http://alist.xiaoya.pro/ 3 | 🐋一只鱼,https://alist.youte.ml 4 | 🌊七米蓝,https://al.chirmyram.com 5 | 🌴非盘,http://www.feifwp.top 6 | 🥼帅盘,https://hi.shuaipeng.wang 7 | 🐉神族九帝,https://alist.shenzjd.com 8 | ☃姬路白雪,https://pan.jlbx.xyz 9 | 🎧听闻网盘,https://wangpan.sangxuesheng.com 10 | ✨星梦,https://pan.bashroot.top 11 | -------------------------------------------------------------------------------- /base/database.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : databse.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/6 6 | 7 | from flask_sqlalchemy import SQLAlchemy 8 | db = SQLAlchemy() -------------------------------------------------------------------------------- /base/rules.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/base/rules.db -------------------------------------------------------------------------------- /base/解析.conf: -------------------------------------------------------------------------------- 1 | # 这是用户自定义解析列表,不会被系统升级覆盖 2 | # 0123,对应,普通解析,json解析,并发多json解析,聚合解析,参数3不填默认0 3 | # flags是线路名称标识,会自动拦截并走以下的解析 4 | # 名称,链接,类型,ua (ua不填默认 Mozilla/5.0) 可以手动填 Dart/2.14 (dart:io) 5 | # 168,{{host}}/parse/api/168.js?url=,1 6 | 解析13,http://api.wpsseo.cn/?v=,0 7 | 解析14,https://go.yh0523.cn/y.cy?url=,0 8 | B站1,https://jx.bozrc.com:4433/player/?url=,0 9 | 爱豆,https://jx.aidouer.net/?url=,0 10 | H8,https://www.h8jx.com/jiexi.php?url=,0 11 | 解析,https://ckmov.ccyjjd.com/ckmov/?url=,0 12 | 思古3,https://jsap.attakids.com/?url=,0 13 | 云端1,https://js.52jx.top:2525/?url=,0 14 | 云端2,https://sb.5gseo.net/?url=,0 15 | m3u8tv高清,https://jx.m3u8.tv/jiexi/?url=,0 16 | 搬运,https://jx.bynote.top/API.php?url=,1 17 | 解析第一,http://27.124.4.42:4567/jhjson/ceshi.php?url=,0 18 | 纯净1,https://z1.m1907.cn/?jx=,0 19 | BL,https://vip.bljiex.com/?v=,0 20 | CK,https://www.ckplayer.vip/jiexi/?url=,0 21 | 解析,https://ckmov.ccyjjd.com/ckmov/?url=,0 22 | 解析la,https://api.jiexi.la/?url=,0 23 | 老板,https://vip.laobandq.com/jiexi.php?url=,0 24 | 诺讯,https://www.nxflv.com/?url=,0 25 | PM,https://www.playm3u8.cn/jiexi.php?url=,0 26 | 盘古,https://www.pangujiexi.cc/jiexi.php?url=,0 27 | 全民,https://jx.blbo.cc:4433/?url=,0 28 | 七哥,https://jx.mmkv.cn/tv.php?url=,0 29 | RDHK,https://jx.rdhk.net/?v=,0 30 | 云析,https://jx.yparse.com/index.php?url=,0 31 | 180,https://jx.000180.top/jx/?url=,0 32 | 七彩,https://www.xymav.com/?url=,0 33 | 夜幕,https://www.yemu.xyz/?url=,0 34 | 1717云,https://www.1717yun.com/jx/ty.php?url=,0 35 | 8090,https://www.8090g.cn/?url=,0 -------------------------------------------------------------------------------- /commands.txt: -------------------------------------------------------------------------------- 1 | . ./app.sh 2 | source ./app.sh 3 | . <(cat app.sh) 4 | # supervisord -c manager.conf 5 | flask db init 6 | flask db migrate 7 | flask db upgrade 8 | 9 | pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip 10 | pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple 11 | 12 | 可能会用到: 13 | ddddocr==1.1.0 ; sys_platform == 'win32' 14 | ddddocr==1.0.8 ; sys_platform != 'win32' 15 | 16 | 废弃操作仅限 flask-migrate==2.7.0: 17 | # # 导入数据迁移核心类 18 | # from flask_migrate import Migrate 19 | # from flask_script import Manager 20 | # manager = Manager(app) 21 | # 初始化数据迁移 22 | # migrate = Migrate(app, db) 23 | # manager.add_command('sql', MigrateCommand) 24 | # python app.py sql migrate -m “init” 25 | # python app.py sql upgrade -------------------------------------------------------------------------------- /controllers/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : __init__.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/6 6 | 7 | from . import home 8 | from . import admin 9 | from . import service 10 | from . import vod 11 | from . import cms 12 | from . import cls 13 | from . import classes 14 | from . import layui 15 | from . import parse 16 | from . import web -------------------------------------------------------------------------------- /controllers/classes.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : classes.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/6 6 | 7 | from base.database import db 8 | from utils.log import logger 9 | from models.ruleclass import RuleClass 10 | 11 | def getClasses(): 12 | if not db: 13 | msg = '未提供数据库连接' 14 | logger.info(msg) 15 | return [] 16 | res = db.session.query(RuleClass).all() 17 | return [rc.name for rc in res] 18 | 19 | def getClassInfo(cls): 20 | if not db: 21 | msg = f'未提供数据库连接,获取{cls}详情失败' 22 | logger.info(msg) 23 | return None 24 | logger.info(f'开始查询{cls}的分类详情') 25 | res = db.session.query(RuleClass).filter(RuleClass.name == cls).first() 26 | if res: 27 | logger.info(str(res)) 28 | return str(res) 29 | else: 30 | return f'数据库不存在{cls}的分类缓存' -------------------------------------------------------------------------------- /controllers/cls.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : CLS.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/6 6 | 7 | from flask import Blueprint 8 | from controllers.classes import getClasses,getClassInfo 9 | from base.R import R 10 | from utils.log import logger 11 | from base.database import db 12 | from models.ruleclass import RuleClass 13 | 14 | cls = Blueprint("cls", __name__) 15 | 16 | @cls.route('/get/') 17 | def getClassInfoApi(cls): 18 | info = getClassInfo(cls) 19 | return R.ok(info) 20 | 21 | @cls.route('/clear/') 22 | def clearClassApi(cls): 23 | logger.info(f'开始查询{cls}的分类详情') 24 | res = db.session.query(RuleClass).filter(RuleClass.name == cls) 25 | if res: 26 | res.delete() 27 | db.session.commit() 28 | return R.success(f'已清除{cls}的分类缓存') 29 | else: 30 | return R.failed(f'数据库不存在{cls}的分类缓存') -------------------------------------------------------------------------------- /doc/chatgpt搭建教程.md: -------------------------------------------------------------------------------- 1 | [chatgpt申请](http://mp.weixin.qq.com/s?__biz=MjM5MDI1ODUyMA==&mid=2672969192&idx=1&sn=04efcb04d4a5a8f493ef83fb9fa6bd1d&chksm=bce161df8b96e8c95e5ea89893b2d212c411a763d0644e5617a746e4fc829a4d154d5feba192&mpshare=1&scene=24&srcid=02050Gzonfq7o1MfMDZ5r3Az&sharer_sharetime=1675559603236&sharer_shareid=e78e6999b00e23bdc812d4fb7b55e462#rd) 2 | [钉钉对接chatgpt机器人](https://blog.csdn.net/zls365365/article/details/128567593) -------------------------------------------------------------------------------- /doc/js压缩.md: -------------------------------------------------------------------------------- 1 | ### 代码格式化压缩成一行教程 2 | ```text 3 | npm install uglify-js -g 4 | uglifyjs xx.js -o xx.min.js 5 | 6 | 配置webstorm 7 | C:\Users\dashen\AppData\Roaming\npm\uglifyjs.cmd 8 | $FileName$ -o $FileNameWithoutExtension$.min.js 9 | $FileDir$ 10 | ``` 11 | 12 | ### 格式化教程 13 | ```text 14 | vscode安装插件 prettier 15 | webstorm安装插件 prettier 16 | 在设置里找到prettier配置保存时执行 17 | 对js文件右键,最下面的使用prettier重新格式化 18 | ``` 19 | 20 | ### 自动函数参数注释教程 21 | ```text 22 | 在函数上方输入 /**然后回车即可 23 | 完结 24 | ``` -------------------------------------------------------------------------------- /doc/termux使用问题.md: -------------------------------------------------------------------------------- 1 | 步骤1: 安装Termux并赋予访问本地文件的权限 2 | 3 | 安装完Termux之后,我们要让Termux有访问本地SD存储卡的访问权限,可以在Termux的终端中输入: 4 | 5 | termux-setup-storage 6 | 7 | 当弹出询问是否允许访问本地存储的窗口时,我们需要点击同意即可。 8 | 9 | 步骤2:更新升级软件包 10 | 11 | 这个就无须多解释了,直接Termux终端: 12 | 13 | apt update && apt upgrade 14 | 15 | 步骤3: 安装Git软件 16 | 17 | pkg install git -y 18 | 19 | 步骤4: 安装Python2 20 | 21 | FakeRoot 的源代码python2 ,因而我们需要安装Python2。 22 | 23 | pkg install python2 -y 24 | 25 | 步骤5: 下载安装FakeRoot Repo 26 | 27 | git clone https://github.com/MaulanaRyM/FakeRoot 28 | 29 | cd FakeRoot 30 | 31 | python2 root.py 32 | 33 | 运行这几个命令后,FakeRoot 要求在FakeRoot和Proot两个选项中进行选择。我们仅需要选择FakeRoot这个模式并按回车确认,让它自动进行root处理。这个root过程稍微要费一些时间,请耐心等候。 34 | -------------------------------------------------------------------------------- /doc/windows搭建说明.md: -------------------------------------------------------------------------------- 1 | # Windows搭建说明 2 | ###### Termux qq官群1:714730084 3 | ###### Termux qq官群3:878847174 4 | ##### [加群链接生成器](https://qun.qq.com/join.html) 5 | ##### [git图标生成器](https://github.com/badges/shields) 6 | 7 | 8 | ## 方法一:docker安装(推荐) 9 | ### 先确认本地有docker 10 | 11 | ```shell 12 | docker version 13 | ``` 14 | 15 | 如输出类似 16 | ``` 17 | Client: 18 | Version: 20.10.23 19 | API version: 1.41 20 | Go version: go1.18.10 21 | Git commit: 7155243 22 | Built: Thu Jan 19 17:43:10 2023 23 | OS/Arch: windows/amd64 24 | Context: default 25 | Experimental: true 26 | ``` 27 | 则说明本地有docker 28 | 29 | 如果没有这样的提示则说明本地没有docker,可以参考[这篇文章](https://www.runoob.com/docker/windows-docker-install.html) 30 | 31 | 接下来安装容器,输入以下指令即可安装 32 | ```shell 33 | docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy 34 | ``` 35 | 36 | 没有错误提示的话就可以在**这台电脑打开**[链接](http://localhost:5705/index) 37 | 38 | 若能打开即搭建成功 39 | 40 | ## 方法二:使用python运行 41 | ```shell 42 | #先将项目克隆到本地 43 | git clone https://github.com/hjdhnx/dr_py.git 44 | 45 | #进入目录 46 | cd dr_py 47 | 48 | #换源 49 | pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple 50 | 51 | #安装所需依赖 52 | pip install -r requirements.txt 53 | 54 | #运行主程序 55 | python app.py 56 | ``` 57 | 58 | 若报错,请检查是否有python环境`python --version`,入如果没有,请到[淘宝python镜像站下载 python-3.8.8-amd64.exe](https://registry.npmmirror.com/binary.html?path=python/3.8.8/) 59 | 60 | 同样,没有错误提示的话就可以在**这台电脑打开**[链接](http://localhost:5705/index) 61 | 62 | --- 63 | 如果有问题,请提出[issue](https://github.com/hjdhnx/dr_py/issues) -------------------------------------------------------------------------------- /doc/其他好玩的项目.md: -------------------------------------------------------------------------------- 1 | ##### alist挂载七牛云 2 | [b站教程](https://www.bilibili.com/video/av256523775/) 3 | 4 | #### 更新alist 5 | 6 | ```shell 7 | docker ps -a #查看容器(找Alist容器的ID) 8 | 9 | docker stop ID #停止Alist运行,不然无法删除(这次Alist容器的ID是d429749a6e69,每一次安装都不一样自己看) 10 | 11 | docker rm ID #删除Alist容器(数据还在只要你不手动删除) 12 | 13 | docker pull xhofe/alist:latest 14 | 15 | docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest 16 | 17 | ``` 18 | 19 | ### 查看alist管理员信息 20 | ```shell 21 | docker exec -it alist ./alist admin 22 | 23 | ``` -------------------------------------------------------------------------------- /docker/amd64_dockerfile.txt: -------------------------------------------------------------------------------- 1 | # 基于的基础镜像-在dockerhub找 2 | FROM hjdhnx/drpy:amd64 3 | # 添加描述信息 4 | MAINTAINER python3.7+drpy+supervisord updated by "hjdhnx" 5 | # 设置app文件夹是工作目录 6 | WORKDIR /root/sd/pywork/dr_py 7 | RUN rm -rf /root/sd/pywork/dr_py && mkdir -p /root/sd/pywork/dr_py 8 | # 复制文件及目录过去 9 | COPY . /root/sd/pywork/dr_py 10 | 11 | # 装依赖 12 | # RUN pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip \ 13 | # && pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple 14 | 15 | # 执行指令,安装依赖 16 | RUN pip install -r requirements.txt 17 | 18 | # 设置语言支持中文打印 19 | # ENV LANG C.UTF-8 20 | # ENV LC_ALL C.UTF-8 21 | # cd /ect/docker vi daemon.json 22 | # "https://6kx4zyno.mirror.aliyuncs.com" 23 | # vi /etc/resolv.conf 加了两行也不行?? 24 | # systemctl daemon-reload 25 | # systemctl restart docker 26 | # docker build -f amd64_dockerfile.txt -t hjdhnx/drpy:amd64-v3.9.0 . 27 | # docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0 28 | # docker push hjdhnx/drpy:amd64-v3.9.0 29 | # docker cp . drpy:/root/sd/pywork/ 30 | # CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash 31 | ENTRYPOINT ["/etc/autostart/app.sh","flask"] -------------------------------------------------------------------------------- /docker/arm64_dockerfile.txt: -------------------------------------------------------------------------------- 1 | # 基于的基础镜像-在dockerhub找 2 | FROM hjdhnx/drpy:arm64 3 | # 添加描述信息 4 | MAINTAINER python3.7+drpy+supervisord updated by "hjdhnx" 5 | # RUN rm -rf /root/sd/pywork/dr_py && mkdir -p /root/sd/pywork/dr_py 6 | # 设置app文件夹是工作目录 7 | WORKDIR /root/sd/pywork/dr_py 8 | # 复制文件及目录过去 9 | COPY . /root/sd/pywork/dr_py 10 | 11 | # 执行指令,安装依赖 12 | RUN pip install -r requirements.txt 13 | 14 | # 设置语言支持中文打印 15 | # ENV LANG C.UTF-8 16 | # ENV LC_ALL C.UTF-8 17 | # docker buildx build --platform linux/arm64 -f arm64_dockerfile.txt -t hjdhnx/drpy:arm64-v3.9.0 --push . 18 | # docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:arm64-v3.9.0 19 | # docker push hjdhnx/drpy:arm64-v3.9.0 20 | # CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash 21 | ENTRYPOINT ["/etc/autostart/app.sh","flask"] -------------------------------------------------------------------------------- /docker/armv7_dockerfile.txt: -------------------------------------------------------------------------------- 1 | # 基于的基础镜像-在dockerhub找 2 | FROM hjdhnx/drpy:armv7 3 | # 添加描述信息 4 | MAINTAINER python3.7+drpy+supervisord updated by "hjdhnx" 5 | # 设置app文件夹是工作目录 6 | WORKDIR /root/sd/pywork/dr_py 7 | # RUN rm -rf /root/sd/pywork/dr_py && mkdir -p /root/sd/pywork/dr_py 8 | # 复制文件及目录过去 9 | COPY . /root/sd/pywork/dr_py 10 | 11 | # 执行指令,安装依赖 12 | RUN pip3 install -r requirements.txt && pip3 uninstall quickjs && pip3 install ./whl/quickjs-1.19.2-cp37-cp37m-linux_armv7l.whl 13 | 14 | # 设置语言支持中文打印 15 | # ENV LANG C.UTF-8 16 | # ENV LC_ALL C.UTF-8 17 | # docker buildx build --platform linux/arm/v7 -f armv7_dockerfile.txt -t hjdhnx/drpy:armv7-v3.9.0 --push . 18 | # docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:armv7-v3.9.0 19 | # docker push hjdhnx/drpy:armv7-v3.9.0 20 | # CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash 21 | ENTRYPOINT ["/etc/autostart/app.sh","flask"] -------------------------------------------------------------------------------- /docker/merge.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #kill -9 $(cat supervisord.pid) # 杀掉进程 3 | docker manifest rm hjdhnx/drpy 4 | docker manifest create hjdhnx/drpy hjdhnx/drpy:amd64-v3.9.0 hjdhnx/drpy:arm64-v3.9.0 hjdhnx/drpy:armv7-v3.9.0 5 | docker manifest annotate hjdhnx/drpy hjdhnx/drpy:amd64-v3.9.0 --os linux --arch amd64 6 | docker manifest annotate hjdhnx/drpy hjdhnx/drpy:arm64-v3.9.0 --os linux --arch arm64/v8 7 | docker manifest annotate hjdhnx/drpy hjdhnx/drpy:armv7-v3.9.0 --os linux --arch arm/v7 8 | docker manifest push hjdhnx/drpy 9 | # 保留一个 bash 10 | #/bin/bash -------------------------------------------------------------------------------- /images/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/images/1.jpg -------------------------------------------------------------------------------- /images/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/images/2.jpg -------------------------------------------------------------------------------- /images/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/images/3.jpg -------------------------------------------------------------------------------- /images/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/images/4.jpg -------------------------------------------------------------------------------- /images/odoo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/images/odoo.jpg -------------------------------------------------------------------------------- /images/zb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/images/zb.jpg -------------------------------------------------------------------------------- /images/城市长凳.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/images/城市长凳.jpg -------------------------------------------------------------------------------- /images/绿林.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/images/绿林.jpg -------------------------------------------------------------------------------- /images/高铁.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/images/高铁.jpg -------------------------------------------------------------------------------- /jiexi/168.jsd: -------------------------------------------------------------------------------- 1 | let jxUrl = 'http://168.qxzm.cc/user/owe.php?app=10000&account=hjdhnx&password=hjdhnx&url='; 2 | fetch_params.headers.Referer = jxUrl; 3 | try { 4 | // realUrl = null; 5 | let html = request(jxUrl+vipUrl); 6 | log(html); 7 | realUrl = jsp.pjfh(html,'$..url'); 8 | log('解析到真实播放地址:'+realUrl); 9 | }catch (e) { 10 | log('解析发生错误:'+e.message); 11 | realUrl = vipUrl; 12 | } -------------------------------------------------------------------------------- /jiexi/dyg.js: -------------------------------------------------------------------------------- 1 | var flag = []; 2 | function lazy(){ 3 | let jxUrl = 'https://vip.lianfaka.com/vip/?url='; 4 | fetch_params.headers.Referer = 'https://www.dy6g.com'; 5 | // fetch_params.headers['User-Agent'] = 'Mozilla/5.0 (Linux; Android 6.0.1; OPPO R9s Plus Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36'; 6 | fetch_params.headers['User-Agent'] = MOBILE_UA; 7 | try { 8 | let html = request(jxUrl+input); 9 | log(html); 10 | realUrl=html.match(/source src="(.*?)"/)[1]; 11 | log('解析到真实播放地址:'+realUrl); 12 | }catch (e) { 13 | log('解析发生错误:'+e.message); 14 | realUrl = input; 15 | } 16 | 17 | return realUrl 18 | } -------------------------------------------------------------------------------- /jiexi/vip.js: -------------------------------------------------------------------------------- 1 | var flag = []; 2 | function lazy() { 3 | let jxUrl = 'https://80k.tv/jxplayer.php?v='; 4 | fetch_params.headers.Referer = 'https://1080p.tv'; 5 | fetch_params.headers['User-Agent'] = MOBILE_UA; 6 | try { 7 | let html = request(jxUrl + input); 8 | log(html); 9 | realUrl = html.match(/src="(h.*?)"/)[1]; 10 | log('解析到真实播放地址:' + realUrl); 11 | } catch (e) { 12 | log('解析发生错误:' + e.message); 13 | realUrl = input; 14 | } 15 | return realUrl 16 | } -------------------------------------------------------------------------------- /jiexi/vip.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jiexi/万能.js: -------------------------------------------------------------------------------- 1 | var flag = []; 2 | function lazy() { 3 | let jxUrl = 'https://json.legendwhb.cn/llq/?url='; 4 | fetch_params.headers.Referer = jxUrl; 5 | try { 6 | let html = request(jxUrl + input); 7 | eval(html.match(/var config = {[\s\S]*?}/)[0] + ""); 8 | let play = request("https://json.legendwhb.cn/llq/API.php", { 9 | headers: { 10 | "User-Agent": MOBILE_UA, 11 | "X-Requested-With": "XMLHttpRequest", 12 | "origin": "https://json.legendwhb.cn" 13 | }, body: "url=" + config.url + "&time=" + config.time + "&key=" + config.key, method: "POST" 14 | }); 15 | realUrl = JSON.parse(play).url; 16 | log('解析到真实播放地址:' + realUrl); 17 | } catch (e) { 18 | log('解析发生错误:' + e.message); 19 | realUrl = input; 20 | } 21 | return realUrl 22 | } -------------------------------------------------------------------------------- /jiexi/刚刚.js: -------------------------------------------------------------------------------- 1 | var flag = []; 2 | function lazy() { 3 | realUrl = 重定向('https://play.fuqizhishi.com/jx2/API.php?appkey=iiiixiaobai&url=' + input); 4 | return realUrl 5 | } -------------------------------------------------------------------------------- /jiexi/图片.jsi: -------------------------------------------------------------------------------- 1 | let url_tmp = vipUrl.split('@'); 2 | let url = url_tmp[0]; 3 | let headers = {}; 4 | url_tmp.slice(1).forEach(function (it){ 5 | headers[it.split('=')[0]] = it.split('=')[1]; 6 | }); 7 | let html = request(vipUrl,{headers:headers}); 8 | print(html.length); 9 | try { 10 | realUrl = image(html); 11 | }catch (e) { 12 | print('发生了错误:'+e); 13 | } -------------------------------------------------------------------------------- /jiexi/多多.jsd: -------------------------------------------------------------------------------- 1 | let jxUrl = 'https://api.10static.com/?from=duoduozy&url='; 2 | fetch_params.headers.Referer = 'https://www.1010dy3.com'; 3 | fetch_params.headers['User-Agent'] = PC_UA; 4 | try { 5 | let html = request(jxUrl+vipUrl); 6 | // log(html); 7 | let url = html.match(/var urls = "(.*?)"/)[1]; 8 | let key = 'Of84ff0clf252cba'; 9 | let iv = 'c487ebl2e38aOfaO'; 10 | try { 11 | eval(getCryptoJS()); 12 | var getVideoInfo = function (text,key,iv) { 13 | return CryptoJS.AES.decrypt(text, key, {iv: iv, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8); 14 | }; 15 | realUrl = getVideoInfo(url,key,iv); 16 | }catch (e) { 17 | log('发生了错误:'+e.message); 18 | realUrl = vipUrl; 19 | } 20 | log('解析到真实播放地址:'+realUrl); 21 | }catch (e) { 22 | log('解析发生错误:'+e.message); 23 | realUrl = vipUrl; 24 | } -------------------------------------------------------------------------------- /jiexi/完美看看.jsd: -------------------------------------------------------------------------------- 1 | let jxUrl = 'https://www.wanmeikk.film/addons/dplayer/GetData.php?url='; 2 | fetch_params.headers.Referer = jxUrl; 3 | try { 4 | // realUrl = null; 5 | let html = request(jxUrl+vipUrl); 6 | //log(html); 7 | //realUrl = jsp.pjfh(html,'$..url'); 8 | realUrl=html.match(/var urls = "(.*?)"/)[1]; 9 | log('解析到真实播放地址:'+realUrl); 10 | }catch (e) { 11 | log('解析发生错误:'+e.message); 12 | realUrl = vipUrl; 13 | } -------------------------------------------------------------------------------- /jiexi/插萝莉慢.js: -------------------------------------------------------------------------------- 1 | var flag = []; 2 | function lazy() { 3 | let jxUrl = 'http://chaloli.cn/home/api?type=ys&uid=1&key=ekloswzABCGHKLOT58&url='; 4 | fetch_params.headers.Referer = jxUrl; 5 | try { 6 | // realUrl = null; 7 | let html = request(jxUrl + input); 8 | // log(html); 9 | realUrl = jsp.pjfh(html, '$..url'); 10 | log('解析到真实播放地址:' + realUrl); 11 | } catch (e) { 12 | log('解析发生错误:' + e.message); 13 | realUrl = input; 14 | } 15 | return realUrl 16 | } -------------------------------------------------------------------------------- /jiexi/无名.js: -------------------------------------------------------------------------------- 1 | // let jxUrl = 'http://api.ckflv.cn/?url='; 2 | var flag = []; 3 | function lazy() { 4 | log(env); 5 | let jxUrl = 'https://k.json.icu/home/api?type=ys&uid=12406929&key=adgouwyCGIRSTUV046&url='; 6 | fetch_params.headers.Referer = jxUrl; 7 | try { 8 | // realUrl = null; 9 | let html = request(jxUrl + input); 10 | log(html); 11 | realUrl = jsp.pjfh(html, '$..url'); 12 | log('解析到真实播放地址:' + realUrl); 13 | } catch (e) { 14 | log('解析发生错误:' + e.message); 15 | realUrl = input; 16 | } 17 | return realUrl 18 | } -------------------------------------------------------------------------------- /jiexi/江湖.js: -------------------------------------------------------------------------------- 1 | var flag = []; 2 | function lazy() { 3 | let jxUrl = 'http://45.248.10.163:4433/json.php?wap=0&url='; 4 | fetch_params.headers.Referer = jxUrl; 5 | try { 6 | // realUrl = null; 7 | let html = request(jxUrl + input); 8 | // log(html); 9 | realUrl = jsp.pjfh(html, '$..url'); 10 | log('解析到真实播放地址:' + realUrl); 11 | } catch (e) { 12 | log('解析发生错误:' + e.message); 13 | realUrl = input; 14 | } 15 | return realUrl 16 | 17 | } -------------------------------------------------------------------------------- /jiexi/江湖加密.js: -------------------------------------------------------------------------------- 1 | var flag = []; 2 | function lazy() { 3 | let PWD = 'drpy'; 4 | // log(params); 5 | if (!params.passwd) { 6 | realUrl = input 7 | } else if (params.passwd !== PWD) { 8 | realUrl = toast(input + ' 解析失败。解析密码错误'); 9 | } else { 10 | realUrl = 重定向('http://211.99.99.236:4567/jhjson/ceshi.php?url=' + input) 11 | } 12 | return realUrl 13 | } -------------------------------------------------------------------------------- /jiexi/酷云.js: -------------------------------------------------------------------------------- 1 | var flag = []; 2 | function lazy() { 3 | let jxUrl = 'http://api.kunyu77.com/api.php/provide/parserUrl?url='; 4 | var t = Math.floor(new Date().getTime() / 1000).toString(); 5 | let jxExt = "&retryNum=0&pcode=010110002&version=2.1&devid=f9c9ce5bb5827a266829383718e6131a&package=com.sevenVideo.app.android&sys=android&sysver=12&brand=Xiaomi&model=Mi_10_Pro&sj=" + t; 6 | let url = jxUrl + input + jxExt; 7 | let TK = "/api.php/provide/parserUrl" + "Xiaomif9c9ce5bb5827a266829383718e6131aMi_10_Procom.sevenVideo.app.android010110002" + 0 + t + "android12" + encodeURIComponent(input) + "2.1" + t + "XSpeUFjJ"; 8 | fetch_params.headers.Referer = jxUrl; 9 | // fetch_params.headers['User-Agent'] = "Dalvik/2.1.0"; 10 | fetch_params.headers['User-Agent'] = "okhttp/3.12.0"; 11 | fetch_params.headers['TK'] = md5(TK); 12 | try { 13 | // realUrl = null; 14 | let html = request(url); 15 | log(html); 16 | realUrl = jsp.pjfh(html, '$..url'); 17 | realUrl = 重定向(realUrl); 18 | log('解析到真实播放地址:' + realUrl); 19 | } catch (e) { 20 | log('解析发生错误:' + e.message); 21 | realUrl = input; 22 | } 23 | return realUrl 24 | } -------------------------------------------------------------------------------- /jiexi/飞跃.js: -------------------------------------------------------------------------------- 1 | // realUrl = 重定向('http://ivips.ml/jx/json.php/?url='+input) 2 | 3 | var flag = []; 4 | function lazy() { 5 | realUrl = 重定向('http://103.40.240.46/jh/?url=' + input); 6 | return realUrl 7 | } -------------------------------------------------------------------------------- /js/18哈.js: -------------------------------------------------------------------------------- 1 | muban.短视2.二级.img = '.lazy&&data-src'; 2 | muban.短视2.二级.tab_text = 'body--i--span&&Text'; 3 | var rule={ 4 | title:'18哈', 5 | 模板:'短视2', 6 | host:'https://sk100.tv', 7 | detailUrl:'/voddetail/fyid.html', 8 | class_name:'电影&电视剧&综艺&动漫&爽文短剧', 9 | class_url:'1&2&4&3&33', 10 | lazy:`js: 11 | var html = JSON.parse(request(input).match(/r player_.*?=(.*?){d.push({title:pdfh(it,".b-lazy&&alt"),pic_url:pd(it,".b-lazy&&data-src"),url:pd(it,"a&&href"),})});setResult(d);', 19 | // 一级:'.article&&.post;.b-lazy&&alt;.b-lazy&&data-src;.post-text&&Text;a&&href', 20 | 一级:'js:var d=[];pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;var html=request(input);let list=pdfa(html,".article&&.post");list.forEach((it)=>{d.push({title:pdfh(it,".b-lazy&&alt"),desc:"🔥"+pdfh(it,"span:eq(2)&&Text").replace(" views",""),pic_url:pd(it,".b-lazy&&data-src"),url:pd(it,"a&&href"),})});setResult(d);', 21 | 二级:'*', 22 | 搜索:'.list-search&&p;a&&Text;;body--a&&Text;a&&href', 23 | } -------------------------------------------------------------------------------- /js/NyaFun.js: -------------------------------------------------------------------------------- 1 | muban.短视2.二级.img = '.detail-pic&&img&&data-src'; 2 | var rule = { 3 | title: 'NyaFun', 4 | 模板:'短视2', 5 | host: 'https://www.nyafun.net', 6 | homeUrl:'/map.html', 7 | url: '/index.php/api/vod#type=fyclass&page=fypage', 8 | class_name:'番剧&剧场', 9 | class_url:'2&1', 10 | detailUrl:'/bangumi/fyid.html', 11 | 推荐:'.border-box .public-list-box;a&&title;.lazy&&data-src;.public-list-prb&&Text;a&&href', 12 | double: false, // 推荐内容是否双层定位 13 | } -------------------------------------------------------------------------------- /js/UrleBird[飞].js: -------------------------------------------------------------------------------- 1 | /** 2 | * 20240201 测试OK 3 | */ 4 | 5 | var rule = { 6 | title:'UrleBird[飞]', 7 | host:'https://urlebird.com', 8 | homeUrl:'/trending/', 9 | url:'fyclass/page/fypage/[fyclass/]', 10 | searchUrl:'/search/?q=**',//Search @user or #hash 11 | searchable:2, 12 | quickSearch:0, 13 | class_name:'更新&人气&热搜', 14 | class_url:'videos&videos/popular&trending', 15 | headers:{ 16 | 'User-Agent':'PC_UA' 17 | }, 18 | play_parse:true, 19 | lazy:'js:let html=request(input);let rurl=html.match(/video src="(.*?)"/)[1];input={parse:0,url:rurl};', 20 | limit:10, 21 | 推荐:'*', 22 | 一级:"js:var d=[];pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;var list=pdfa(request(input),'body&&.thumb');list.forEach(function(it){let img=pd(it,'.img img&&data-src');if(!/jpg|jpeg|webp/.test(img)){img=pd(it,'.img img&&src')};d.push({desc:pdfh(it,'.author-name&&Text'),title:'♥'+pdfh(it,'.stats div:eq(2)&&Text')+' '+pdfh(it,'.info3--div&&Text'),pic_url:img,url:pd(it,'a:eq(-1)&&href')})});setResult(d);", 23 | 二级:'*', 24 | 搜索:'*', 25 | } 26 | -------------------------------------------------------------------------------- /js/alist.conf: -------------------------------------------------------------------------------- 1 | # c=[];for(let i in a){c.push(i+','+a[i])}d=c.join('\n');console.log(d); 2 | 🙋丫仙女,http://alist.xiaoya.pro/ 3 | 🐋一只鱼,https://alist.youte.ml 4 | 🌊七米蓝,https://al.chirmyram.com 5 | 🌴非盘,http://www.feifwp.top 6 | 🥼帅盘,https://hi.shuaipeng.wang 7 | 🐉神族九帝,https://alist.shenzjd.com 8 | ☃姬路白雪,https://pan.jlbx.xyz 9 | 🎧听闻网盘,https://wangpan.sangxuesheng.com 10 | ✨星梦,https://pan.bashroot.top 11 | -------------------------------------------------------------------------------- /js/drpy.txt: -------------------------------------------------------------------------------- 1 | {"showTime":89200000,"txt":"drpy 3.9.45beta1 -道长"} -------------------------------------------------------------------------------- /js/version.txt: -------------------------------------------------------------------------------- 1 | 3.9.49beta40 -------------------------------------------------------------------------------- /js/vidhub.jsd: -------------------------------------------------------------------------------- 1 | muban.mxone5.二级.desc = ';;.video-info-items:eq(2);.video-info-items:eq(1);.video-info-items:eq(0)'; 2 | var rule = Object.assign(muban.mxone5,{ 3 | title:'Vid影视', 4 | host:'https://vidhub.cc', 5 | url:'/vodshow/fyclass--------fypage---.html', 6 | searchUrl:'/vodsearch/**----------fypage---.html', 7 | cate_exclude:'网址+', 8 | tab_exclude:'主选一', 9 | }); 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /js/中国人线上看.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title: '中国人线上看', 3 | host: 'https://chinaqtv.co', 4 | url: '/vodtype/fyclass.html', 5 | //https://chinaqtv.co/vodsearch/.html?wd=4 6 | searchUrl: '/vodsearch/.html?wd=**', 7 | searchable: 2,//是否启用全局搜索, 8 | quickSearch: 0,//是否启用快速搜索, 9 | filterable: 0,//是否启用分类筛选, 10 | headers: { 'User-Agent': 'MOBILE_UA' }, 11 | class_parse: '.menu-list&&li:gt(0);a&&Text;a&&href;/(\\d+).html', 12 | play_parse: true, 13 | pagecount: {"13":1,"14":1,"15":1,"20":1,"21":1,"22":1,"3":1}, 14 | lazy: '', 15 | limit: 6, 16 | 推荐: 'body&&.content;div.drama;*;*;*;*', 17 | double: true, 18 | 一级: '.content&&div.drama;.title&&Text;.imgcover&&style;p&&Text;a&&href', 19 | 二级: { 20 | "title": ".title&&Text", 21 | "content": "pre&&Text", 22 | "tabs": "div.title:contains(片源)", 23 | "tab_text": "body&&Text", 24 | "lists": "div.episode.sizing&&ul:eq(#id) li" 25 | }, 26 | } -------------------------------------------------------------------------------- /js/兔小贝.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'兔小贝', 3 | host:'https://www.tuxiaobei.com', 4 | homeUrl:'', 5 | url:'/list/mip-data?typeId=fyclass&page=fypage&callback=', 6 | detailUrl:'/play/fyid', 7 | searchUrl:'/search/index?key=**', 8 | searchable:2, 9 | headers:{ 10 | 'User-Agent':'MOBILE_UA' 11 | }, 12 | timeout:5000, 13 | class_url:'2&3&4&25', 14 | class_name:'儿歌&故事&国学&启蒙', 15 | //class_name:'#page-viewport&&ul&&li;.text&&Text;a&&href;/(.*)', 16 | cate_exclude:'应用', 17 | 推荐:'.pic-list.list-box;.items;.text&&Text;mip-img&&src;.all&&Text;a&&href', 18 | double:true, 19 | limit:5, 20 | play_parse:true, 21 | lazy:'js:fetch_params.headers["user-agent"] = IOS_UA;let html=fetch(input,fetch_params);let src = jsp.pdfh(html,"body&&#videoWrap&&video-src");input=src;', 22 | // 一级:'json:data.items;name;image;collect_num;category_id+video_id', 23 | 一级:'json:data.items;name;image;duration_string;video_id', 24 | 二级:'*', 25 | 搜索:'.list-con&&.items;.text&&Text;mip-img&&src;.time&&Text;a&&href', 26 | } -------------------------------------------------------------------------------- /js/六月听书.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title: '六月听书', 3 | host: 'http://m.6yueting.com', 4 | url: '/ys/fyclass/o2/pfypage', 5 | searchUrl: '/search/index/search?content=**&type=1&pageNum=fypage&pageSize=40', 6 | searchable: 2, 7 | quickSearch: 0, 8 | filterable:0,//是否启用分类筛选, 9 | headers:{'User-Agent':'MOBILE_UA'}, 10 | class_name:'全部分类&玄幻奇幻&修真武侠&恐怖灵异&古今言情&都市言情&穿越重生&粤语古仔&网游小说&通俗文学&历史纪实&军事&悬疑推理&ebc5系列&官场商战&儿童读物&广播剧&外文原版&评书大全&相声小品&百家讲坛&健康养生&教材&期刊头条&戏曲&脱口秀', 11 | class_url:'t0&t1&t2&t3&t4&t28&t5&t6&t7&t11&t12&t13&t14&t18&t15&t16&t17&t22&t8&t9&t10&t20&t21&t23&t24&t27', 12 | play_parse:true, 13 | lazy:'', 14 | limit:6, 15 | 图片来源:'@Referer=http://m.6yueting.com/@User-Agent=MOBILE_UA', 16 | 推荐:'*', 17 | 一级: '.list-wrapper&&.item-link;h2--span&&Text;img&&src;.status&&Text;a&&href', 18 | 二级:{ 19 | "title":".book-title&&Text;.text:eq(0)&&Text", 20 | "img":".img&&src", 21 | "desc":".text:eq(3)&&Text;;;.text:eq(1)&&Text;.text:eq(2)&&Text", 22 | "content":".book-intro&&Text", 23 | "tabs":".operate-bar&&.total-num", 24 | "lists":".book-list:eq(#id)&&.list-item" 25 | }, 26 | 搜索:'js:let d=[];let MY_HOME="http://m.6yueting.com";let html=request(input);html=JSON.parse(html);let list=html.data.content;list.forEach(function(it){d.push({title:it.name.replace(/<.*?>/g,""),img:"http://img.6yueting.com:20001/"+it.coverUrlLocal,url:MY_HOME+"/list/"+it.code,desc:it.cdate,content:it.descXx.replace(/ /g,"")})});setResult(d);', 27 | } -------------------------------------------------------------------------------- /js/听书网.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'听书网', 3 | host:'https://www.tingbook.cc', 4 | // url:'/book/fyclass_fypage.html', 5 | url:'/book/fyclass-fypage.html', 6 | searchUrl:'/search.php?page=fypage&searchword=**&searchtype=-1', 7 | searchable:2, 8 | quickSearch:0, 9 | headers:{ 10 | 'User-Agent':'MOBILE_UA' 11 | }, 12 | timeout:5000, 13 | class_parse:'.nav li;a&&Text;a&&href;/book/(\\d+).html', 14 | play_parse:true, 15 | lazy:'js:let purl=request(input).match(/r now=\"(.*?)\"/)[1];log("=================================>"+purl);input={jx:0,url:purl,parse:0}', 16 | limit:6, 17 | double:true, 18 | 推荐:'.row2;ul&&li;.f-bold&&Text;.img-box img&&src;.f-gray&&Text;a&&href', 19 | 一级:'.row3&&li;.f-bold&&Text;.img-box img&&src;.f-gray&&Text;a&&href', 20 | 二级:{ 21 | "title":"h2&&Text", 22 | "img":".img-box img&&src", 23 | "desc":"section&&p:eq(1)&&Text", 24 | "content":"section&&p:eq(2)&&Text", 25 | "tabs":"#yuedu&&h2", 26 | "lists":"#yuedu:eq(#id)&&ul&&li" 27 | }, 28 | 搜索:'*', 29 | } -------------------------------------------------------------------------------- /js/啦啦DJ.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'啦啦DJ', 3 | host:'http://www.laladj.com', 4 | // url: '/dance/id-fyclass-fypage.html', 5 | url: '/fyclass-0-0-fypage', 6 | searchUrl: '/search?search=**&page=fypage', 7 | searchable:2, 8 | quickSearch:0, 9 | headers:{ 10 | 'User-Agent': 'PC_UA' 11 | }, 12 | timeout:5000,//网站的全局请求超时,默认是3000毫秒 13 | class_parse:'.navbar&&.xcls0;a&&Text;a&&href;com/(.*)', 14 | play_parse:true, 15 | lazy:'js:input=input.replace("www","m")', 16 | limit:6, 17 | 推荐: '.center_fl&&.recommended-list;li;img&&alt;img&&src;.index-music-hit--b&&Text;a&&href', 18 | double: true, // 推荐内容是否双层定位 19 | 一级:'.list_musiclist&&.sbg;.t1&&Text;img&&src;.sc_2:eq(0)&&Text;a&&href', 20 | 二级: "*", 21 | 搜索: "*", 22 | } -------------------------------------------------------------------------------- /js/小品网.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'小品网', 3 | host:'http://www.xiaopin.tv', 4 | url:'/?cate=fyclass&page=fypage', 5 | searchUrl:'/search.php?q=**', 6 | searchable:2, 7 | quickSearch:0, 8 | filterable:0, 9 | headers:{ 10 | 'User-Agent':'MOBILE_UA' 11 | }, 12 | timeout:5000, 13 | class_name:'小品&相声&二人转&春晚小品', 14 | class_url:'2&1&3&14', 15 | play_parse:true, 16 | lazy:'', 17 | limit:6, 18 | double:true, 19 | 推荐:'.itemlist;ul&&li;.itemname&&a&&Text;.itemimg img&&src;*;*', 20 | 一级:'.catecon&&ul&&li;.catename&&a&&Text;img&&src;.icoplay&&Text;a&&href', 21 | 二级:'*', 22 | 搜索:'*', 23 | } -------------------------------------------------------------------------------- /js/小强迷.jsd: -------------------------------------------------------------------------------- 1 | muban.首图2.二级.content = '.stui-content__desc&&Text'; 2 | muban.首图2.二级.title = '.stui-content__detail&&h3&&Text;.stui-content__detail&&p:eq(1)&&Text;'; 3 | muban.首图2.二级.重定向='js:let url = jsp.pd(html,".playbtn&&a&&href");log("重定向到:"+url);html = request(url)'; 4 | muban.首图2.二级.tabs='.t-ul&&li'; 5 | muban.首图2.二级.lists='.stui-content__playlist:eq(#id)&&li'; 6 | 7 | var rule = Object.assign(muban.首图2,{ 8 | title:'小强迷', 9 | host:'http://xqmi.top', 10 | url:'/index.php/vod/show/id/fyclass/page/fypage.html', 11 | searchUrl:'/index.php/vod/search/page/fypage/wd/**.html', 12 | }); -------------------------------------------------------------------------------- /js/开眼视频.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'开眼视频', 3 | host:'http://baobab.kaiyanapp.com:80', 4 | url:'/api/v5/index/tab/feed?udid=ecab2cc100f540e482c5f7db5542a33cc5a908bc&vc=591&vn=6.2.1&size=1080X2340&deviceModel=HLK-AL00&first_channel=eyepetizer_zhihuiyun_market&last_channel=eyepetizer_zhihuiyun_market&system_version_code=29', 5 | searchUrl:'', 6 | searchable:0, 7 | quickSearch:0, 8 | filterable:0, 9 | headers:{ 10 | 'User-Agent':'MOBILE_UA' 11 | }, 12 | class_name:'今日开眼精选',//静态分类名称拼接 13 | class_url:'/',//静态分类标识拼接 14 | timeout:5000, 15 | play_parse:true, 16 | pagecount:{"/":1}, 17 | lazy:"js:input=JSON.parse(request(input)).playUrl+'&_t=.m3u8'", 18 | limit:6, 19 | 推荐:'', 20 | 一级:"js:var s=request(input);var json={};eval('json='+s);var next=json.nextPageUrl;var s2=fetch(next,{});var j2={};eval('j2='+s2);for(var i=0;i{d.push({title:pdfh(it,".name&&Text"),desc:"🎤"+pdfh(it,".singer&&Text")+"|"+pdfh(it,".time&&Text"),pic_url:pd(it,"img&&src"),url:pd(it,"a&&href"),})});setResult(d);', 23 | 二级:'*', 24 | 搜索:'.video_list&&li;a&&title;;.singer&&Text;a&&href;.t_03:eq(1)&&Text', 25 | } -------------------------------------------------------------------------------- /js/酷狗MV.jsd: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'酷狗MV', 3 | host:'https://www.kugou.com', 4 | homeUrl:'/mvweb/html/', 5 | url:'/mvweb/html/index_fyclass_fypage.html', 6 | searchUrl:'https://api.linhun.vip/api/kgmv?apiKey=e7e165ab27316db14467c07e00f3820d&name=**&n=', 7 | searchable:2, 8 | quickSearch:0, 9 | class_parse:'#radioList&ⅆa&&Text;a&&href;.*/index_(\\d+)_1.html', 10 | headers:{ 11 | 'User-Agent':'PC_UA' 12 | }, 13 | timeout:5000, 14 | play_parse:true, 15 | lazy:'js:if(/mp4/.test(input)){input}else{var mv_name=request(input).match(/mv_name = "(.*?)"/)[1];input=JSON.parse(request("https://api.linhun.vip/api/kgmv?apiKey=e7e165ab27316db14467c07e00f3820d&name="+mv_name+"&n=1")).video}', 16 | limit:6, 17 | 推荐:'*', 18 | 一级:'.mvlist li;a&&title;img&&_src;;a&&href', 19 | 二级:'*', 20 | 搜索:'js:let d=[];let html=request(input);let list=JSON.parse(html).sun;for(let j=1;j<=list;j++){let t=JSON.parse(request(MY_URL+j));d.push({title:t.name,desc:t.author,img:t.img,url:t.video})}setResult(d)', 21 | } -------------------------------------------------------------------------------- /js/音悦网.jsd: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'音悦网', 3 | host:'https://data.yinyuetai.com', 4 | homeUrl:'/video/getTypeVideoList?videoType=1&pageNum=1&pageSize=20',//网站的首页链接,可以是完整路径或者相对路径,用于分类获取和推荐获取 fyclass是分类标签 fypage是页数 5 | url:'/video/getTypeVideoList?videoType=fyclass&pageNum=fypage&pageSize=20', 6 | // detailUrl:'https://data.yinyuetai.com/video/getVideoInfo?id=fyid', 7 | searchUrl:'',//搜索链接 可以是完整路径或者相对路径,用于分类获取和推荐获取 **代表搜索词 fypage代表页数 8 | searchable:0,//是否启用全局搜索, 9 | quickSearch:0,//是否启用快速搜索, 10 | headers:{//网站的请求头,完整支持所有的,常带ua和cookies 11 | 'User-Agent':'MOBILE_UA', 12 | }, 13 | class_name:'内地&香港&台湾&日韩欧美&音悦V榜及自制', 14 | class_url:'1&2&3&4&5', 15 | play_parse:true, 16 | lazy:'', 17 | limit:6, 18 | 推荐:'*', 19 | 一级:'js:let d=[];let data=JSON.parse(request(input)).list;data.forEach(function(it){let purl=JSON.parse(request("https://data.yinyuetai.com/video/getVideoInfo?id="+it.id)).videoUrl;d.push({title:it.videoName,img:it.videoImg,url:purl,desc:it.artistName,})});setResult(d);', 20 | 二级:'*', 21 | 搜索:'', 22 | } -------------------------------------------------------------------------------- /libs/drpy.ym.js: -------------------------------------------------------------------------------- 1 | import './util.ym.js' 2 | import dr from './drpy.min.js' 3 | 4 | __JS_SPIDER__ = dr.DRPY() -------------------------------------------------------------------------------- /libs/jar/SP.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/libs/jar/SP.jar -------------------------------------------------------------------------------- /libs/jar/base.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/libs/jar/base.jar -------------------------------------------------------------------------------- /libs/jar/chajian.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/libs/jar/chajian.zip -------------------------------------------------------------------------------- /libs/jar/custom_jsapi.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/libs/jar/custom_jsapi.jar -------------------------------------------------------------------------------- /libs/jar/custom_spider.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/libs/jar/custom_spider.jar -------------------------------------------------------------------------------- /libs/jar/custom_spider.mini.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/libs/jar/custom_spider.mini.jar -------------------------------------------------------------------------------- /libs/jar/custom_spider_dz1201.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/libs/jar/custom_spider_dz1201.jar -------------------------------------------------------------------------------- /libs/jar/custom_spider_dz230509.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/libs/jar/custom_spider_dz230509.jar -------------------------------------------------------------------------------- /libs/jar/custom_spider_qy0627.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/libs/jar/custom_spider_qy0627.jar -------------------------------------------------------------------------------- /libs/jar/custom_spider_tang.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/libs/jar/custom_spider_tang.jar -------------------------------------------------------------------------------- /libs/jar/custom_spider_xiaoya.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/libs/jar/custom_spider_xiaoya.jar -------------------------------------------------------------------------------- /libs/jar/custom_spider_xyq1106.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/libs/jar/custom_spider_xyq1106.jar -------------------------------------------------------------------------------- /libs/maomi_aes.js: -------------------------------------------------------------------------------- 1 | eval(getCryptoJS()); 2 | var a = CryptoJS.enc.Utf8.parse("625222f9149e961d"); 3 | var t = CryptoJS.enc.Utf8.parse("5efdtf6060e2o330"); 4 | function De(word) { 5 | word = CryptoJS.enc.Hex.parse(word) 6 | return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(word), a, { 7 | iv: t, 8 | mode: CryptoJS.mode.CBC, 9 | padding: CryptoJS.pad.Pkcs7 10 | }).toString(CryptoJS.enc.Utf8) 11 | } 12 | var En = function(word) { 13 | // print(a); 14 | // print(word); 15 | var Encrypted = CryptoJS.AES.encrypt(word, a, { 16 | iv: t, 17 | mode: CryptoJS.mode.CBC, 18 | padding: CryptoJS.pad.Pkcs7 19 | }); 20 | return Encrypted.ciphertext.toString(); 21 | } 22 | $.exports = { 23 | De:De, 24 | En:En 25 | } -------------------------------------------------------------------------------- /libs/searchFilter.js: -------------------------------------------------------------------------------- 1 | function searchContains(key,result){ 2 | let keys = key.split(' ').filter(it=>it.trim()); 3 | let search_ok = true; 4 | for(let i=0;i" % ( 17 | self.play_url, self.real_url) -------------------------------------------------------------------------------- /models/ruleclass.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : ruleclass.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/6 6 | 7 | from base.database import db 8 | from datetime import datetime 9 | 10 | class RuleClass(db.Model): 11 | __tablename__ = 'rule_class' 12 | id = db.Column(db.Integer, primary_key=True, autoincrement=True) 13 | name = db.Column(db.String(20), unique=True) 14 | class_name = db.Column(db.String(255)) 15 | class_url = db.Column(db.String(255)) 16 | cookie = db.Column(db.String(255)) 17 | state = db.Column(db.Integer, default=1) 18 | order = db.Column(db.Integer, default=0) 19 | create_date = db.Column(db.DateTime, index=True, default=datetime.now) 20 | write_date = db.Column(db.DateTime, index=True, default=datetime.now,onupdate=datetime.now) 21 | 22 | def __repr__(self): 23 | return "" % ( 24 | self.name, self.class_name, self.class_url, self.cookie) 25 | 26 | @classmethod 27 | def hasItem(self, key): 28 | exists = db.session.query(self).filter(self.name == key).scalar() is not None 29 | if exists: 30 | return True 31 | else: 32 | return False -------------------------------------------------------------------------------- /models/vipParse.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : vipParse.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/10/31 6 | 7 | from base.database import db 8 | from datetime import datetime 9 | 10 | class VipParse(db.Model): 11 | __tablename__ = 'vip_parse' 12 | id = db.Column(db.Integer, primary_key=True, autoincrement=True) 13 | name = db.Column(db.String(20)) 14 | url = db.Column(db.String(255),unique=True) 15 | state = db.Column(db.Integer, default=1) 16 | type = db.Column(db.Integer, default=0) 17 | order = db.Column(db.Integer, default=0) 18 | ext = db.Column(db.String(255)) 19 | header = db.Column(db.String(255)) 20 | create_date = db.Column(db.DateTime, index=True, default=datetime.now) 21 | write_date = db.Column(db.DateTime, index=True, default=datetime.now,onupdate=datetime.now) 22 | 23 | def __repr__(self): 24 | return "" % ( 25 | self.id, self.name, self.url) 26 | 27 | @classmethod 28 | def hasItem(self, url): 29 | exists = db.session.query(self).filter(self.url == url).scalar() is not None 30 | if exists: 31 | return True 32 | else: 33 | return False -------------------------------------------------------------------------------- /py/gaze一级.js: -------------------------------------------------------------------------------- 1 | js: 2 | log(input); 3 | let d = []; 4 | // log(MY_FL); 5 | // log(MY_PAGE); 6 | let body = { 7 | "mform": MY_CATE, 8 | "mcountry": MY_FL.mcountry||'all', 9 | "tag_arr%5B%5D": MY_FL.mtag||'all', 10 | // "tag_arr[]": MY_FL.mtag||'all', 11 | "page": MY_PAGE, 12 | "sort": MY_FL.sort||'updatetime', 13 | "album": MY_FL.album||'all', 14 | "title": '', 15 | }; 16 | // let forms=[]; 17 | // Object.keys(body).forEach(function (it){ 18 | // forms.push(it+'='+body[it]); 19 | // }); 20 | // let form = forms.join('&'); 21 | // log(body); 22 | // log(form); 23 | // fetch_params.body = form; 24 | 25 | fetch_params.body = body; 26 | fetch_params.headers['x-requested-with'] = 'XMLHttpRequest'; 27 | // fetch_params.headers['cookie'] = 'PHPSESSID=e7ht5hvema4sg0o8l1o5k0bqt1; Hm_lvt_eebb854b7348edadfb6b433786f5d059=1666239708; Hm_lpvt_eebb854b7348edadfb6b433786f5d059=1666244071'; 28 | let url = input.split('?')[0]; 29 | let html = post(url,fetch_params); 30 | print(html); 31 | let data = JSON.parse(html); 32 | data.mlist.forEach(function (it){ 33 | d.push({ 34 | title: it.title, 35 | desc: it.definition+' '+it.grade, 36 | url:it.id, 37 | img:it.cover_img, 38 | }); 39 | }); 40 | setResult(d); -------------------------------------------------------------------------------- /py/qkjs/js2py执行性能.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/py/qkjs/js2py执行性能.png -------------------------------------------------------------------------------- /py/qkjs/qkjs执行性能.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/py/qkjs/qkjs执行性能.png -------------------------------------------------------------------------------- /py/qkjs/test_py_mini_racer.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : test_py_mini_racer.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/10/12 6 | 7 | -------------------------------------------------------------------------------- /py/qkjs/测试报告.txt: -------------------------------------------------------------------------------- 1 | quickjs是优秀的js解释器,秒杀execjs,但是呢在于python的交互上远远不如js2py 2 | 3 | 1.js注入python函数必须用add_callable,无法set 4 | 2.js注入变量基础类型必须用set 5 | 3.不支持注入python非基础类型,包括字典,对象,模块包 6 | 4.不能注入的类型可以传参调用js 7 | 5.类型转换麻烦,不过发现js的 obj(dict) 和 list 可以通过ctx.get完了 json()方法转为python字符串,python字符串再json.loads转为py类型 8 | 6.由于第5点,想要复杂类型交互是没办法的了。(不过合理注入python基础类型变量以及方法的话实现海阔视界那些东西还是够了) -------------------------------------------------------------------------------- /py/test_time.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : test_time.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/12/29 6 | 7 | import datetime 8 | from datetime import timedelta 9 | 10 | if __name__ == '__main__': 11 | # a = datetime.datetime.now().now().replace(hour=0, minute=1)).strftime('%Y-%m-%d %H:%M:%S') 12 | # print(a) 13 | print(datetime) 14 | print(datetime.datetime.now()) 15 | print(datetime.datetime.now().replace(hour=0, minute=1).strftime('%Y-%m-%d %H:%M:%S')) 16 | print((datetime.datetime.now().replace(hour=0, minute=0, second=0)+ timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S')) -------------------------------------------------------------------------------- /py/下载jar.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 下载jar.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/10/14 6 | 7 | import requests 8 | 9 | headers = { 10 | 'user-agent':'okhttp/3.15' 11 | } 12 | r = requests.get('http://刚刚.live/jar2/0906.jar',headers=headers) 13 | print(r.content) 14 | 15 | with open('0906.jar','wb+') as f: 16 | f.write(r.content) -------------------------------------------------------------------------------- /py/九酷.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 九酷.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/12/14 6 | import hashlib 7 | 8 | import requests 9 | import time 10 | import ujson 11 | 12 | def md5(str): 13 | return hashlib.md5(str.encode(encoding='UTF-8')).hexdigest() 14 | 15 | headers = { 16 | # 'x-requested-with':'XMLHttpRequest', 17 | 'user-agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1', 18 | # 'Cookie':'ecPopup=1;crisp-client%2Fsession%2Fba128124-8ac1-44d1-8420-98420b4da478=session_8d89f90c-4b46-4895-86d8-03a74770b741' 19 | } 20 | # s = requests.session() 21 | # s.get('https://jiuku.site/index.php/vod/type/id/1.html') 22 | # print(s.cookies) 23 | 24 | fyclass = 1 25 | fypage = 1 26 | tm = int(time.time()) 27 | # tm = '' 28 | print(tm) 29 | key = md5("DS"+str(tm)+"DCC147D11943AF75") 30 | print(key) 31 | data = f'type={fyclass}&page={fypage}&time={tm}&key={key}' 32 | data_dict = {} 33 | for dt in data.split('&'): 34 | data_dict[dt.split('=')[0]] = dt.split('=')[1] 35 | print(data_dict) 36 | # data_dict = ujson.dumps(data_dict) 37 | r = requests.post('https://jiuku.site/index.php/api/vod',data=data_dict,headers=headers) 38 | print(r.text) 39 | 40 | """ 41 | 解析免嗅: 42 | "https://jiuku.site/addons/dp/player/dp.php?key=0&from=&id="+vod_id+"&api=&url="+"vipUrl 43 | 专线m3u8: 44 | unescape(base64Decode(jsurl)) 45 | """ 46 | -------------------------------------------------------------------------------- /py/九酷一级.js: -------------------------------------------------------------------------------- 1 | js: 2 | let body = input.split('#')[1]; 3 | let t = Math.round(new Date() / 1000).toString(); 4 | let key = md5("DS"+t+"DCC147D11943AF75"); 5 | let url = input.split('#')[0]; 6 | body=body+'&time='+t+'&key='+key; 7 | print(body); 8 | fetch_params.body = body; 9 | let html = post(url,fetch_params); 10 | // print(html); 11 | let data = JSON.parse(html); 12 | VODS = data.list; -------------------------------------------------------------------------------- /py/优酷搜索.js: -------------------------------------------------------------------------------- 1 | js: 2 | var d = []; 3 | let html=request(input); 4 | let json = JSON.parse(html); 5 | // print(json); 6 | json.pageComponentList.forEach(function (it){ 7 | if (it.hasOwnProperty('commonData')) { 8 | it = it.commonData; 9 | d.push({ 10 | title: it.titleDTO.displayName, 11 | img: it.posterDTO.vThumbUrl, 12 | // desc: it.feature, 13 | desc: it.stripeBottom, 14 | content: it.updateNotice+' '+it.feature, 15 | url: 'https://search.youku.com/api/search?appScene=show_episode&showIds=' + it.showId + '&appCaller=h5' 16 | }); 17 | } 18 | }); 19 | setResult(d); -------------------------------------------------------------------------------- /py/低端免嗅.js: -------------------------------------------------------------------------------- 1 | js: 2 | let purl = input.split('|')[0]; 3 | let referer = input.split('|')[1]; 4 | let zm = input.split('|')[2]; 5 | print('purl:'+purl); 6 | print('referer:'+referer); 7 | print('zm:'+zm); 8 | let myua = 'okhttp/3.15'; 9 | if(/ddrkey/.test(purl)){ 10 | let ret=request(purl,{ 11 | Referer: referer, 12 | withHeaders:true, 13 | 'User-Agent':myua 14 | }); 15 | log(ret); 16 | input = purl; 17 | }else { 18 | let html = request(purl, { 19 | headers: { 20 | Referer: referer, 21 | 'User-Agent':myua 22 | } 23 | }); 24 | print(html); 25 | try { 26 | input = JSON.parse(html).url||{}; 27 | }catch (e) { 28 | input = purl 29 | } 30 | } -------------------------------------------------------------------------------- /py/厂长预处理.js: -------------------------------------------------------------------------------- 1 | rule_fetch_params.headers.Cookie = '68148872828e9f4d64e7a296f6c6b6d7=5429da9a54375db451f7f9e4f16ce0ea'; 2 | let new_host = 'https://czspp.com'; 3 | let new_html = request(new_host); 4 | if(/正在进行人机识别/.test(new_html)){ 5 | let new_src = pd(new_html,'script&&src',new_host); 6 | log(new_src); 7 | let hhtml = request(new_src,{withHeaders:true}); 8 | let json = JSON.parse(hhtml); 9 | let html = json.body; 10 | let key = html.match(new RegExp('var key=\"(.*?)\"'))[1]; 11 | let avalue = html.match(new RegExp('value=\"(.*?)\"'))[1]; 12 | // log(html.indexOf('var key=')); 13 | // log(key); 14 | // log(avalue); 15 | let c = '' 16 | for(let i=0;i 0){ 30 | if(position === -1){ 31 | position = 0; 32 | } 33 | url = ja[position]['url']; 34 | } 35 | result["parse"] = 0; 36 | result["playUrl"] = ''; 37 | result["url"] = url; 38 | result["header"] = { 39 | "Referer": "https://www.bilibili.com", 40 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" 41 | }; 42 | result["contentType"] = 'video/x-flv'; 43 | input = result; 44 | } 45 | } -------------------------------------------------------------------------------- /py/哔哩推荐.js: -------------------------------------------------------------------------------- 1 | js: 2 | let d = []; 3 | function get_result(url){ 4 | let videos = []; 5 | let html = request(url); 6 | let jo = JSON.parse(html); 7 | if(jo['code'] === 0){ 8 | let vodList = jo.result?jo.result.list:jo.data.list; 9 | vodList.forEach(function (vod){ 10 | let aid = (vod['season_id']+'').trim(); 11 | let title = vod['title'].trim(); 12 | let img = vod['cover'].trim(); 13 | let remark = vod.new_ep?vod['new_ep']['index_show']:vod['index_show']; 14 | videos.push({ 15 | "vod_id": aid, 16 | "vod_name": title, 17 | "vod_pic": img, 18 | "vod_remarks": remark 19 | }); 20 | }); 21 | } 22 | return videos; 23 | } 24 | function get_rank(tid,pg){ 25 | return get_result('https://api.bilibili.com/pgc/web/rank/list?season_type='+tid+'&pagesize=20&page='+pg+'&day=3') 26 | } 27 | 28 | function get_rank2(tid,pg){ 29 | return get_result('https://api.bilibili.com/pgc/season/rank/web/list?season_type='+tid+'&pagesize=20&page='+pg+'&day=3') 30 | } 31 | function home_video(){ 32 | let videos = get_rank(1).slice(0,5); 33 | [4, 2, 5, 3, 7].forEach(function (i){ 34 | videos = videos.concat(get_rank2(i).slice(0,5)) 35 | }); 36 | return videos; 37 | } 38 | VODS = home_video(); -------------------------------------------------------------------------------- /py/哔哩搜索.js: -------------------------------------------------------------------------------- 1 | js: 2 | let url1 = input+'media_bangumi'; 3 | let url2 = input+'media_ft'; 4 | let html = request(url1); 5 | let msg = JSON.parse(html).message; 6 | if(msg!=='0'){ 7 | VODS = [{vod_name:KEY + '➢'+msg,vod_id:'no_data',vod_remarks:'别点,缺少bili_cookie',vod_pic:'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg'}]; 8 | }else { 9 | let jo1 = JSON.parse(html).data; 10 | html = request(url2); 11 | let jo2 = JSON.parse(html).data; 12 | let videos = []; 13 | let vodList = []; 14 | if (jo1['numResults'] === 0) { 15 | vodList = jo2['result']; 16 | } else if (jo2['numResults'] === 0) { 17 | vodList = jo1['result']; 18 | } else { 19 | vodList = jo1['result'].concat(jo2['result']); 20 | } 21 | vodList.forEach(function (vod) { 22 | let aid = (vod['season_id'] + '').trim(); 23 | let title = KEY + '➢' + vod['title'].trim().replace("", "").replace("", ""); 24 | let img = vod['cover'].trim(); 25 | let remark = vod['index_show']; 26 | videos.push({ 27 | "vod_id": aid, 28 | "vod_name": title, 29 | "vod_pic": img, 30 | "vod_remarks": remark 31 | }); 32 | }); 33 | VODS = videos; 34 | } -------------------------------------------------------------------------------- /py/外部更新环境变量.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 外部更新环境变量.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/12/6 6 | 7 | import requests 8 | 9 | 10 | class Drpy: 11 | def __init__(self, url, username='admin', password='drpy'): 12 | s = requests.session() 13 | data = { 14 | 'username': username, 15 | 'password': password, 16 | } 17 | print(data) 18 | login_api = f'{url.rstrip("/")}/admin/login' 19 | try: 20 | r = s.post(login_api, data=data) 21 | print(r.cookies) 22 | print(r.text) 23 | self.env_api = f'{url.rstrip("/")}/admin/update_env' 24 | self.s = s 25 | print('drpy连接成功') 26 | except: 27 | self.s = None 28 | print('drpy连接失败') 29 | 30 | def update_env(self, key, value): 31 | if not self.s: 32 | exit('drpy未连接,无法进行操作') 33 | else: 34 | data = { 35 | 'key': key, 36 | 'value': value, 37 | } 38 | r = self.s.post(self.env_api, data=data) 39 | jsonData = r.json() 40 | if jsonData.get('code') == 200: 41 | print('修改成功') 42 | print(jsonData['data']) 43 | else: 44 | print('修改失败') 45 | 46 | 47 | if __name__ == '__main__': 48 | drpy = Drpy('http://localhost:5705/') 49 | drpy.update_env('test_env', '测试环境变量') 50 | -------------------------------------------------------------------------------- /py/奇优搜索.js: -------------------------------------------------------------------------------- 1 | js: 2 | // log(input); 3 | let url=input.split(";")[0]; 4 | let d = []; 5 | let body={searchword:input.split(";")[1]}; 6 | fetch_params.body=body; 7 | let html = post(url,fetch_params); 8 | // print(html);\ 9 | let pdfa = jsp.pdfa; 10 | let pdfh = jsp.pdfh; 11 | let pd = jsp.pd; 12 | let lists = pdfa(html,'ul.stui-vodlist__media&&li'); 13 | lists.forEach(function (it){ 14 | d.push({ 15 | title:pdfh(it,'.title&&Text'), 16 | url:pd(it,'a&&href'), 17 | desc:pdfh(html,'.pic-text&&Text'), 18 | pic_url:pd(html,'.lazyload&&data-original'), 19 | }); 20 | }); 21 | setResult(d); -------------------------------------------------------------------------------- /py/学生直播一级.js: -------------------------------------------------------------------------------- 1 | js: 2 | pdfa=jsp.pdfa; 3 | pdfa=jsp.pdfa; 4 | pd=jsp.pd; 5 | let d=[]; 6 | log(input); 7 | let html=request(input); 8 | let list=pdfa(html,'.text_list li'); 9 | let burl=input.match(/(.*)\/.*?.html/)[1]; 10 | log(burl); 11 | MY_URL=burl; 12 | print(list); 13 | list.forEach(function(it){ 14 | let title = pdfh(it,'a&&Text'); 15 | d.push({ 16 | title:title, 17 | desc:pdfh(it,'.date&&Text'), 18 | url:pd(it,'a&&href')+'@@'+title 19 | }); 20 | }); 21 | setResult(d) -------------------------------------------------------------------------------- /py/干饭.js: -------------------------------------------------------------------------------- 1 | js: 2 | // cacheUrl = d.getParse(input); 3 | cacheUrl = getParse(input); 4 | // print(cacheUrl); 5 | if(cacheUrl){ 6 | input=cacheUrl; 7 | }else{ 8 | try { 9 | // let html = fetch([input, {headers:d.headers,timeout:d.timeout,encoding:d.encoding}]); 10 | // let html = fetch(input, {headers:d.headers,timeout:d.timeout,encoding:d.encoding}); 11 | let html = fetch(input, fetch_params); 12 | // js = pdfh(html,'.stui-player__video script:eq(0)&&Html'); 13 | // print(js); 14 | let ret = html.match(/var player_(.*?)=(.*?) 10){ 17 | real_url = 'https://player.buyaotou.xyz/?url='+url; 18 | // log('免嗅地址:'+real_url); 19 | // d.saveParse(input,real_url); 20 | saveParse(input,real_url); 21 | input = real_url; 22 | } 23 | }catch (e) { 24 | print('网络请求发生错误:'+e.message); 25 | } 26 | } -------------------------------------------------------------------------------- /py/干饭.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 干饭.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/8/28 6 | 7 | import requests 8 | import re 9 | import json 10 | from urllib.parse import urljoin,quote,unquote 11 | import base64 12 | 13 | def lazyParse(input,d): 14 | cacheUrl = d.getParse(input) 15 | print(f'干饭免嗅:cacheUrl:{cacheUrl}') 16 | if cacheUrl: 17 | return cacheUrl 18 | r = requests.get(input, headers=d.headers,timeout=d.timeout) 19 | r.encoding = d.encoding 20 | html = r.text 21 | # print(html) 22 | # js = d.jsp.pdfh(html,'.stui-player__video script:eq(0)&&Html') 23 | # print(js) 24 | try: 25 | ret = re.search('var player_(.*?)=(.*?)<', html, re.M | re.I).groups()[1] 26 | ret = json.loads(ret) 27 | url = ret.get('url','') 28 | if len(url) > 10: 29 | real_url = 'https://player.buyaotou.xyz/?url='+url 30 | d.saveParse(input,real_url) 31 | return real_url 32 | else: 33 | return input 34 | except Exception as e: 35 | print(f'错误:{e}') 36 | return input -------------------------------------------------------------------------------- /py/批量重命名.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 批量重命名.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/12/12 6 | 7 | import os 8 | 9 | def main(path): 10 | # base_path = os.path.dirname(os.path.abspath(__file__)) # 当前文件所在目录 11 | # print(base_path) 12 | files = os.listdir(path) 13 | print(files) 14 | for file in files: 15 | if file.endswith('2.js'): 16 | print(file) 17 | os.rename(path+'/'+file,path+'/'+file.replace('2.js','.js')) 18 | elif file.endswith('2[飞].js'): 19 | print(file) 20 | os.rename(path+'/'+file,path+'/'+file.replace('2[飞].js','[飞].js')) 21 | 22 | 23 | if __name__ == '__main__': 24 | path = r'F:\drpy源\js' 25 | main(path) -------------------------------------------------------------------------------- /py/搜狗免嗅.js: -------------------------------------------------------------------------------- 1 | js: 2 | // fetch_params.withHeaders = 1; 3 | // let data=fetch(input,fetch_params); 4 | // let html = data.body; 5 | print(input); 6 | fetch_params.headers['User-Agent'] = MOBILE_UA; 7 | print(fetch_params); 8 | let html=request(input); 9 | // let rurl = html.match(/window\.open\('(.*?)',/)[1].split('?')[0]; 10 | let rurl = html.match(/window\.open\('(.*?)',/)[1]; 11 | // print(rurl); 12 | rurl = urlDeal(rurl); 13 | // print(rurl); 14 | // input = rurl; 15 | input = {parse:1,jx:1,url:rurl}; 16 | // print(html); 17 | -------------------------------------------------------------------------------- /py/搜狗搜索.js: -------------------------------------------------------------------------------- 1 | js: 2 | let d=[]; 3 | let html = request(input); 4 | // print(html); 5 | let jsonA = JSON.parse(html.match(/INITIAL_STATE.*?({.*});/)[1]); 6 | print(jsonA); 7 | jsonA = jsonA.result.longVideo.results; 8 | jsonA.forEach(function (it){ 9 | let name=it.name; 10 | let introduction=it.introduction; 11 | let pic= it.v_picurl; 12 | let url= it.tiny_url; 13 | let zone=it.zone; 14 | let score=it.score||'暂无'; 15 | let style=it.style; 16 | if(it.play.item_list){ 17 | let r = {}; 18 | r.title = name.replace(//,'').replace(//,''); 19 | r.url= 'https://v.sogou.com'+url; 20 | r.desc = it.list_category.join(','); 21 | r.content= introduction; 22 | r.pic_url= pic; 23 | d.push(r); 24 | } 25 | }); 26 | // print(d); 27 | setResult(d); -------------------------------------------------------------------------------- /py/搜狗筛选.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 搜狗筛选.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/11 6 | import requests 7 | from pprint import pprint 8 | 9 | cates = 'teleplay&film&cartoon&tvshow&documentary'.split('&') 10 | urls = [f'https://waptv.sogou.com/napi/video/classlist?abtest=0&iploc=CN1304&spver=&listTab={cate}&filter=&start=0&len=15&fr=filter' for cate in cates] 11 | print(urls) 12 | headers = {'user-agent':'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36'} 13 | 14 | ft_dict = {} 15 | def getOne(url): 16 | r = requests.get(url, headers=headers) 17 | html = r.json() 18 | filters = html['listData']['list']['filter_list'] 19 | cate_id = html['listData']['list']['entity'] 20 | ft_dict[cate_id] = [] 21 | for i in range(len(filters)): 22 | ft = filters[i] 23 | value = [{"n":"全部","v":""}] 24 | vl = [{"n":i,"v":i} for i in ft['option_list']] 25 | value.extend(vl) 26 | ft_dict[cate_id].append({ 27 | 'key':ft['option_name'], 28 | 'name':ft['name'], 29 | 'value':value 30 | }) 31 | return ft_dict 32 | # print(ft_dict) 33 | for url in urls: 34 | # print(getOne(urls[0])) 35 | # print(getOne(url)) 36 | getOne(url) 37 | print(ft_dict) -------------------------------------------------------------------------------- /py/搜索一级.js: -------------------------------------------------------------------------------- 1 | js: 2 | let d = []; 3 | let html = request(input); 4 | html = JSON.parse(html); 5 | let list = html.listData.results; 6 | list.forEach(function (it){ 7 | let desc1 = it.ipad_play_for_list.finish_episode?it.ipad_play_for_list.episode===it.ipad_play_for_list.finish_episode?"全集"+it.ipad_play_for_list.finish_episode:"连载"+it.ipad_play_for_list.episode+"/"+it.ipad_play_for_list.finish_episode:""; 8 | let desc2 = it.score?'评分:'+it.score:''; 9 | let desc3 = it.date?'更至:'+it.date:''; 10 | d.push({ 11 | title: it.name, 12 | img: it.v_picurl, 13 | url: "https://v.sogou.com" + it.url.replace('teleplay', 'series').replace('cartoon', 'series'), 14 | desc: desc1||desc2||desc3, 15 | }); 16 | }); 17 | setResult(d); -------------------------------------------------------------------------------- /py/有声小说列表.js: -------------------------------------------------------------------------------- 1 | js: 2 | pd = jsp.pd; 3 | let url=pd(html,".bookbutton&&a&&href"); 4 | log(url); 5 | html = request(url); 6 | let v=pd(html,'.booksite&&script&&Html'); 7 | var document={}; 8 | var VideoListJson; 9 | // log(v); 10 | VideoListJson=eval(v.split('VideoListJson=')[1].split(',urlinfo')[0]); 11 | // 截取剔除eval代码js不兼容的部分 quickjs不支持没定义变量的情况下直接赋值!!! 12 | // v = v.split('VideoListJson=')[1].split(',urlinfo')[0]; 13 | // eval(v); 14 | log(typeof(VideoListJson)); 15 | let list1=VideoListJson[0][1]; 16 | LISTS=[list1]; 17 | log(LISTS); -------------------------------------------------------------------------------- /py/测试注视.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 测试注释.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/10/20 6 | 7 | 8 | import requests 9 | import ujson 10 | 11 | data = {'album': 'all', 'mcountry': 'all', 'mform': 'all', 'page': '1', 'sort': 'all', 'tag_arr%5B%5D': 'all', 'title': ''} 12 | headers = { 13 | 'Referer': 'https://gaze.run', 14 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36', 15 | # 'cookie': 'PHPSESSID=e7ht5hvema4sg0o8l1o5k0bqt1; Hm_lvt_eebb854b7348edadfb6b433786f5d059=1666239708; Hm_lpvt_eebb854b7348edadfb6b433786f5d059=1666244071', 16 | 'x-requested-with': 'XMLHttpRequest' 17 | } 18 | # form = ujson.dumps(data) 19 | # form = data 20 | # print(form) 21 | form = 'mform=1&mcountry=all&tag_arr%5B%5D=3&page=1&sort=updatetime&album=all&title=' 22 | form = 'mform=1&mcountry=all&tag_arr%5B%5D=all&page=1&sort=default&album=all&title=' 23 | print(form) 24 | r = requests.post('https://gaze.run/filter_movielist',data=form,headers=headers) 25 | print(r.text) -------------------------------------------------------------------------------- /py/爱奇艺推荐.js: -------------------------------------------------------------------------------- 1 | js: 2 | let d =[]; 3 | // print(input); 4 | // print(HOST); 5 | fetch_params.headers['user-agent'] = PC_UA; 6 | // print(fetch_params); 7 | pdfh = jsp.pdfh; 8 | pdfa = jsp.pdfa; 9 | pd = jsp.pd; 10 | let html = fetch(HOST,fetch_params); 11 | let lists = pdfa(html,'.qy-mod-li'); 12 | // print(lists.length); 13 | lists.forEach(function (it){ 14 | try { 15 | let title = pdfh(it,'p.sub&&title'); 16 | let desc = pdfh(it,'.qy-mod-label&&Text'); 17 | let pic_url = pd(it,'img&&src'); 18 | d.push({ 19 | title:title, 20 | desc:desc, 21 | img:pic_url, 22 | }); 23 | }catch(e){ 24 | // print(e.message); 25 | } 26 | 27 | }); 28 | // print(d); 29 | res = setResult(d); 30 | // print(res); -------------------------------------------------------------------------------- /py/猫了个咪一级.js: -------------------------------------------------------------------------------- 1 | js: 2 | let d = []; 3 | let bodys = { 4 | "access_token": "", 5 | "cate_id": MY_CATE, 6 | "identifier": "ffffffff-c67a-899b-ffff-ffffef05ac4a", 7 | "page": MY_PAGE, 8 | "region": 0, 9 | "type_id": 0, 10 | "vip": 0, 11 | "year": "" 12 | }; 13 | // print(input); 14 | // print(bodys); 15 | var fn = rc('maomi_aes.js'); 16 | bodys = fn.En(stringify(bodys)); 17 | // print(bodys); 18 | let obj = { 19 | headers: { 20 | 'Content-Type': 'application/x-www-form-urlencoded', 21 | }, 22 | method: 'POST', 23 | // body: 'params=' + bodys + '&version=26&sign=' + CryptoJS.MD5('QEBBQADSwrXIXaNqBmMofjfRY/8Sxaxgparams' + bodys + 'version26QEBBQADSwrXIXaNqBmMofjfRY/8Sxaxg') 24 | body: 'params=' + bodys + '&version=26&sign=' + md5('QEBBQADSwrXIXaNqBmMofjfRY/8Sxaxgparams' + bodys + 'version26QEBBQADSwrXIXaNqBmMofjfRY/8Sxaxg') 25 | }; 26 | // print(obj); 27 | let api = input.split('#')[0]; 28 | let html = JSON.parse(fn.De(request(api, obj))); 29 | // print(html); 30 | html.data.data.forEach(function (it){ 31 | d.push({ 32 | title:it.name, 33 | img:it.image, 34 | desc:it.rate, 35 | url:api.replace('index','detail')+';'+it.id 36 | }); 37 | }); 38 | setResult(d); -------------------------------------------------------------------------------- /py/猫了个咪免嗅.js: -------------------------------------------------------------------------------- 1 | js: 2 | // log(input); 3 | let VID = input.split(';')[1]; 4 | let VURL = input.split(';')[0]; 5 | var fn = rc('maomi_aes.js'); 6 | let url = VURL + '?params='+fn.En('{"id":"' + VID + '"}'); 7 | // print(url); 8 | input = JSON.parse(fn.De(request(url))).data.video_item[0].file; -------------------------------------------------------------------------------- /py/猫了个咪搜索.js: -------------------------------------------------------------------------------- 1 | js: 2 | let bodys = {"keyword":KEY,"page":MY_PAGE}; 3 | var fn = rc('maomi_aes.js'); 4 | bodys = fn.En(stringify(bodys)); 5 | let url = input.split('#')[0]; 6 | print(url); 7 | var html = JSON.parse(fn.De(request(url+bodys))); 8 | let d = html.data.data.map(function (data){ 9 | return { 10 | title: data.video_name, 11 | img: data.image, 12 | desc:data.rate, 13 | url: 'http://119.28.59.69:8089/api/video/detail?params=;'+fn.En('{"id":"'+data.video_id+'"}'), 14 | } 15 | }); 16 | setResult(d); -------------------------------------------------------------------------------- /py/石榴免嗅.js: -------------------------------------------------------------------------------- 1 | js: 2 | let ep=input.match(/ep=(\d+)/)[1]; 3 | let html=request(input); 4 | let jsonA=jsp.pdfh(html,'#__NEXT_DATA__&&Html'); 5 | let data=JSON.parse(jsonA).props.pageProps.videoDetail.videoepisode.data; 6 | let realUrl=data.filter(function(it){ 7 | return it.episode==ep 8 | })[0].url; 9 | input = realUrl -------------------------------------------------------------------------------- /py/腾讯搜索.js: -------------------------------------------------------------------------------- 1 | js: 2 | let d = []; 3 | pdfa=jsp.pdfa;pdfh=jsp.pdfh;pd=jsp.pd; 4 | let html = request(input); 5 | let baseList=pdfa(html,'body&&.result_item_v'); 6 | baseList.forEach(function(it){ 7 | let longText=pdfh(it,'.result_title&&Text'); 8 | let shortText=pdfh(it,'.sub&&Text'); 9 | let fromTag=pdfh(it,'.result_source&&Text'); 10 | let score=pdfh(it,'.result_score&&Text'); 11 | let content=pdfh(it,'.desc_text&&Text'); 12 | let url=pdfh(it,'.result_title&&a&&href'); 13 | // log(url); 14 | let img= pd(it,'.figure_pic&&src'); 15 | url='https://node.video.qq.com/x/api/float_vinfo2?cid='+url.match(/.*\/(.*?)\.html/)[1]; 16 | log(shortText+'|'+url); 17 | if (fromTag.match(/腾讯/)) { 18 | d.push({ 19 | title: longText.split(shortText)[0], 20 | img: img, 21 | url: url, 22 | content:content, 23 | desc:"⭐"+longText.split(shortText)[1]+'-'+shortText+' '+score 24 | }); 25 | } 26 | }); 27 | setResult(d); -------------------------------------------------------------------------------- /py/腾讯筛选.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 腾讯筛选.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/25 6 | 7 | 8 | cates = 'choice&tv&movie&variety&cartoon&child&doco'.split('&') 9 | fl_dict = {} 10 | 11 | for cate in cates: 12 | fls = [] 13 | fls.append({ 14 | 'key':'sort', 15 | 'name':'排序', 16 | 'value':[{'n':'最热','v':'18'},{'n':'最新','v':'19'},{'n':'好评','v':'16'},{'n':'高分好评','v':'21'}], 17 | }) 18 | fls.append({ 19 | 'key': 'pay', 20 | 'name': '资费', 21 | 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}], 22 | }) 23 | year_value = [{'n': str(2022-i), 'v': str(2022-i)} for i in range(8)] 24 | year_value = [{'n': '全部', 'v': '-1'}]+year_value 25 | fls.append({ 26 | 'key': 'year', 27 | 'name': '年代', 28 | 'value': year_value, 29 | }) 30 | fl_dict[cate] = fls 31 | print(fl_dict) -------------------------------------------------------------------------------- /py/芒果搜索.js: -------------------------------------------------------------------------------- 1 | js: 2 | fetch_params.headers.Referer = 'https://www.mgtv.com'; 3 | fetch_params.headers['User-Agent'] = UA; 4 | let d = []; 5 | let html = request(input); 6 | let json = JSON.parse(html); 7 | json.data.contents.forEach(function (data){ 8 | if (data.data.sourceList || data.data.yearList) { 9 | let list = data.data.sourceList ? data.data.sourceList : data.data.yearList[0].sourceList; 10 | let desc = ''; 11 | list.forEach(function (it){ 12 | desc += it.name + '\t'; 13 | }); 14 | if (list[0].source === 'imgo') { 15 | let img = data.data.pic ? data.data.pic : data.data.yearList[0].pic; 16 | d.push({ 17 | title: data.data.title ? data.data.title : data.data.yearList[0].title, 18 | img:img , 19 | content: data.data.story ? data.data.story : data.data.yearList[0].story, 20 | desc: data.data.playTime, 21 | url: list[0].vid 22 | }); 23 | } 24 | } 25 | }); 26 | setResult(d); -------------------------------------------------------------------------------- /py/芒果筛选.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 芒果筛选.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/25 6 | 7 | cates = '2&3&1&50&51&115'.split('&') 8 | fl_dict = {} 9 | 10 | for cate in cates: 11 | fls = [] 12 | fls.append({ 13 | 'key':'chargeInfo', 14 | 'name':'付费类型', 15 | 'value':[{'n':'全部','v':'all'},{'n':'免费','v':'b1'},{'n':'vip','v':'b2'},{'n':'VIP用券','v':'b3'},{'n':'付费点播','v':'b4'}], 16 | }) 17 | fls.append({ 18 | 'key': 'sort', 19 | 'name': '排序', 20 | 'value': [{'n': '最新', 'v': 'c1'}, {'n': '最热', 'v': 'c2'}, {'n': '知乎高分', 'v': 'c4'}], 21 | }) 22 | year_value = [{'n': str(2022-i), 'v': str(2022-i)} for i in range(19)] 23 | year_value = [{'n': '全部', 'v': 'all'}]+year_value 24 | fls.append({ 25 | 'key': 'year', 26 | 'name': '年代', 27 | 'value': year_value, 28 | }) 29 | fl_dict[cate] = fls 30 | print(fl_dict) -------------------------------------------------------------------------------- /py/荐片筛选.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 荐片筛选.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/10/22 6 | 7 | def getFilters(): 8 | fyyear = '全部&2022&2021&2020&2019&2018&2017&2016'.split('&') 9 | fyyeark = '0&101&118&16&7&2&3&22'.split('&') 10 | fysort = '热门&评分&更新'.split('&') 11 | fysortK = 'hot&rating&update'.split('&') 12 | fyclass='0&1&2&3&4' 13 | 14 | fy_dict = {} 15 | for i in fyclass.split('&'): 16 | fy_dict[i] = [{ 17 | 'key': 'year', 18 | 'name': '年代', 19 | 'value': [{'n':fyyear[j],'v':fyyeark[j]} for j in range(len(fyyear))] 20 | },{ 21 | 'key': 'sort', 22 | 'name': '排序', 23 | 'value': [{'n':fysort[k],'v':fysortK[k]} for k in range(len(fysort))] 24 | }] 25 | print(fy_dict) 26 | 27 | if __name__ == '__main__': 28 | getFilters() 29 | -------------------------------------------------------------------------------- /py/荐片选集列表.js: -------------------------------------------------------------------------------- 1 | js: 2 | log(TABS); 3 | LISTS=[]; 4 | TABS.forEach(function (tab){ 5 | if(/边下边播/.test(tab)){ 6 | let ftp = html.data.new_ftp_list; 7 | let d = ftp.map(function (it){ 8 | return it.title+'$'+(/m3u8/.test(it.url)?play_url+it.url:'tvbox-xg:'+it.url) 9 | }); 10 | LISTS.push(d); 11 | }else if(/在线点播/.test(tab)){ 12 | let m3u = html.data.new_m3u8_list; 13 | let d=m3u.map(function (it){ 14 | return it.title+'$'+(/m3u8/.test(it.url)?play_url+it.url:'tvbox-xg:'+it.url); 15 | }); 16 | LISTS.push(d); 17 | } 18 | }); -------------------------------------------------------------------------------- /py/豆瓣测试.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 豆瓣测试.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/16 6 | 7 | import json 8 | 9 | selected_categories = { 10 | "类型": "", 11 | "形式": "", 12 | "地区": "" 13 | } 14 | print(selected_categories) 15 | b = json.dumps(selected_categories, separators=(',', ':'), ensure_ascii=False) 16 | print(b) -------------------------------------------------------------------------------- /py/通用免嗅.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 通用免嗅.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/8/28 6 | import requests 7 | import re 8 | import json 9 | from urllib.parse import urljoin,quote,unquote 10 | import base64 11 | 12 | def lazyParse(input,d): 13 | print('通用免嗅:',input) 14 | r = requests.get(input, headers=d.headers,timeout=d.timeout) 15 | r.encoding = d.encoding 16 | html = r.text 17 | # print(html) 18 | # js = jsp.pdfh(html,'.stui-player__video script:eq(0)&&Html') 19 | # print(js) 20 | try: 21 | ret = re.search('var player_(.*?)=(.*?)<', html, re.M | re.I).groups()[1] 22 | ret = json.loads(ret) 23 | url = ret.get('url','') 24 | if len(url) > 10: 25 | if url.find('.m3u8') > -1 or url.find('.mp4') > -1: 26 | return url 27 | elif url.find('http') < 0: 28 | try: 29 | l = unquote(base64.b64decode(url).decode("utf-8")) 30 | print(l) 31 | return l 32 | except Exception as e: 33 | print(f'非url和base64编码:{e}') 34 | return input 35 | else: 36 | return input 37 | except Exception as e: 38 | print(f'错误:{e}') 39 | return input -------------------------------------------------------------------------------- /py/酷云免嗅.js: -------------------------------------------------------------------------------- 1 | js: 2 | function GetPlayUrl(playUrl) { 3 | let realPlay = {parse:0,url:playUrl}; 4 | if (/mgtv|sohu/.test(playUrl)) { 5 | realPlay.headers = {'User-Agent':'Mozilla/5.0'}; 6 | } else if (/bili/.test(playUrl)) { 7 | realPlay.headers ={'User-Agent':'Mozilla/5.0','Referer':'https://www.bilibili.com'}; 8 | } else if (/ixigua/.test(playUrl)) { 9 | realPlay.headers = {'User-Agent':'Mozilla/5.0','Referer':'https://www.ixigua.com'}; 10 | } 11 | return realPlay 12 | } 13 | if (/\.m3u8|\.mp4/.test(input)) { 14 | input={parse:0,url:input}; 15 | } else { 16 | try { 17 | let jxUrl = 'http://api.kunyu77.com/api.php/provide/parserUrl?url='; 18 | var t = Math.floor(new Date().getTime() /1000).toString(); 19 | let jxExt = "&retryNum=0&pcode=010110002&version=2.1&devid=f9c9ce5bb5827a266829383718e6131a&package=com.sevenVideo.app.android&sys=android&sysver=12&brand=Xiaomi&model=Mi_10_Pro&sj="+t; 20 | let url = jxUrl+input+jxExt; 21 | let TK = "/api.php/provide/parserUrl"+"Xiaomif9c9ce5bb5827a266829383718e6131aMi_10_Procom.sevenVideo.app.android010110002"+0+t+"android12"+ encodeURIComponent(vipUrl) + "2.1"+t+"XSpeUFjJ"; 22 | let html = request(url,{headers:{Referer:jxUrl,'User-Agent':'okhttp/3.12.0','TK':md5(TK)}}); 23 | let urll = JSON.parse(html).data.url; 24 | let playhtml = request(urll); 25 | let playurl = JSON.parse(playhtml).url; 26 | input = GetPlayUrl(playurl); 27 | }catch (e) { 28 | input = {parse:1,jx:1,url:input}; 29 | } 30 | } -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | js2py 2 | pyquery 3 | flask==2.0.3;python_version < '3.7' 4 | flask==2.2.2;python_version >= '3.7' 5 | flask_migrate 6 | flask-sqlalchemy==2.5.1 7 | SQLAlchemy==1.4.40 8 | requests 9 | psutil 10 | # netifaces 11 | # gevent==1.1.2 ; sys_platform != 'win32' and python_version < '3.7' 12 | # gevent==1.3.4 ; sys_platform != 'win32' and python_version >= '3.7' and python_version < '3.9' 13 | # gevent==21.12.0 ; sys_platform == 'win32' 14 | gevent 15 | gunicorn ; python_version >= '3.6' 16 | supervisor ; sys_platform != 'win32' 17 | func_timeout 18 | easydict 19 | jsonpath 20 | quickjs 21 | ujson 22 | Werkzeug==2.2.2 -------------------------------------------------------------------------------- /sources.list: -------------------------------------------------------------------------------- 1 | # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 2 | deb https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free 3 | # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free 4 | deb https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free 5 | # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free 6 | 7 | deb https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free 8 | # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free 9 | 10 | deb https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free 11 | # deb-src https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free -------------------------------------------------------------------------------- /start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 建立文件夹 3 | mkdir -p /home/pywork/dr_py && cd /home/pywork/dr_py 4 | # 下载仓库包 5 | wget https://ghproxy.net/https://github.com/hjdhnx/dr_py/archive/refs/heads/main.zip -O dr_py.zip 6 | # 解压 7 | unzip dr_py.zip 8 | # 移动文件到当前目录 9 | mv dr*/* ./ 10 | # 清理临时文件 11 | rm *.zip 12 | # 启动容器 13 | # docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy -------------------------------------------------------------------------------- /static/css/grey.css: -------------------------------------------------------------------------------- 1 | html{ 2 | -webkit-filter: grayscale(1); 3 | -moz-filter: grayscale(1); 4 | -ms-filter:grayscale(1); 5 | -o-filter: grayscale(1); 6 | filter: grayscale(1); 7 | } -------------------------------------------------------------------------------- /static/css/index.css: -------------------------------------------------------------------------------- 1 | .btn{ 2 | margin-bottom: 1rem; 3 | border: 1px solid #615e5e; 4 | width: 240px; 5 | height: 30px; 6 | text-align: center; 7 | background-color: #1379cb; 8 | color: #ffffff; 9 | border-radius: 20px; 10 | line-height: 30px; 11 | } 12 | 13 | .btn a{ 14 | color: #ffffff; 15 | } 16 | 17 | a { 18 | text-decoration: none; 19 | text-align: center; 20 | line-height: 30px; 21 | } 22 | .jyw{ 23 | margin-bottom: 5rem; 24 | } -------------------------------------------------------------------------------- /static/img/404.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/img/404.jpg -------------------------------------------------------------------------------- /static/img/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/img/check.png -------------------------------------------------------------------------------- /static/img/checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/img/checked.png -------------------------------------------------------------------------------- /static/img/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/img/icon.png -------------------------------------------------------------------------------- /static/img/login_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/img/login_background.png -------------------------------------------------------------------------------- /static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/img/logo.png -------------------------------------------------------------------------------- /static/img/logo_drpy1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/img/logo_drpy1.png -------------------------------------------------------------------------------- /static/img/logo_drpy2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/img/logo_drpy2.png -------------------------------------------------------------------------------- /static/img/logo_drpy3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/img/logo_drpy3.png -------------------------------------------------------------------------------- /static/img/yzm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/img/yzm.png -------------------------------------------------------------------------------- /static/img/豆瓣.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/img/豆瓣.png -------------------------------------------------------------------------------- /static/js/common.js: -------------------------------------------------------------------------------- 1 | function copy(text,mode){ 2 | mode = mode||0; 3 | if(mode === 0){ 4 | let el = $(''); 5 |    $('body').prepend(el); //添加到元素内部的前面 6 | el.val(text); // 修改文本框的内容 7 | el.select(); //选中 8 | console.log('复制的内容:\n'+text); 9 | document.execCommand("copy"); // 执行浏览器复制命令 10 | el.remove(); 11 | }else{ 12 | let el = $(text); 13 | console.log('复制的内容:\n'+el.val()); 14 | el.select(); //选中 15 | document.execCommand("copy"); // 执行浏览器复制命令 16 | } 17 | alert("复制成功"); 18 | } -------------------------------------------------------------------------------- /static/js/dzUtil.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 扩展es6函数 fromEntries 3 | * @param iterable 4 | * @returns {*} 5 | */ 6 | Object.fromEntries = function fromEntries (iterable) { 7 | return [...iterable].reduce((obj, [key, val]) => { 8 | obj[key] = val; 9 | return obj; 10 | }, {}); 11 | }; 12 | 13 | /** 14 | * 15 | * @param url 原始接口链接,支持带参数 16 | * @param params_str 拼接搜索字符串 如 ?a=1&b=2 17 | * @returns {string} 返回拼接后的完整链接,支持带上原始接口链接的hash 18 | */ 19 | const buildUrl = function (url,params_str){ 20 | const u = new URL(url); 21 | const p = new URLSearchParams(params_str); 22 | const api = u.origin + u.pathname; 23 | let params = Object.fromEntries(u.searchParams.entries()); 24 | let params_obj = Object.fromEntries(p.entries()); 25 | Object.assign(params,params_obj); 26 | let plist = []; 27 | for(let key in params){ 28 | plist.push(key+'='+params[key]); 29 | } 30 | return api + '?' + plist.join('&') + u.hash 31 | }; -------------------------------------------------------------------------------- /static/js/grey.js: -------------------------------------------------------------------------------- 1 | var global_grey = { 2 | '-webkit-filter':'grayscale(1)', 3 | '-moz-filter':'grayscale(1)', 4 | '-ms-filter':'grayscale(1)', 5 | '-o-filter':'grayscale(1)', 6 | 'filter':'grayscale(1)', 7 | }; 8 | 9 | function autoGreyByTime(){ 10 | let now = new Date(); 11 | let now_hours = now.getHours(); 12 | // console.log(now_hours,typeof now_hours); 13 | if(now_hours >= 23 || now_hours < 8){ 14 | $('html').css(global_grey); 15 | } 16 | } 17 | autoGreyByTime(); 18 | 19 | function darkModeHandler() { 20 | const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); 21 | if (mediaQuery.matches) { 22 | let color = '#1b1b1b'; 23 | $('body').css({"background": color }); 24 | } 25 | } 26 | darkModeHandler(); -------------------------------------------------------------------------------- /static/js/jquery.cookie.min.js: -------------------------------------------------------------------------------- 1 | /*! jquery.cookie v1.4.1 | MIT */ 2 | !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?a(require("jquery")):a(jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}}); -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/asciiarmor/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: ASCII Armor (PGP) mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

ASCII Armor (PGP) mode

27 |
36 | 37 | 42 | 43 |

MIME types 44 | defined: application/pgp, application/pgp-encrypted, application/pgp-keys, application/pgp-signature

45 | 46 |
47 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/css/gss_test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function() { 5 | "use strict"; 6 | 7 | var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-gss"); 8 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "gss"); } 9 | 10 | MT("atComponent", 11 | "[def @component] {", 12 | "[tag foo] {", 13 | " [property color]: [keyword black];", 14 | "}", 15 | "}"); 16 | 17 | })(); 18 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/cypher/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({tabSize: 4, indentUnit: 2}, "cypher"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("unbalancedDoubledQuotedString", 9 | "[string \"a'b\"][variable c]"); 10 | 11 | MT("unbalancedSingleQuotedString", 12 | "[string 'a\"b'][variable c]"); 13 | 14 | MT("doubleQuotedString", 15 | "[string \"a\"][variable b]"); 16 | 17 | MT("singleQuotedString", 18 | "[string 'a'][variable b]"); 19 | 20 | MT("single attribute (with content)", 21 | "[node {][atom a:][string 'a'][node }]"); 22 | 23 | MT("multiple attribute, singleQuotedString (with content)", 24 | "[node {][atom a:][string 'a'][node ,][atom b:][string 'b'][node }]"); 25 | 26 | MT("multiple attribute, doubleQuotedString (with content)", 27 | "[node {][atom a:][string \"a\"][node ,][atom b:][string \"b\"][node }]"); 28 | 29 | MT("single attribute (without content)", 30 | "[node {][atom a:][string 'a'][node }]"); 31 | 32 | MT("multiple attribute, singleQuotedString (without content)", 33 | "[node {][atom a:][string ''][node ,][atom b:][string ''][node }]"); 34 | 35 | MT("multiple attribute, doubleQuotedString (without content)", 36 | "[node {][atom a:][string \"\"][node ,][atom b:][string \"\"][node }]"); 37 | })(); 38 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/d/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "d"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("nested_comments", 9 | "[comment /+]","[comment comment]","[comment +/]","[variable void] [variable main](){}"); 10 | 11 | })(); 12 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/diff/diff.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineMode("diff", function() { 15 | 16 | var TOKEN_NAMES = { 17 | '+': 'positive', 18 | '-': 'negative', 19 | '@': 'meta' 20 | }; 21 | 22 | return { 23 | token: function(stream) { 24 | var tw_pos = stream.string.search(/[\t ]+?$/); 25 | 26 | if (!stream.sol() || tw_pos === 0) { 27 | stream.skipToEnd(); 28 | return ("error " + ( 29 | TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); 30 | } 31 | 32 | var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); 33 | 34 | if (tw_pos === -1) { 35 | stream.skipToEnd(); 36 | } else { 37 | stream.pos = tw_pos; 38 | } 39 | 40 | return token_name; 41 | } 42 | }; 43 | }); 44 | 45 | CodeMirror.defineMIME("text/x-diff", "diff"); 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/haskell-literate/haskell-literate.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function (mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror"), require("../haskell/haskell")) 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "../haskell/haskell"], mod) 9 | else // Plain browser env 10 | mod(CodeMirror) 11 | })(function (CodeMirror) { 12 | "use strict" 13 | 14 | CodeMirror.defineMode("haskell-literate", function (config, parserConfig) { 15 | var baseMode = CodeMirror.getMode(config, (parserConfig && parserConfig.base) || "haskell") 16 | 17 | return { 18 | startState: function () { 19 | return { 20 | inCode: false, 21 | baseState: CodeMirror.startState(baseMode) 22 | } 23 | }, 24 | token: function (stream, state) { 25 | if (stream.sol()) { 26 | if (state.inCode = stream.eat(">")) 27 | return "meta" 28 | } 29 | if (state.inCode) { 30 | return baseMode.token(stream, state.baseState) 31 | } else { 32 | stream.skipToEnd() 33 | return "comment" 34 | } 35 | }, 36 | innerMode: function (state) { 37 | return state.inCode ? {state: state.baseState, mode: baseMode} : null 38 | } 39 | } 40 | }, "haskell") 41 | 42 | CodeMirror.defineMIME("text/x-literate-haskell", "haskell-literate") 43 | }); 44 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/http/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: HTTP mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

HTTP mode

27 | 28 | 29 |
39 | 40 | 43 | 44 |

MIME types defined: message/http.

45 |
46 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/mbox/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: mbox mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

mbox mode

27 |
38 | 41 | 42 |

MIME types defined: application/mbox.

43 | 44 |
45 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/oz/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Oz mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 26 | 27 |
28 |

Oz mode

29 | 50 |

MIME type defined: text/x-oz.

51 | 52 | 59 |
60 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/ruby/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "ruby"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("divide_equal_operator", 9 | "[variable bar] [operator /=] [variable foo]"); 10 | 11 | MT("divide_equal_operator_no_spacing", 12 | "[variable foo][operator /=][number 42]"); 13 | 14 | MT("complex_regexp", 15 | "[keyword if] [variable cr] [operator =~] [string-2 /(?: \\( #{][tag RE_NOT][string-2 }\\( | #{][tag RE_NOT_PAR_OR][string-2 }* #{][tag RE_OPA_OR][string-2 } )/][variable x]") 16 | 17 | MT("indented_heredoc", 18 | "[keyword def] [def x]", 19 | " [variable y] [operator =] [string <<-FOO]", 20 | "[string bar]", 21 | "[string FOO]", 22 | "[keyword end]") 23 | })(); 24 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/rust/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: https://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 4}, "rust"); 6 | function MT(name) {test.mode(name, mode, Array.prototype.slice.call(arguments, 1));} 7 | 8 | MT('integer_test', 9 | '[number 123i32]', 10 | '[number 123u32]', 11 | '[number 123_u32]', 12 | '[number 0xff_u8]', 13 | '[number 0o70_i16]', 14 | '[number 0b1111_1111_1001_0000_i32]', 15 | '[number 0usize]'); 16 | 17 | MT('float_test', 18 | '[number 123.0f64]', 19 | '[number 0.1f64]', 20 | '[number 0.1f32]', 21 | '[number 12E+99_f64]'); 22 | 23 | MT('string-literals-test', 24 | '[string "foo"]', 25 | '[string r"foo"]', 26 | '[string "\\"foo\\""]', 27 | '[string r#""foo""#]', 28 | '[string "foo #\\"# bar"]', 29 | 30 | '[string b"foo"]', 31 | '[string br"foo"]', 32 | '[string b"\\"foo\\""]', 33 | '[string br#""foo""#]', 34 | '[string br##"foo #" bar"##]', 35 | 36 | "[string-2 'h']", 37 | "[string-2 b'h']"); 38 | 39 | })(); 40 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/solr/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Solr mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 20 | 33 | 34 |
35 |

Solr mode

36 | 37 |
38 | 47 |
48 | 49 | 55 | 56 |

MIME types defined: text/x-solr.

57 |
58 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/spreadsheet/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Spreadsheet mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

Spreadsheet mode

28 |
29 | 30 | 37 | 38 |

MIME types defined: text/x-spreadsheet.

39 | 40 |

The Spreadsheet Mode

41 |

Created by Robert Plummer

42 |
43 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/tiddlywiki/tiddlywiki.css: -------------------------------------------------------------------------------- 1 | span.cm-underlined { 2 | text-decoration: underline; 3 | } 4 | span.cm-strikethrough { 5 | text-decoration: line-through; 6 | } 7 | span.cm-brace { 8 | color: #170; 9 | font-weight: bold; 10 | } 11 | span.cm-table { 12 | color: blue; 13 | font-weight: bold; 14 | } 15 | -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/tiki/tiki.css: -------------------------------------------------------------------------------- 1 | .cm-tw-syntaxerror { 2 | color: #FFF; 3 | background-color: #900; 4 | } 5 | 6 | .cm-tw-deleted { 7 | text-decoration: line-through; 8 | } 9 | 10 | .cm-tw-header5 { 11 | font-weight: bold; 12 | } 13 | .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ 14 | padding-left: 10px; 15 | } 16 | 17 | .cm-tw-box { 18 | border-top-width: 0px !important; 19 | border-style: solid; 20 | border-width: 1px; 21 | border-color: inherit; 22 | } 23 | 24 | .cm-tw-underline { 25 | text-decoration: underline; 26 | } -------------------------------------------------------------------------------- /static/plugin/codemirror/mode/z80/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Z80 assembly mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Z80 assembly mode

27 | 28 | 29 |
45 | 46 | 51 | 52 |

MIME types defined: text/x-z80, text/x-ez80.

53 |
54 | -------------------------------------------------------------------------------- /static/plugin/codemirror/theme/ambiance-mobile.css: -------------------------------------------------------------------------------- 1 | .cm-s-ambiance.CodeMirror { 2 | -webkit-box-shadow: none; 3 | -moz-box-shadow: none; 4 | box-shadow: none; 5 | } 6 | -------------------------------------------------------------------------------- /static/plugin/codemirror/theme/bespin.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Bespin 4 | Author: Mozilla / Jan T. Sott 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-bespin.CodeMirror {background: #28211c; color: #9d9b97;} 12 | .cm-s-bespin div.CodeMirror-selected {background: #36312e !important;} 13 | .cm-s-bespin .CodeMirror-gutters {background: #28211c; border-right: 0px;} 14 | .cm-s-bespin .CodeMirror-linenumber {color: #666666;} 15 | .cm-s-bespin .CodeMirror-cursor {border-left: 1px solid #797977 !important;} 16 | 17 | .cm-s-bespin span.cm-comment {color: #937121;} 18 | .cm-s-bespin span.cm-atom {color: #9b859d;} 19 | .cm-s-bespin span.cm-number {color: #9b859d;} 20 | 21 | .cm-s-bespin span.cm-property, .cm-s-bespin span.cm-attribute {color: #54be0d;} 22 | .cm-s-bespin span.cm-keyword {color: #cf6a4c;} 23 | .cm-s-bespin span.cm-string {color: #f9ee98;} 24 | 25 | .cm-s-bespin span.cm-variable {color: #54be0d;} 26 | .cm-s-bespin span.cm-variable-2 {color: #5ea6ea;} 27 | .cm-s-bespin span.cm-def {color: #cf7d34;} 28 | .cm-s-bespin span.cm-error {background: #cf6a4c; color: #797977;} 29 | .cm-s-bespin span.cm-bracket {color: #9d9b97;} 30 | .cm-s-bespin span.cm-tag {color: #cf6a4c;} 31 | .cm-s-bespin span.cm-link {color: #9b859d;} 32 | 33 | .cm-s-bespin .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 34 | .cm-s-bespin .CodeMirror-activeline-background { background: #404040; } 35 | -------------------------------------------------------------------------------- /static/plugin/codemirror/theme/eclipse.css: -------------------------------------------------------------------------------- 1 | .cm-s-eclipse span.cm-meta { color: #FF1717; } 2 | .cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } 3 | .cm-s-eclipse span.cm-atom { color: #219; } 4 | .cm-s-eclipse span.cm-number { color: #164; } 5 | .cm-s-eclipse span.cm-def { color: #00f; } 6 | .cm-s-eclipse span.cm-variable { color: black; } 7 | .cm-s-eclipse span.cm-variable-2 { color: #0000C0; } 8 | .cm-s-eclipse span.cm-variable-3, .cm-s-eclipse span.cm-type { color: #0000C0; } 9 | .cm-s-eclipse span.cm-property { color: black; } 10 | .cm-s-eclipse span.cm-operator { color: black; } 11 | .cm-s-eclipse span.cm-comment { color: #3F7F5F; } 12 | .cm-s-eclipse span.cm-string { color: #2A00FF; } 13 | .cm-s-eclipse span.cm-string-2 { color: #f50; } 14 | .cm-s-eclipse span.cm-qualifier { color: #555; } 15 | .cm-s-eclipse span.cm-builtin { color: #30a; } 16 | .cm-s-eclipse span.cm-bracket { color: #cc7; } 17 | .cm-s-eclipse span.cm-tag { color: #170; } 18 | .cm-s-eclipse span.cm-attribute { color: #00c; } 19 | .cm-s-eclipse span.cm-link { color: #219; } 20 | .cm-s-eclipse span.cm-error { color: #f00; } 21 | 22 | .cm-s-eclipse .CodeMirror-activeline-background { background: #e8f2ff; } 23 | .cm-s-eclipse .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } 24 | -------------------------------------------------------------------------------- /static/plugin/codemirror/theme/elegant.css: -------------------------------------------------------------------------------- 1 | .cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom { color: #762; } 2 | .cm-s-elegant span.cm-comment { color: #262; font-style: italic; line-height: 1em; } 3 | .cm-s-elegant span.cm-meta { color: #555; font-style: italic; line-height: 1em; } 4 | .cm-s-elegant span.cm-variable { color: black; } 5 | .cm-s-elegant span.cm-variable-2 { color: #b11; } 6 | .cm-s-elegant span.cm-qualifier { color: #555; } 7 | .cm-s-elegant span.cm-keyword { color: #730; } 8 | .cm-s-elegant span.cm-builtin { color: #30a; } 9 | .cm-s-elegant span.cm-link { color: #762; } 10 | .cm-s-elegant span.cm-error { background-color: #fdd; } 11 | 12 | .cm-s-elegant .CodeMirror-activeline-background { background: #e8f2ff; } 13 | .cm-s-elegant .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } 14 | -------------------------------------------------------------------------------- /static/plugin/codemirror/theme/hopscotch.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Hopscotch 4 | Author: Jan T. Sott 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-hopscotch.CodeMirror {background: #322931; color: #d5d3d5;} 12 | .cm-s-hopscotch div.CodeMirror-selected {background: #433b42 !important;} 13 | .cm-s-hopscotch .CodeMirror-gutters {background: #322931; border-right: 0px;} 14 | .cm-s-hopscotch .CodeMirror-linenumber {color: #797379;} 15 | .cm-s-hopscotch .CodeMirror-cursor {border-left: 1px solid #989498 !important;} 16 | 17 | .cm-s-hopscotch span.cm-comment {color: #b33508;} 18 | .cm-s-hopscotch span.cm-atom {color: #c85e7c;} 19 | .cm-s-hopscotch span.cm-number {color: #c85e7c;} 20 | 21 | .cm-s-hopscotch span.cm-property, .cm-s-hopscotch span.cm-attribute {color: #8fc13e;} 22 | .cm-s-hopscotch span.cm-keyword {color: #dd464c;} 23 | .cm-s-hopscotch span.cm-string {color: #fdcc59;} 24 | 25 | .cm-s-hopscotch span.cm-variable {color: #8fc13e;} 26 | .cm-s-hopscotch span.cm-variable-2 {color: #1290bf;} 27 | .cm-s-hopscotch span.cm-def {color: #fd8b19;} 28 | .cm-s-hopscotch span.cm-error {background: #dd464c; color: #989498;} 29 | .cm-s-hopscotch span.cm-bracket {color: #d5d3d5;} 30 | .cm-s-hopscotch span.cm-tag {color: #dd464c;} 31 | .cm-s-hopscotch span.cm-link {color: #c85e7c;} 32 | 33 | .cm-s-hopscotch .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 34 | .cm-s-hopscotch .CodeMirror-activeline-background { background: #302020; } 35 | -------------------------------------------------------------------------------- /static/plugin/codemirror/theme/isotope.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Isotope 4 | Author: David Desandro / Jan T. Sott 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-isotope.CodeMirror {background: #000000; color: #e0e0e0;} 12 | .cm-s-isotope div.CodeMirror-selected {background: #404040 !important;} 13 | .cm-s-isotope .CodeMirror-gutters {background: #000000; border-right: 0px;} 14 | .cm-s-isotope .CodeMirror-linenumber {color: #808080;} 15 | .cm-s-isotope .CodeMirror-cursor {border-left: 1px solid #c0c0c0 !important;} 16 | 17 | .cm-s-isotope span.cm-comment {color: #3300ff;} 18 | .cm-s-isotope span.cm-atom {color: #cc00ff;} 19 | .cm-s-isotope span.cm-number {color: #cc00ff;} 20 | 21 | .cm-s-isotope span.cm-property, .cm-s-isotope span.cm-attribute {color: #33ff00;} 22 | .cm-s-isotope span.cm-keyword {color: #ff0000;} 23 | .cm-s-isotope span.cm-string {color: #ff0099;} 24 | 25 | .cm-s-isotope span.cm-variable {color: #33ff00;} 26 | .cm-s-isotope span.cm-variable-2 {color: #0066ff;} 27 | .cm-s-isotope span.cm-def {color: #ff9900;} 28 | .cm-s-isotope span.cm-error {background: #ff0000; color: #c0c0c0;} 29 | .cm-s-isotope span.cm-bracket {color: #e0e0e0;} 30 | .cm-s-isotope span.cm-tag {color: #ff0000;} 31 | .cm-s-isotope span.cm-link {color: #cc00ff;} 32 | 33 | .cm-s-isotope .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 34 | .cm-s-isotope .CodeMirror-activeline-background { background: #202020; } 35 | -------------------------------------------------------------------------------- /static/plugin/codemirror/theme/neat.css: -------------------------------------------------------------------------------- 1 | .cm-s-neat span.cm-comment { color: #a86; } 2 | .cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } 3 | .cm-s-neat span.cm-string { color: #a22; } 4 | .cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } 5 | .cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } 6 | .cm-s-neat span.cm-variable { color: black; } 7 | .cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } 8 | .cm-s-neat span.cm-meta { color: #555; } 9 | .cm-s-neat span.cm-link { color: #3a3; } 10 | 11 | .cm-s-neat .CodeMirror-activeline-background { background: #e8f2ff; } 12 | .cm-s-neat .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } 13 | -------------------------------------------------------------------------------- /static/plugin/codemirror/theme/neo.css: -------------------------------------------------------------------------------- 1 | /* neo theme for codemirror */ 2 | 3 | /* Color scheme */ 4 | 5 | .cm-s-neo.CodeMirror { 6 | background-color:#ffffff; 7 | color:#2e383c; 8 | line-height:1.4375; 9 | } 10 | .cm-s-neo .cm-comment { color:#75787b; } 11 | .cm-s-neo .cm-keyword, .cm-s-neo .cm-property { color:#1d75b3; } 12 | .cm-s-neo .cm-atom,.cm-s-neo .cm-number { color:#75438a; } 13 | .cm-s-neo .cm-node,.cm-s-neo .cm-tag { color:#9c3328; } 14 | .cm-s-neo .cm-string { color:#b35e14; } 15 | .cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier { color:#047d65; } 16 | 17 | 18 | /* Editor styling */ 19 | 20 | .cm-s-neo pre { 21 | padding:0; 22 | } 23 | 24 | .cm-s-neo .CodeMirror-gutters { 25 | border:none; 26 | border-right:10px solid transparent; 27 | background-color:transparent; 28 | } 29 | 30 | .cm-s-neo .CodeMirror-linenumber { 31 | padding:0; 32 | color:#e0e2e5; 33 | } 34 | 35 | .cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } 36 | .cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } 37 | 38 | .cm-s-neo .CodeMirror-cursor { 39 | width: auto; 40 | border: 0; 41 | background: rgba(155,157,162,0.37); 42 | z-index: 1; 43 | } 44 | -------------------------------------------------------------------------------- /static/plugin/codemirror/theme/ssms.css: -------------------------------------------------------------------------------- 1 | .cm-s-ssms span.cm-keyword { color: blue; } 2 | .cm-s-ssms span.cm-comment { color: darkgreen; } 3 | .cm-s-ssms span.cm-string { color: red; } 4 | .cm-s-ssms span.cm-def { color: black; } 5 | .cm-s-ssms span.cm-variable { color: black; } 6 | .cm-s-ssms span.cm-variable-2 { color: black; } 7 | .cm-s-ssms span.cm-atom { color: darkgray; } 8 | .cm-s-ssms .CodeMirror-linenumber { color: teal; } 9 | .cm-s-ssms .CodeMirror-activeline-background { background: #ffffff; } 10 | .cm-s-ssms span.cm-string-2 { color: #FF00FF; } 11 | .cm-s-ssms span.cm-operator, 12 | .cm-s-ssms span.cm-bracket, 13 | .cm-s-ssms span.cm-punctuation { color: darkgray; } 14 | .cm-s-ssms .CodeMirror-gutters { border-right: 3px solid #ffee62; background-color: #ffffff; } 15 | .cm-s-ssms div.CodeMirror-selected { background: #ADD6FF; } 16 | 17 | -------------------------------------------------------------------------------- /static/plugin/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/plugin/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /static/plugin/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/plugin/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /static/plugin/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/plugin/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /static/plugin/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/plugin/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /static/plugin/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/plugin/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /static/plugin/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/plugin/layui/font/iconfont.eot -------------------------------------------------------------------------------- /static/plugin/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/plugin/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /static/plugin/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/plugin/layui/font/iconfont.woff -------------------------------------------------------------------------------- /static/plugin/layui/font/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/static/plugin/layui/font/iconfont.woff2 -------------------------------------------------------------------------------- /super/flask.conf: -------------------------------------------------------------------------------- 1 | [inet_http_server] ; inet (TCP) server disabled by default 2 | port=*:9001 ; (ip_address:port specifier, *:port for all iface) 3 | username=user ; (default is no username (open server)) 4 | password=123 ; (default is no password (open server)) 5 | 6 | [supervisord] 7 | ;nodaemon=true 8 | logfile=logs/supervisord.log 9 | logfile_maxbytes=50MB 10 | [supervisorctl] 11 | [program:flask_dr_py] 12 | command=python3 app.py ; 被监控的进程路径 13 | ;directory=/root/sd/pywork/dr_py ; 执行前要不要先cd到目录去,一般不用 14 | user=root ;执行者角色 15 | priority=1 ;数字越高,优先级越高 16 | ;numprocs=1 ; 启动几个进程 17 | startsecs=0 18 | autostart=true ; 随着supervisord的启动而启动 19 | autorestart=true ; 自动重启。。当然要选上了 20 | startretries=10 ; 启动失败时的最多重试次数 21 | exitcodes=0 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定) 22 | stopsignal=KILL ; 用来杀死进程的信号 23 | stopwaitsecs=10 ; 发送SIGKILL前的等待时间 24 | redirect_stderr=true ; 重定向stderr到stdout 25 | ;stopasgroup=true ;用于停止进程组,即停止所有通过“uwsgi.ini”配置启动的进程。 26 | ;killasgroup=true ;用于关闭进程组,即关闭所有通过“uwsgi.ini”配置启动的进程。 -------------------------------------------------------------------------------- /super/sflask.conf: -------------------------------------------------------------------------------- 1 | [inet_http_server] ; inet (TCP) server disabled by default 2 | port=*:9001 ; (ip_address:port specifier, *:port for all iface) 3 | username=user ; (default is no username (open server)) 4 | password=123 ; (default is no password (open server)) 5 | 6 | [supervisord] 7 | ;nodaemon=true 8 | logfile=logs/supervisord.log 9 | logfile_maxbytes=50MB 10 | [supervisorctl] 11 | [program:flask_dr_py] 12 | # command=gunicorn -w 5 --threads=2 -b 0.0.0.0:5705 app:app ;被监控的进程路径 13 | # command=gunicorn -w 5 -b 0.0.0.0:5705 app:app ;被监控的进程路径 14 | # command=gunicorn --worker-class=gevent --worker-connections=1000 -w 5 -b 0.0.0.0:5705 app:app ;被监控的进程路径 worker建议的最大并发数是(2*CPU) +1 15 | command=gunicorn -w 5 --worker-class=sync --preload -b 0.0.0.0:5705 app:app ;被监控的进程路径 16 | ;directory=/root/sd/pywork/dr_py ; 执行前要不要先cd到目录去,一般不用 17 | user=root ;执行者角色 18 | priority=1 ;数字越高,优先级越高 19 | ;numprocs=1 ; 启动几个进程 20 | startsecs=0 21 | autostart=true ; 随着supervisord的启动而启动 22 | autorestart=true ; 自动重启。。当然要选上了 23 | startretries=10 ; 启动失败时的最多重试次数 24 | exitcodes=0 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定) 25 | stopsignal=KILL ; 用来杀死进程的信号 26 | stopwaitsecs=10 ; 发送SIGKILL前的等待时间 27 | redirect_stderr=true ; 重定向stderr到stdout 28 | ;stopasgroup=true ;用于停止进程组,即停止所有通过“uwsgi.ini”配置启动的进程。 29 | ;killasgroup=true ;用于关闭进程组,即关闭所有通过“uwsgi.ini”配置启动的进程。 -------------------------------------------------------------------------------- /super/stermux.conf: -------------------------------------------------------------------------------- 1 | [inet_http_server] ; inet (TCP) server disabled by default 2 | port=*:9001 ; (ip_address:port specifier, *:port for all iface) 3 | username=user ; (default is no username (open server)) 4 | password=123 ; (default is no password (open server)) 5 | 6 | [supervisord] 7 | ;nodaemon=true 8 | logfile=logs/supervisord.log 9 | logfile_maxbytes=50MB 10 | [supervisorctl] 11 | [program:flask_dr_py] 12 | # command=gunicorn -w 5 --threads=2 -b 0.0.0.0:5705 app:app ;被监控的进程路径 13 | command=gunicorn -w 5 --worker-class=sync --preload -b 0.0.0.0:5705 app:app ;被监控的进程路径 14 | # command=gunicorn --worker-class=gevent --worker-connections=1000 -w 5 app:app ;被监控的进程路径 15 | ;directory=/sdcard/Download/pywork/dr_py ; 执行前要不要先cd到目录去,一般不用 16 | user=u0_a414 ;执行者角色 17 | priority=1 ;数字越高,优先级越高 18 | ;numprocs=1 ; 启动几个进程 19 | startsecs=0 20 | autostart=true ; 随着supervisord的启动而启动 21 | autorestart=true ; 自动重启。。当然要选上了 22 | startretries=10 ; 启动失败时的最多重试次数 23 | exitcodes=0 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定) 24 | stopsignal=KILL ; 用来杀死进程的信号 25 | stopwaitsecs=10 ; 发送SIGKILL前的等待时间 26 | redirect_stderr=true ; 重定向stderr到stdout 27 | ;stopasgroup=true ;用于停止进程组,即停止所有通过“uwsgi.ini”配置启动的进程。 28 | ;killasgroup=true ;用于关闭进程组,即关闭所有通过“uwsgi.ini”配置启动的进程。 -------------------------------------------------------------------------------- /super/termux.conf: -------------------------------------------------------------------------------- 1 | [inet_http_server] ; inet (TCP) server disabled by default 2 | port=*:9001 ; (ip_address:port specifier, *:port for all iface) 3 | username=user ; (default is no username (open server)) 4 | password=123 ; (default is no password (open server)) 5 | 6 | [supervisord] 7 | ;nodaemon=true 8 | logfile=logs/supervisord.log 9 | logfile_maxbytes=50MB 10 | [supervisorctl] 11 | [program:flask_dr_py] 12 | command=python3 app.py ; 被监控的进程路径 13 | ;directory=/sdcard/Download/pywork/dr_py ; 执行前要不要先cd到目录去,一般不用 14 | user=u0_a414 ;执行者角色 15 | priority=1 ;数字越高,优先级越高 16 | ;numprocs=1 ; 启动几个进程 17 | startsecs=0 18 | autostart=true ; 随着supervisord的启动而启动 19 | autorestart=true ; 自动重启。。当然要选上了 20 | startretries=10 ; 启动失败时的最多重试次数 21 | exitcodes=0 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定) 22 | stopsignal=KILL ; 用来杀死进程的信号 23 | stopwaitsecs=10 ; 发送SIGKILL前的等待时间 24 | redirect_stderr=true ; 重定向stderr到stdout 25 | ;stopasgroup=true ;用于停止进程组,即停止所有通过“uwsgi.ini”配置启动的进程。 26 | ;killasgroup=true ;用于关闭进程组,即关闭所有通过“uwsgi.ini”配置启动的进程。 -------------------------------------------------------------------------------- /templates/cms/mxpro/css/commonUI.css: -------------------------------------------------------------------------------- 1 | a.links{ 2 | margin-right: 5px; 3 | } 4 | 5 | .stui-content__thumb .pic iframe{ 6 | max-width: 100%; 7 | border-radius: 2px;height:155px; 8 | overflow: hidden; 9 | /*pointer-events: none;*/ 10 | } 11 | 12 | .showPhoto { 13 | position: fixed; 14 | top: 0; 15 | left: 0; 16 | width: 100%; 17 | height: 100%; 18 | background: rgba(0, 0, 0, 0.5); 19 | z-index: 99999; 20 | display: flex; 21 | align-items: center; 22 | justify-content: center; 23 | } 24 | 25 | .showPhoto .img { 26 | display: block; 27 | margin: auto 0; 28 | max-width: 100%; 29 | text-align: center; 30 | } -------------------------------------------------------------------------------- /templates/cms/mxpro/img/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/cms/mxpro/img/back.png -------------------------------------------------------------------------------- /templates/cms/mxpro/img/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/cms/mxpro/img/help.png -------------------------------------------------------------------------------- /templates/cms/mxpro/img/load.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/cms/mxpro/img/load.gif -------------------------------------------------------------------------------- /templates/cms/mxpro/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/cms/mxpro/img/logo.png -------------------------------------------------------------------------------- /templates/cms/mxpro/img/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/cms/mxpro/img/play.png -------------------------------------------------------------------------------- /templates/cms/mxpro/img/show.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/cms/mxpro/img/show.png -------------------------------------------------------------------------------- /templates/cms/mxpro/js/commonUtil.js: -------------------------------------------------------------------------------- 1 | var commonUtil = { 2 | isVideo(playUrl){ 3 | let res_url = playUrl.split('?')[0]; 4 | if(playUrl.endsWith('.m3u8')||res_url.endsWith('.m3u8')){ 5 | return true 6 | }else if(playUrl.endsWith('.mp4')||res_url.endsWith('.mp4')){ 7 | return true 8 | }else if(/\.(m4a|mp3|flv|aac)$/.test(playUrl)||/\.(m4a|mp3|flv|aac)$/.test(res_url)){ 9 | return true 10 | } 11 | return false 12 | }, 13 | getLocationFromRedirect( 14 | originUrl, 15 | method = "GET" 16 | ){ 17 | return new Promise((resolve, reject) => { 18 | const xhr = new XMLHttpRequest(); 19 | xhr.open(method, originUrl, true); 20 | xhr.onload = function () { 21 | resolve(xhr.responseURL); 22 | }; 23 | xhr.onerror = reject; 24 | xhr.send(null); 25 | }) 26 | }, 27 | get302UrlResponse(url, callback) { 28 | var xhr = new XMLHttpRequest(); 29 | xhr.open('GET', url, true); 30 | xhr.onload = function () { 31 | callback(xhr.responseURL); 32 | } 33 | xhr.send(null); 34 | }, 35 | async getRealUrl(url,callback){ 36 | const res = await axios.get(`web/302redirect?url=${encodeURIComponent(url)}`); 37 | return callback(res); 38 | } 39 | }; -------------------------------------------------------------------------------- /templates/cms/mxpro/js/mxhtml.js: -------------------------------------------------------------------------------- 1 | function closeclick() { 2 | document.getElementById('note').style.display = 'none'; 3 | setSessionStorage("note", 1) 4 | } 5 | function clickclose() { 6 | noteStatus = getSessionStorage('note') 7 | console.log(noteStatus); 8 | if (noteStatus && Number(noteStatus) == 1) { 9 | document.getElementById('note').style.display = 'none'; 10 | } else { 11 | document.getElementById('note').style.display = 'block'; 12 | } 13 | 14 | } 15 | function setSessionStorage(key, val) { 16 | window.sessionStorage.setItem(key, val); 17 | } 18 | function getSessionStorage(key) { 19 | return window.sessionStorage.getItem(key); 20 | } 21 | // window.onload = clickclose; -------------------------------------------------------------------------------- /templates/cms/mxpro/js/rich-tf.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | function IsPC() { 3 | var userAgentInfo = window.navigator.userAgent; 4 | var flag = true; 5 | if (userAgentInfo.indexOf('Mobile') != -1 || screen.width <= 750) { 6 | flag = false; 7 | } 8 | return flag; 9 | } 10 | var dom = document.getElementById('richid'); 11 | var data = document.getElementById('richid').getAttribute('data') 12 | if (dom) { 13 | if (IsPC()) { 14 | var sp = document.createElement('script'); 15 | sp.src = '//pc.stgowan.com/pc_w/m_rich.js'; 16 | sp.id = 'richdata'; 17 | sp.charset = 'utf-8'; 18 | sp.setAttribute('data', data); 19 | if (data=='s=6871'||data=='s=7689'||data=='s=8227') { 20 | window.onload = function () { 21 | document.body.appendChild(sp); 22 | } 23 | } else { 24 | document.body.appendChild(sp); 25 | } 26 | } 27 | } 28 | })() -------------------------------------------------------------------------------- /templates/player/mui/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/mui/favicon.ico -------------------------------------------------------------------------------- /templates/player/mui/imges/GEBDGDCAJSP4DhK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/mui/imges/GEBDGDCAJSP4DhK.png -------------------------------------------------------------------------------- /templates/player/mui/imges/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/mui/imges/background.jpg -------------------------------------------------------------------------------- /templates/player/mui/imges/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/mui/imges/loading.gif -------------------------------------------------------------------------------- /templates/player/mui/js/jquery.xctips.js: -------------------------------------------------------------------------------- 1 | window.xcsoft = window.xcsoft || {}; 2 | xcsoft.tipsCss = { 3 | height: "40px", 4 | fontSize: "14px", 5 | top:"82%" 6 | }; 7 | xcsoft.tipsHide = xcsoft.tipsShow = "fast"; 8 | xcsoft.dom; 9 | xcsoft.timeout; 10 | xcsoft.loading = function(b) { 11 | xcsoft.init(b, 0, "loading", !0) 12 | }; 13 | xcsoft.info = function(b, c) { 14 | xcsoft.init(b, c || 2500, "info") 15 | }; 16 | xcsoft.error = function(b, c) { 17 | xcsoft.init(b, c || 2E3, "error") 18 | }; 19 | xcsoft.success = function(b, c) { 20 | xcsoft.init(b, c || 1500, "success") 21 | }; 22 | xcsoft.init = function(b, c, a, d) { 23 | this.tipsHtml(b, a); 24 | $(this.dom).animate({ 25 | left: 0, 26 | top:"82%" 27 | }, this.tipsHide); 28 | clearTimeout(this.timeout); 29 | this.timeout = !d && setTimeout(function() { 30 | xcsoft._hide() 31 | }, c) 32 | }; 33 | xcsoft._hide = function() { 34 | this.dom.stop().animate({ 35 | left: "-" + xcsoft.tipsCss.height 36 | }, this.tipsHide, "", function() { 37 | $(this).remove() 38 | }) 39 | }; 40 | xcsoft.tipsHtml = function(b, c) { 41 | var a = $(".xctips"); 42 | c = c || "info"; 43 | 0 == a.length ? (a = document.createElement("div"), a.className = "xctips " + c, this.dom = $(a), this.dom.css(this.tipsCss), a.style.left = "-" + this.tipsCss.height, a.style.height = this.tipsCss.height, a.style.lineHeight = this.tipsCss.height, a.innerHTML = b, $("body").append(this.dom)) : (a.html(b), a.attr("class", "xctips " + c), this.dom = a) 44 | }; -------------------------------------------------------------------------------- /templates/player/p2p-media-loader/images/line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2p-media-loader/images/line.png -------------------------------------------------------------------------------- /templates/player/p2p-media-loader/images/list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2p-media-loader/images/list.png -------------------------------------------------------------------------------- /templates/player/p2p-media-loader/images/loading_pc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2p-media-loader/images/loading_pc.jpg -------------------------------------------------------------------------------- /templates/player/p2p-media-loader/images/loading_wap.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2p-media-loader/images/loading_wap.gif -------------------------------------------------------------------------------- /templates/player/p2p-media-loader/images/loading_wapx.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2p-media-loader/images/loading_wapx.gif -------------------------------------------------------------------------------- /templates/player/p2p-media-loader/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2p-media-loader/images/logo.png -------------------------------------------------------------------------------- /templates/player/p2p-media-loader/images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2p-media-loader/images/next.png -------------------------------------------------------------------------------- /templates/player/p2p-media-loader/images/pront.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2p-media-loader/images/pront.png -------------------------------------------------------------------------------- /templates/player/p2p-media-loader/p2p-media-loader-servers.js: -------------------------------------------------------------------------------- 1 | !function(e) { 2 | // 在线查看流量使用情况: https://klink.tech/ 3 | this.trackerAnnounce = [ 4 | // "wss://signal.hitv.com", 5 | // "wss://tracker.openwebtorrent.com", 6 | // "wss://tracker.files.fm:7073", 7 | // "ws://tracker.files.fm:7072", 8 | // "wss://open.tube:443/tracker/socket", 9 | // "ws://tracker.sloppyta.co", 10 | "wss://tracker.fastcast.nz", 11 | "wss://peertube.cpy.re", 12 | // BT Tracker 服务器列表 13 | "wss://peertube.cpy.re:443/tracker/socket", 14 | "ws://tracker.files.fm:7072/announce", 15 | "ws://tracker.nighthawk.pw:4201/announce", 16 | ] 17 | }(this); -------------------------------------------------------------------------------- /templates/player/p2phls/loading_pc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2phls/loading_pc.jpg -------------------------------------------------------------------------------- /templates/player/p2pplayer/images/line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2pplayer/images/line.png -------------------------------------------------------------------------------- /templates/player/p2pplayer/images/list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2pplayer/images/list.png -------------------------------------------------------------------------------- /templates/player/p2pplayer/images/loading_pc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2pplayer/images/loading_pc.jpg -------------------------------------------------------------------------------- /templates/player/p2pplayer/images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2pplayer/images/next.png -------------------------------------------------------------------------------- /templates/player/p2pplayer/images/pront.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/templates/player/p2pplayer/images/pront.png -------------------------------------------------------------------------------- /test/yzm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/test/yzm.png -------------------------------------------------------------------------------- /test/yzm1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/test/yzm1.png -------------------------------------------------------------------------------- /test/测试.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : 测试.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/8/28 6 | 7 | import re 8 | from urllib.parse import quote,unquote 9 | txt = 'var player_aaaa={"flag":"play","encrypt":3,"trysee":0,"points":0,"link":"\/vodplay\/44640-1-1.html","link_next":"","link_pre":"","url":"Zd2fZg56c6y10828ZDRiNzZjNzk1Y2E3OWQzNmQzYWEyM2IwODM0ZjM3MgO0O0OO0O0O","url_next":"d","from":"vip","server":"no","note":"","id":"44640","sid":1,"nid":1}' 10 | ret = re.search('var player_(.*?)=(.*?)<',txt,re.M|re.I) 11 | print(ret) 12 | 13 | def encodeStr(input, encoding='GBK'): 14 | """ 15 | 指定字符串编码 16 | :param input: 17 | :param encoding: 18 | :return: 19 | """ 20 | return quote(input.encode(encoding, 'ignore')) 21 | 22 | def lazyParse(input,jsp,getParse,saveParse,headers,encoding): 23 | pass 24 | str1 = '星' 25 | key = str1.encode('gb2312','ignore') 26 | print(quote(key)) 27 | print(quote(str1)) 28 | # print(str1.decode('utf-8',)) 29 | # str_gbk = str1.encode("gbk",ignore=True).strip() 30 | # print("转码结果:"+repr(str_gbk)) 31 | # print( unquote('%D0%C7','GBK')) 32 | print(encodeStr('星','utf-8')) 33 | print(encodeStr('斗罗大陆','gbk')) # %B6%B7%C2%DE%B4%F3%C2%BD -------------------------------------------------------------------------------- /txt/help.txt: -------------------------------------------------------------------------------- 1 | service supervisord start #启动,默认配置文件 2 | service supervisord stop #停止 3 | service supervisord status #状态 4 | supervisorctl shutdown #关闭所有任务 5 | supervisorctl stop|start program_name #启动或停止服务 6 | supervisorctl status #查看所有任务状态 7 | kill -9 $(cat supervisord.pid) # 杀掉进程 8 | supervisord -c manager.conf # 启动服务 9 | echo_supervisord_conf > ./cmd.conf #输出配置 -------------------------------------------------------------------------------- /txt/hipy/base_spider.json: -------------------------------------------------------------------------------- 1 | {"分类1": [{"key": "letter", "name": "首字母", "value": [{"n": "A", "v": "A"}, {"n": "B", "v": "B"}]}], "分类2": [{"key": "letter", "name": "首字母", "value": [{"n": "A", "v": "A"}, {"n": "B", "v": "B"}]}, {"key": "year", "name": "年份", "value": [{"n": "2024", "v": "2024"}, {"n": "2023", "v": "2023"}]}]} -------------------------------------------------------------------------------- /txt/hipy/bidi.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/txt/hipy/bidi.jar -------------------------------------------------------------------------------- /txt/hipy/test_1.txt: -------------------------------------------------------------------------------- 1 | [{'key':'你好', 2 | 'value':'这是一串代码', 3 | 'tip':'可能会有注释','a':true,"b":None,"c":null,'d':True}] 4 | // 单行注释 5 | # 单行注释 6 | 7 | /* 8 | 9 | 10 | 多行注释 11 | */ 12 | 13 | """ 14 | 15 | 多行注释 16 | """ 17 | 18 | 19 | ''' 20 | 多行注释 21 | 22 | ''' -------------------------------------------------------------------------------- /txt/jar/0906.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/txt/jar/0906.jar -------------------------------------------------------------------------------- /txt/jar/spiders.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/txt/jar/spiders.zip -------------------------------------------------------------------------------- /txt/js/18/18av.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'18av', 3 | host:'https://maa1812.com', 4 | url:'/zh/fyclass/all/fypage.html', 5 | headers:{ 6 | 'User-Agent':'MOBILE_UA' 7 | }, 8 | timeout:5000, 9 | class_name:'最近更新',//静态分类名称拼接 10 | class_url:'chinese_list',//静态分类标识拼接 11 | //class_parse:'ul.animenu__nav&&li;a&&Text;a&&href', 12 | limit:5, 13 | play_parse:true, 14 | lazy:'', 15 | 一级:'.posts&&.video_9s;h3&&Text;img&&src;.meta&&Text;a&&href', 16 | 二级:'*', 17 | } -------------------------------------------------------------------------------- /txt/js/18/Missav.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'Missav', 3 | host:'https://missav.com', 4 | searchUrl:'/cn/search/**', 5 | url:'/cn/fyclass?page=fypage', 6 | headers:{ 7 | 'User-Agent':'MOBILE_UA' 8 | }, 9 | timeout:5000, 10 | class_name:'最近更新&新作上市&无码流出&SIRO&LUXU&GANA&PRESTIGE&S-CUTE&ARA&FC2&麻豆传媒&本月热门',//静态分类名称拼接 11 | class_url:'new&release&uncensored-leak&siro&luxu&gana&maan&scute&ara&fc2&madou&monthly-hot',//静态分类标识拼接 12 | limit:5, 13 | play_parse:true, 14 | lazy:'', 15 | 一级:'.grid.grid-cols-2 div&&a;.lozad.w-full&&alt;.lozad.w-full&&data-src;.absolute.bottom-1&&Text;a&&href', 16 | 二级:'*', 17 | 搜索:'.grid.grid-cols-2 div&&a;.lozad.w-full&&alt;.lozad.w-full&&data-src;.absolute.bottom-1&&Text;a&&href', 18 | searchable:1,//是否启用全局搜索, 19 | quickSearch:1,//是否启用快速搜索, 20 | filterable:0,//是否启用分类筛选, 21 | } 22 | 23 | -------------------------------------------------------------------------------- /txt/js/18/banan.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'banan', 3 | host:'https://banan.tv', 4 | url:'/vodtype/fyclass-fypage.html', 5 | headers:{ 6 | 'User-Agent':'MOBILE_UA' 7 | }, 8 | timeout:5000, 9 | class_name:'探花&91大神&素人&国产&高清&FC2',//静态分类名称拼接 10 | class_url:'57&23&63&25&22&28',//静态分类标识拼接 11 | //class_parse:'ul.navbar-nav&&li:gt(1):lt(6);a&&Text;a&&href', 12 | limit:5, 13 | play_parse:true, 14 | lazy:'', 15 | 一级:'.img-box.cover-md&&a;img&&alt;img&&data-src;.grid_date&&Text;a&&href', 16 | 二级:'*', 17 | 18 | } 19 | 20 | -------------------------------------------------------------------------------- /txt/js/18/养端.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'养端', 3 | host:'https://aaq48.com:33666', 4 | homeUrl:'/home/index.html', 5 | url:'/home/vodlist/38/fyclass-fypage.html', 6 | headers:{ 7 | 'User-Agent':'MOBILE_UA' 8 | }, 9 | searchable:0, 10 | quickSearch:0, 11 | timeout:5000, 12 | class_parse:'.menu&&dl&ⅆa&&Text;a&&href;.*/(.*?)-', 13 | limit:5, 14 | play_parse:true, 15 | lazy:'', 16 | 一级:'.channel-list&&dl;h3&&Text;img&&data-original;font&&Text;a&&href', 17 | 二级:'*', 18 | } -------------------------------------------------------------------------------- /txt/js/18/吸瓜.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'吸瓜', 3 | host:'https://xgsp.tv', 4 | // homeUrl:'', 5 | url:'/list/?fyclass-fypage.html', 6 | headers:{ 7 | 'User-Agent':'MOBILE_UA' 8 | }, 9 | searchable:0, 10 | quickSearch:0, 11 | timeout:5000, 12 | class_parse:'.wap-roll&&li;a&&Text;a&&href;(\\d+).html', 13 | cate_exclude:'独家', 14 | limit:5, 15 | play_parse:true, 16 | lazy:'js:let html=request(input);let a=html.match(/var now="(.*?)"/)[1];input=a', 17 | 推荐:'ul.row.row-space7.row-m-space7.tx-column-5.tx-column-m-2;li;a&&title;img&&src;.ico-right&&Text;a&&href', 18 | double:true, 19 | 一级:'.tx-column-m-2.mb20&&li;h2&&Text;img&&src;.ico-right&&Text;a&&href', 20 | 二级:'*', 21 | } -------------------------------------------------------------------------------- /txt/js/18/朱古力.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'朱古力', 3 | host:'https://pigav.com', 4 | url:'/fyclass/page/fypage', 5 | headers:{ 6 | 'User-Agent':'MOBILE_UA' 7 | }, 8 | timeout:5000, 9 | class_name:'最新&熱門&每日&精選',//静态分类名称拼接 10 | class_url:'最新av線上看&熱門av線上看&每日av線上看線上看&精選av線上看',//静态分类标识拼接 11 | limit:5, 12 | play_parse:true, 13 | lazy:'', 14 | 一级:'.l-post div&&a;a&&title;span&&data-bgsrc;.absolute.bottom-1&&Text;a&&href', 15 | 二级:'*', 16 | } 17 | 18 | -------------------------------------------------------------------------------- /txt/js/18/玩偶姐姐.js: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'玩偶姐姐', 3 | host:'https://hongkongdollvideo.com', 4 | homeUrl:'/latest/', 5 | url:'/fyclass/fypage.html[/fyclass/]', 6 | headers:{ 7 | 'User-Agent':'MOBILE_UA' 8 | }, 9 | searchable:0, 10 | quickSearch:0, 11 | timeout:5000, 12 | class_parse:'#side-menu:lt(1) li;a&&Text;a&&href;com/(.*?)/', 13 | limit:5, 14 | play_parse:true, 15 | lazy:'', 16 | 一级:'.col-sm-6;h3&&Text;img&&data-src;.date&&Text;a&&href', 17 | 二级:'*', 18 | } -------------------------------------------------------------------------------- /txt/js/tg/MXONE.jsd: -------------------------------------------------------------------------------- 1 | var rule = Object.assign(muban.mxpro,{ 2 | title:'MXONE', 3 | host:'https://www.jpys.me', 4 | url:'vodshow/fyclass--------fypage---.html', 5 | searchUrl:'/vodsearch/**----------fypage---.html/', 6 | class_name:'电影&电视剧&动漫&综艺', 7 | class_url:'1&2&3&4', 8 | class_parse:'', 9 | }); -------------------------------------------------------------------------------- /txt/js/tg/两个BT.jsd: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'两个BT', 3 | host:'https://www.bttwoo.com', 4 | // homeUrl:'/', 5 | url:'/fyclass/page/fypage', 6 | searchUrl:'/xssearch?q=**', 7 | searchable:0, 8 | quickSearch:0, 9 | headers:{ 10 | 'User-Agent':'UC_UA' 11 | }, 12 | timeout:5000, 13 | class_name:'最新电影&国产剧&美剧&日韩剧',//静态分类名称拼接 14 | class_url:'new-movie&zgjun&meiju&jpsrtv',//静态分类标识拼接 15 | class_parse:'', 16 | play_parse:true, 17 | lazy:'', 18 | limit:5, 19 | 推荐:'.leibox;li;.lazy&&alt;.thumb.lazy&&data-original;.jidi span&&Text;a&&href', 20 | double:true, // 推荐内容是否双层定位 21 | 一级:'.bt_img li;.lazy&&alt;.thumb.lazy&&data-original;.jidi span&&Text;a&&href', 22 | 23 | 二级:{"title":".moviedteail_tt h1&&Text","img":".dyimg.fl img&&src","desc":".cr3.starLink&&Text","content":".yp_context&&Text","tabs":".ypxingq_t:eq(1) span","lists":".paly_list_btn:eq(#id) a"}, 24 | 搜索:'*', 25 | 26 | } 27 | -------------------------------------------------------------------------------- /txt/js/tg/剧迷.jsd: -------------------------------------------------------------------------------- 1 | muban.首图.二级.tabs = '.myui-panel__head.bottom-line h3'; 2 | var rule = Object.assign(muban.首图,{ 3 | title:'剧迷', 4 | host:'https://gmtv1.xyz', 5 | url:'/genre/fyclass---fypage.html', 6 | searchUrl:'/search/-------------.html?wd=*&submit=', 7 | class_name:'电视剧&电影&综艺&动漫',//静态分类名称拼接 8 | class_url:'2&1&3&4',//静态分类标识拼接 9 | class_parse:'', 10 | 一级:'.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href', 11 | }); 12 | -------------------------------------------------------------------------------- /txt/js/tg/天空影视.jsd: -------------------------------------------------------------------------------- 1 | var rule = Object.assign(muban.首图,{ 2 | title:'天空影视', 3 | host:'https://www.tkys6.com', 4 | url:'/vodshow/id/fyclass/page/fypage.html', 5 | searchUrl:'/search/-------------.html?wd=*&submit=', 6 | //class_name:'电视剧&电影&综艺&动漫&blbl',//静态分类名称拼接 7 | //class_url:'2&1&3&4&29',//静态分类标识拼接 8 | class_parse:'.myui-header__menu li.hidden-sm:gt(0):lt(8);a&&Text;a&&href;/(\\d+).html', 9 | }); 10 | -------------------------------------------------------------------------------- /txt/js/tg/快云影院.jsd: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'快云', 3 | host:'https://kuaiyunyy.com', 4 | // homeUrl:'/', 5 | url:'/index.php/vod/show/id/fyclass/page/fypage.html', 6 | //searchUrl:'/vodsearch/**----------fypage---.html', 7 | searchable:0,//是否启用全局搜索, 8 | quickSearch:0,//是否启用快速搜索, 9 | filterable:0,//是否启用分类筛选, 10 | headers:{//网站的请求头,完整支持所有的,常带ua和cookies 11 | 'User-Agent':'MOBILE_UA', 12 | // "Cookie": "searchneed=ok" 13 | }, 14 | class_parse:'.nav-menu-items&&li;a&&title;a&&href;/(\\d+).html', 15 | cate_exclude:'直播|足球', 16 | play_parse:true, 17 | lazy:'', 18 | limit:8, 19 | 推荐:'.module-items;.module-item-cover&&.module-item-pic;a&&title;.lazyloaded&&data-src;.item-text&&Text;a&&href', 20 | double:true, // 推荐内容是否双层定位 21 | 一级:'.module-list&&.module-item-pic;a&&title;.lazyloaded&&data-src;.module-item-text&&Text;a&&href', 22 | 二级:{"title":"h1.page-title&&Text;.video-info-aux&&Text","img":".lazyload&&data-src","content":".content.vod_content&&Text","tabs":".module-tab-item.tab-item","lists":".module-blocklist.scroll-box:eq(#id) a"}, 23 | 24 | } 25 | -------------------------------------------------------------------------------- /txt/js/tg/爱看电影.jsd: -------------------------------------------------------------------------------- 1 | var rule = { 2 | title:'爱看', 3 | host:'https://ikandy.fun', 4 | // homeUrl:'/', 5 | url:'/vodtype/fyclass-fypage/', 6 | //searchUrl:'/vodsearch/**----------fypage---.html', 7 | searchable:0,//是否启用全局搜索, 8 | quickSearch:0,//是否启用快速搜索, 9 | filterable:0,//是否启用分类筛选, 10 | headers:{//网站的请求头,完整支持所有的,常带ua和cookies 11 | 'User-Agent':'MOBILE_UA', 12 | // "Cookie": "searchneed=ok" 13 | }, 14 | class_parse:'.stui-header__menu li.hidden-xs;a&&Text;a&&href;/(\\d+)/', 15 | play_parse:true, 16 | lazy:'', 17 | limit:8, 18 | 推荐:'.stui-vodlist.clearfix;.stui-vodlist__box;a&&title;a&&data-original;.pic-text&&Text;a&&href', 19 | double:true, // 推荐内容是否双层定位 20 | 一级:'.stui-vodlist.clearfix li;a&&title;a&&data-original;.pic-text&&Text;a&&href', 21 | 二级:{"title":"h1.title&&Text;.stui-content__detail p:eq(0)&&Text","img":".lazyload&&src","content":".stui-content__detail p:eq(4)&&Text","tabs":".playlist.mb h3.title","lists":".stui-content__playlist:eq(#id) li"}, 22 | 23 | } 24 | -------------------------------------------------------------------------------- /txt/js/tg/特狗影视.jsd: -------------------------------------------------------------------------------- 1 | var rule = Object.assign(muban.首图,{ 2 | title:'特狗', 3 | host:'https://www.tegouys.com', 4 | url:'/vodshow/id/fyclass/page/fypage.html', 5 | searchUrl:'/search/-------------.html?wd=*&submit=', 6 | //class_name:'电视剧&电影&综艺&动漫',//静态分类名称拼接 7 | //class_url:'2&1&3&4',//静态分类标识拼接 8 | class_parse:'.myui-header__menu li.hidden-sm:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html', 9 | 10 | }); 11 | -------------------------------------------------------------------------------- /txt/js/tg/皮皮泡.jsd: -------------------------------------------------------------------------------- 1 | muban.首图2.二级.tabs = '.stui-pannel__head.bottom-line.active.clearfix h3'; 2 | var rule = Object.assign(muban.首图2,{ 3 | title:'皮皮泡', 4 | host:'https://www.pipipao.com', 5 | url:'/vodshow/id/fyclass/page/fypage.html', 6 | searchUrl:'/vodsearch**/page/fypage.html', 7 | class_name:'电视剧&电影&综艺&动漫&纪录片',//静态分类名称拼接 8 | class_url:'dianshiju&dianying&zongyi&dongman&jilupian',//静态分类标识拼接 9 | class_parse:' ', 10 | 搜索:'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text', 11 | }); -------------------------------------------------------------------------------- /txt/js/tg/胖虎影视.jsd: -------------------------------------------------------------------------------- 1 | var rule = Object.assign(muban.mxpro,{ 2 | title:'胖虎影视.', 3 | host:'http://panghuys.com', 4 | url:'/vodshow/fyclass/page/fypage.html', 5 | searchUrl:'/search-**----------fypage---/', 6 | class_parse:'.navbar-items li:gt(1):lt(7);a&&Text;a&&href;/(\\d+).html', 7 | }); 8 | -------------------------------------------------------------------------------- /txt/json/alist.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "🙋丫仙女", 4 | "server": "http://alist.xiaoya.pro/", 5 | "startPage": "/", 6 | "showAll": false, 7 | "search": true, 8 | "headers": { 9 | "Authorization": "" 10 | }, 11 | "params": { 12 | "/abc": { 13 | "password": "123" 14 | }, 15 | "/abc/abc": { 16 | "password": "123" 17 | } 18 | } 19 | }, 20 | { 21 | "name": "🐋一只鱼", 22 | "server": "https://alist.youte.ml" 23 | }, 24 | { 25 | "name": "🌊七米蓝", 26 | "server": "https://al.chirmyram.com" 27 | }, 28 | { 29 | "name": "🐉神族九帝", 30 | "server": "https://alist.shenzjd.com" 31 | }, 32 | { 33 | "name": "☃️姬路白雪", 34 | "server": "https://pan.jlbx.xyz" 35 | }, 36 | { 37 | "name": "✨星梦", 38 | "server": "https://pan.bashroot.top" 39 | }, 40 | { 41 | "name": "💢repl", 42 | "server": "https://ali.liucn.repl.co" 43 | }, 44 | { 45 | "name": "💦讯维云盘", 46 | "server": "https://pan.xwbeta.com" 47 | } 48 | ] 49 | -------------------------------------------------------------------------------- /txt/json/live2mv_data.json: -------------------------------------------------------------------------------- 1 | [ 2 | {"name": "甜蜜", "url": "http://zdir.kebedd69.repl.co/public/live.txt"}, 3 | {"name": "俊于", "url": "http://home.jundie.top:81/Cat/tv/live.txt"}, 4 | {"name": "菜妮丝", "url": "http://xn--ihqu10cn4c.xn--z7x900a.love:63/TV/tvzb.txt"}, 5 | {"name": "布里m3u", "url": "http://jiexi.bulisite.top/m3u.php"}, 6 | {"name": "吾爱", "url": "http://52bsj.vip:81/api/v3/file/get/763/live.txt?sign=87BTGT1_6AOry7FPwy_uuxFTv2Wcb9aDMj46rDdRTD8%3D%3A0"}, 7 | {"name": "饭太硬", "url": "http://ftyyy.tk/live.txt"} 8 | ] 9 | -------------------------------------------------------------------------------- /txt/json/sniffer.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "host": "https://www.ikandy.fun", 3 | "manual": "1", 4 | "format": ".mp4#.m3u8#.flv", 5 | "filters": ".html#=http" 6 | },{ 7 | "host": "https://czspp.com", 8 | "manual": "1", 9 | "format": ".mp4#.m3u8#.flv", 10 | "filters": ".html#=http" 11 | },{ 12 | "host": "yanetflix.com", 13 | "manual": "1", 14 | "format": ".mp4#.m3u8#.flv", 15 | "filters": ".html#=http" 16 | }] -------------------------------------------------------------------------------- /txt/libs.txt: -------------------------------------------------------------------------------- 1 | gevent-websocket 2 | PyExecJS 3 | ddddocr 4 | asgiref ; python_version >= '3.6' 5 | parsel # 不知道对比pyquery性能如何,也是css选择器,不好封装成pdfa 6 | netifaces # arm64装不上 -------------------------------------------------------------------------------- /txt/muban/adb调试相关.bash: -------------------------------------------------------------------------------- 1 | # 需要cmder 2 | adb connect 192.168.10.192 3 | adb devices -l 4 | adb logcat -c 5 | adb logcat | grep -i QuickJS -------------------------------------------------------------------------------- /txt/muban/nodejs_urljoin.js: -------------------------------------------------------------------------------- 1 | const url = require('url'); 2 | let a = url.resolve('http://example.com/one', '/two'); 3 | let b = url.resolve('http://example.com/one', 'http://www.baidu.com'); 4 | console.log(a); 5 | console.log(b); -------------------------------------------------------------------------------- /txt/muban/海阔urljoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/txt/muban/海阔urljoin.png -------------------------------------------------------------------------------- /txt/supervisord.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Supervisor daemon 3 | 4 | [Service] 5 | Type=forking 6 | ExecStart=/usr/bin/supervisord -c /root/sd/pywork/dr_py/manager.conf # 启动命令 7 | ExecStop=/usr/bin/supervisorctl shutdown # 停止程序的命令 8 | ExecReload=/usr/bin/supervisorctl reload # 重启进程的命令 9 | KillMode=process 10 | Restart=on-failure 11 | RestartSec=42s 12 | 13 | [Install] 14 | WantedBy=multi-user.target -------------------------------------------------------------------------------- /utils/cfg.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : cfg.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/10 6 | 7 | from werkzeug.utils import import_string 8 | from base import config 9 | from easydict import EasyDict as edict 10 | 11 | def get_conf(obj): 12 | new_conf = {} 13 | if isinstance(obj, str): 14 | obj = import_string(obj) 15 | for key in dir(obj): 16 | if key.isupper(): 17 | new_conf[key] = getattr(obj, key) 18 | return new_conf 19 | 20 | cfg = edict(get_conf(config)) -------------------------------------------------------------------------------- /utils/env.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : env.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/11/21 6 | 7 | from utils.cfg import cfg 8 | import ujson 9 | from controllers.service import storage_service 10 | 11 | def get_env(): 12 | new_conf = cfg 13 | lsg = storage_service() 14 | store_conf_dict = lsg.getStoreConfDict() 15 | new_conf.update(store_conf_dict) 16 | # print(new_conf) 17 | env = { 18 | 'ali_token': new_conf.ALI_TOKEN, 19 | 'js_proxy':new_conf.JS_PROXY, 20 | 'fl':'{{fl}}' # 防止被依赖代理 21 | } 22 | ENV = new_conf.ENV.strip() 23 | if ENV: 24 | # print(ENV) 25 | try: 26 | ENV = ujson.loads(ENV) 27 | except Exception as e: 28 | print(f'自定义环境变量有误,不是合法json:{e}') 29 | ENV = {} 30 | if ENV: 31 | env.update(ENV) 32 | # print(env) 33 | return env 34 | 35 | def update_env(env_key:str,env_value:str): 36 | lsg = storage_service() 37 | env = lsg.getItem('ENV') 38 | ENV = {} 39 | try: 40 | ENV = ujson.loads(env) 41 | except: 42 | env = '{}' 43 | if env_key: 44 | ENV[env_key] = env_value 45 | new_env = ujson.dumps(ENV,ensure_ascii=False) 46 | print(new_env) 47 | lsg.setItem('ENV',new_env) 48 | return ENV -------------------------------------------------------------------------------- /utils/error.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : error.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/8/25 6 | 7 | def failed(msg): 8 | return { 9 | 'msg':msg, 10 | 'code':404, 11 | } 12 | 13 | def success(msg): 14 | return { 15 | 'msg':msg, 16 | 'code':200, 17 | } -------------------------------------------------------------------------------- /utils/render.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : render.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2023/4/19 6 | 7 | import re 8 | from jinja2 import Environment, Template 9 | 10 | 11 | def to_lower_camel_case(x): 12 | """转小驼峰法命名:下划线转驼峰且首字母小写""" 13 | s = re.sub('_([a-zA-Z])', lambda m: (m.group(1).upper()), x) 14 | return s[0].lower() + s[1:] 15 | 16 | 17 | def render_template_string(source: str, **context): 18 | # 构造环境 19 | env = Environment() 20 | # 添加一个过滤器 21 | env.filters['to_lower_camel_case'] = to_lower_camel_case 22 | # 获取模板 23 | template: Template = env.from_string(source) 24 | # 渲染 25 | view = template.render(**context) 26 | return view 27 | -------------------------------------------------------------------------------- /utils/ua.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # File : ua.py 4 | # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ 5 | # Date : 2022/9/19 6 | from time import time 7 | 8 | MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36' 9 | PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36' 10 | UA = 'Mozilla/5.0' 11 | UC_UA = 'Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36' 12 | IOS_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1' 13 | headers = { 14 | 'Referer': 'https://www.baidu.com', 15 | 'user-agent': UA, 16 | } 17 | 18 | def get_interval(t): 19 | interval = time() - t 20 | interval = round(interval*1000,2) 21 | return interval 22 | 23 | def getHeaders(url): 24 | headers = {} 25 | if url: 26 | headers["Referer"] = url 27 | headers["User-Agent"] = UA 28 | # headers.setdefault("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9") 29 | # headers.setdefault("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2") 30 | return headers -------------------------------------------------------------------------------- /whl/gevent-21.12.0-cp37-cp37m-linux_armv7l.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/whl/gevent-21.12.0-cp37-cp37m-linux_armv7l.whl -------------------------------------------------------------------------------- /whl/gevent-21.12.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/whl/gevent-21.12.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -------------------------------------------------------------------------------- /whl/quickjs-1.19.2-cp37-cp37m-linux_armv7l.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/whl/quickjs-1.19.2-cp37-cp37m-linux_armv7l.whl -------------------------------------------------------------------------------- /zhengban/AcFun.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import re 3 | import json 4 | 5 | 6 | class AcFun: 7 | def __init__(self, url): 8 | self.url = url 9 | self.headers = { 10 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬" 11 | } 12 | 13 | def start(self): 14 | res = requests.get(self.url, headers=self.headers) 15 | json_info = json.loads(re.findall("window.pageInfo =(.*?);", res.text)[0].split("=", 1)[-1].strip()) 16 | print(json_info) 17 | return json_info 18 | 19 | 20 | if __name__ == '__main__': 21 | AcFun().start() 22 | -------------------------------------------------------------------------------- /zhengban/DouYu.py: -------------------------------------------------------------------------------- 1 | import execjs 2 | import requests 3 | import re 4 | import time 5 | 6 | 7 | class DouYu: 8 | def __init__(self, room_id): 9 | self.room_id = room_id 10 | self.int_time = int(time.time()) 11 | self.did = "3966acse00dd10qer895bdca00031601" 12 | 13 | def get_ub98484234(self): 14 | res = requests.get(f"https://www.douyu.com/{self.room_id}").text 15 | ub98484234 = re.findall("(function ub98484234.*?})var", res)[0] 16 | var = re.findall("var\sv\s=\s(.*?)[.]slice", ub98484234)[0] 17 | var1 = re.findall(f"(var {var}=.*?);", res)[0] 18 | return f"var CryptoJS = require('crypto-js');{var1};{ub98484234}" 19 | 20 | def get_sign(self): 21 | js = execjs.compile(self.get_ub98484234()) 22 | res = js.call("ub98484234", self.room_id, self.did, self.int_time) 23 | return res.split("sign=")[-1] 24 | 25 | def get_params(self): 26 | return { 27 | 'v': f'2201{time.strftime("%Y%m%d", time.localtime())}', 28 | 'did': self.did, 29 | 'tt': self.int_time, 30 | 'sign': self.get_sign(), 31 | 'cdn': "tct-h5", 32 | 'rate': '0', 33 | 'ver': 'Douyu_221041305', 34 | 'iar': '0', 35 | 'ive': '1', 36 | 'hevc': '0', 37 | 'fa': '1', 38 | } 39 | 40 | def start(self): 41 | res = requests.post(f"https://www.douyu.com/lapi/live/getH5Play/{self.room_id}", data=self.get_params()).json() 42 | print(res) 43 | 44 | 45 | if __name__ == '__main__': 46 | DouYu().start() 47 | -------------------------------------------------------------------------------- /zhengban/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright © 2021 jym66 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /zhengban/bilibili.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import re 3 | 4 | 5 | class Bili: 6 | def __init__(self, url): 7 | self.url = url 8 | self.headers = { 9 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬" 10 | } 11 | 12 | def start(self): 13 | res = requests.get(self.url) 14 | result = re.findall("window.__playinfo__=(.*?)", res.text) 15 | print(result[0]) 16 | return result[0] 17 | 18 | 19 | if __name__ == '__main__': 20 | Bili().start() 21 | -------------------------------------------------------------------------------- /zhengban/douyin.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | 4 | class DouYin: 5 | def __init__(self, url): 6 | self.url = url 7 | self.headers = { 8 | 9 | "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) " 10 | "Chrome/89.0.4389.114 Safari/537.36 " 11 | } 12 | 13 | def get_mid(self): 14 | res = requests.get(self.url, headers=self.headers) 15 | return res.url.split("/", 6)[-2] 16 | 17 | def start(self): 18 | url = f"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={self.get_mid()}" 19 | res = requests.get(url, headers=self.headers) 20 | print(res.json()) 21 | return res.json() 22 | 23 | 24 | if __name__ == '__main__': 25 | DouYin().start() 26 | -------------------------------------------------------------------------------- /zhengban/douyin_live.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import re 3 | 4 | 5 | class douYinLive: 6 | def __init__(self, url): 7 | self.url = url 8 | self.headers = { 9 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬" 10 | } 11 | 12 | def parse(self, html): 13 | return re.findall('flv_pull_url":(.*?})', html)[0] 14 | 15 | def start(self): 16 | res = requests.get(self.url, headers=self.headers) 17 | print(self.parse(res.text)) 18 | 19 | 20 | if __name__ == '__main__': 21 | douYinLive().start() 22 | -------------------------------------------------------------------------------- /zhengban/haokan.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import re 3 | import json 4 | 5 | 6 | class haokan: 7 | def __init__(self, url): 8 | self.url = url 9 | self.headers = { 10 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬", 11 | } 12 | 13 | def getJson(self, text): 14 | res = re.findall("PRELOADED_STATE__\s=\s(.*?);", text)[0] 15 | res = json.loads(res) 16 | return res 17 | 18 | def start(self): 19 | res = requests.get(self.url, headers=self.headers).text 20 | return self.getJson(res) 21 | 22 | 23 | if __name__ == '__main__': 24 | haokan().start() 25 | -------------------------------------------------------------------------------- /zhengban/huya.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import re 3 | from base64 import b64decode 4 | import json 5 | 6 | 7 | class huya: 8 | def __init__(self, url): 9 | self.url = url 10 | 11 | def decodeStream(self, stream): 12 | return b64decode(stream).decode() 13 | 14 | def start(self): 15 | res = requests.get(self.url).text 16 | hyplay = re.findall('hyPlayerConfig\s=\s(.*?});', res, re.S) 17 | stream = json.loads(self.decodeStream(eval(hyplay[0])['stream']).replace("amp;", "")) 18 | print(stream) 19 | return stream 20 | 21 | 22 | if __name__ == '__main__': 23 | huya().start() 24 | -------------------------------------------------------------------------------- /zhengban/js/tx-ckey.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kingfren/dr_py/ca23ffdbf5e429c5893ac60158668fc5af7af192/zhengban/js/tx-ckey.wasm -------------------------------------------------------------------------------- /zhengban/ke_qq.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import re 3 | 4 | 5 | class KeQq: 6 | def __init__(self, url): 7 | self.url = url 8 | self.headers = { 9 | "Referer": "https://ke.qq.com/", 10 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬", 11 | "Cookie": "" 12 | } 13 | self.taid = re.findall("taid=(\d+)", self.url)[0] 14 | self.vid = "" 15 | 16 | def getParams(self): 17 | vid = re.findall("vid=(\d+)", self.url) 18 | if vid: 19 | return self.url.split("#")[0].split("/")[-1], vid[0] 20 | html = requests.get(self.url, headers=self.headers) 21 | params = re.findall(f"data-tid=(\d+)\sdata-taid={self.taid}\sdata-vid=(\d+)", html.text) 22 | return params[0] 23 | 24 | def getSign(self): 25 | term_id, fileId = self.getParams() 26 | self.vid = fileId 27 | res = requests.get("https://ke.qq.com/cgi-bin/qcloud/get_token", params={"term_id": term_id, "fileId": fileId}, 28 | headers=self.headers).json() 29 | return res["result"] 30 | 31 | def start(self): 32 | params = self.getSign() 33 | res = requests.get(f"https://playvideo.qcloud.com/getplayinfo/v2/1258712167/{self.vid}", 34 | params=params, headers=self.headers) 35 | print(res.text) 36 | return res.json() 37 | 38 | 39 | if __name__ == '__main__': 40 | KeQq("").start() 41 | -------------------------------------------------------------------------------- /zhengban/kuaishou.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import re 3 | 4 | 5 | class kuaishou: 6 | def __init__(self, url): 7 | self.url = url 8 | self.headers = { 9 | "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36", 10 | "Referer": self.url 11 | } 12 | 13 | def start(self): 14 | json_data = requests.get(self.url, headers=self.headers, allow_redirects=True).text 15 | res = re.findall('type="video/mp4" src="(.*?)"', json_data)[0] 16 | print(res) 17 | return res 18 | 19 | 20 | if __name__ == '__main__': 21 | kuaishou().start() 22 | -------------------------------------------------------------------------------- /zhengban/kugou.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | 4 | class KuGou: 5 | def __init__(self, url): 6 | self.url = url 7 | self.headers = { 8 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬" 9 | } 10 | self.base = url.split("#")[-1].split("&") 11 | self.hash = self.base[0].split("=")[-1] 12 | self.album_id = self.base[1].split("=")[-1] 13 | 14 | def start(self): 15 | params = { 16 | "r": "play/getdata", 17 | "hash": self.hash, 18 | "album_id": self.album_id, 19 | "mid": "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456" 20 | } 21 | res = requests.get("https://wwwapi.kugou.com/yy/index.php?", params=params, headers=self.headers) 22 | print(res.json()) 23 | return res.json() 24 | 25 | 26 | if __name__ == '__main__': 27 | KuGou().start() 28 | -------------------------------------------------------------------------------- /zhengban/sohu.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | import re 4 | 5 | 6 | class sohu: 7 | def __init__(self, url): 8 | self.url = url 9 | self.headers = { 10 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬" 11 | } 12 | 13 | def get_vid(self): 14 | res = requests.get(self.url, headers=self.headers) 15 | vid = re.findall('var vid="(\d+)";', res.text) 16 | if len(vid) > 0: 17 | return vid[0] 18 | return re.findall('data-vid="(\d+)"', res.text)[0] 19 | 20 | def start(self): 21 | params = { 22 | "vid": self.get_vid(), 23 | "ver": "21", 24 | "ssl": "1", 25 | "pflag": "pch5", 26 | } 27 | res = requests.get("https://hot.vrs.sohu.com/vrs_flash.action", params=params, headers=self.headers) 28 | return res.json() 29 | 30 | 31 | if __name__ == '__main__': 32 | sohu().start() 33 | -------------------------------------------------------------------------------- /zhengban/xigua.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import execjs 3 | import re 4 | 5 | 6 | class xigua: 7 | def __init__(self, url): 8 | self.url = url 9 | if "wid_try=1" not in self.url: 10 | self.url = self.url + "&wid_try=1" 11 | self.headers = { 12 | "referer": self.url, 13 | "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36", 14 | } 15 | self.nonce = self.getNonce() 16 | 17 | def getNonce(self): 18 | res = requests.get(self.url, headers=self.headers) 19 | return res.cookies.get("__ac_nonce") 20 | 21 | def getSign(self): 22 | jscode = execjs.compile(open("./js/xigua.js").read()) 23 | ctx = jscode.call("getSign", self.nonce, self.url) 24 | return f"__ac_nonce={self.nonce};__ac_signature={ctx};__ac_referer={self.url}" 25 | 26 | def start(self): 27 | self.headers.update({"cookie": self.getSign()}) 28 | html = requests.get(self.url, headers=self.headers) 29 | res = re.findall("window._SSR_HYDRATED_DATA=(.*?)", html.text)[0].replace("undefined", 'null') 30 | print(res) 31 | return res 32 | 33 | 34 | if __name__ == '__main__': 35 | xigua().start() 36 | --------------------------------------------------------------------------------