Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
m0_73085269
dr_py
提交
126365a3
dr_py
项目概览
m0_73085269
/
dr_py
与 Fork 源项目一致
Fork自
晚风拂柳颜 / dr_py
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
dr_py
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
126365a3
编写于
3月 06, 2023
作者:
H
hjdhnx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新api尝试增加搜索编码的兼容性
上级
e6a4a804
变更
12
展开全部
隐藏空白更改
内联
并排
Showing
12 changed file
with
172 addition
and
36 deletion
+172
-36
controllers/cms.py
controllers/cms.py
+12
-5
doc/写源教程.md
doc/写源教程.md
+1
-0
doc/更新日志.md
doc/更新日志.md
+4
-1
js/007影视.js
js/007影视.js
+1
-0
js/version.txt
js/version.txt
+1
-1
libs/drpy.js
libs/drpy.js
+35
-1
libs/drpy.min.js
libs/drpy.min.js
+1
-1
libs/drpy2.js
libs/drpy2.js
+35
-1
libs/drpy2.min.js
libs/drpy2.min.js
+1
-1
test/测试.py
test/测试.py
+21
-2
utils/encode.py
utils/encode.py
+27
-0
utils/pyctx.py
utils/pyctx.py
+33
-23
未找到文件。
controllers/cms.py
浏览文件 @
126365a3
...
...
@@ -14,8 +14,8 @@ from utils.web import *
from
utils.system
import
getHost
from
utils.config
import
playerConfig
from
utils.log
import
logger
from
utils.encode
import
base64Encode
,
base64Decode
,
fetch
,
post
,
request
,
getCryptoJS
,
getPreJs
,
buildUrl
,
getHome
from
utils.encode
import
verifyCode
,
setDetail
,
join
,
urljoin2
,
parseText
,
requireCache
,
forceOrder
from
utils.encode
import
base64Encode
,
base64Decode
,
fetch
,
post
,
request
,
getCryptoJS
,
getPreJs
,
buildUrl
,
getHome
,
atob
,
btoa
from
utils.encode
import
verifyCode
,
setDetail
,
join
,
urljoin2
,
parseText
,
requireCache
,
forceOrder
,
base64ToImage
,
encodeStr
,
decodeStr
from
utils.encode
import
md5
as
mmd5
from
utils.safePython
import
safePython
from
utils.parser
import
runPy
,
runJScode
,
JsObjectWrapper
,
PyJsObject
,
PyJsString
...
...
@@ -79,7 +79,8 @@ py_ctx = {
'buildUrl'
:
buildUrl
,
'getHome'
:
getHome
,
'setDetail'
:
setDetail
,
'join'
:
join
,
'urljoin2'
:
urljoin2
,
'PC_UA'
:
PC_UA
,
'MOBILE_UA'
:
MOBILE_UA
,
'UC_UA'
:
UC_UA
,
'UA'
:
UA
,
'IOS_UA'
:
IOS_UA
,
'setItem'
:
setItem
,
'getItem'
:
getItem
,
'clearItem'
:
clearItem
,
'stringify'
:
stringify
,
'encodeUrl'
:
encodeUrl
,
'requireObj'
:
requireObj
,
'md5'
:
md5
'requireObj'
:
requireObj
,
'md5'
:
md5
,
'atob'
:
atob
,
'btoa'
:
btoa
,
'base64ToImage'
:
base64ToImage
,
'encodeStr'
:
encodeStr
,
'decodeStr'
:
decodeStr
}
# print(getCryptoJS())
...
...
@@ -166,6 +167,7 @@ class CMS:
self
.
oheaders
[
'cookie'
]
=
cookie
limit
=
rule
.
get
(
'limit'
,
6
)
encoding
=
rule
.
get
(
'编码'
,
'utf-8'
)
search_encoding
=
rule
.
get
(
'搜索编码'
,
''
)
self
.
limit
=
min
(
limit
,
30
)
keys
=
headers
.
keys
()
for
k
in
headers
.
keys
():
...
...
@@ -211,6 +213,7 @@ class CMS:
self
.
推荐
=
rule
.
get
(
'推荐'
,
''
)
self
.
图片来源
=
rule
.
get
(
'图片来源'
,
''
)
self
.
encoding
=
encoding
self
.
search_encoding
=
search_encoding
self
.
timeout
=
round
(
int
(
timeout
)
/
1000
,
2
)
self
.
filter
=
rule
.
get
(
'filter'
,[])
self
.
filter_def
=
rule
.
get
(
'filter_def'
,{})
...
...
@@ -1250,8 +1253,12 @@ class CMS:
return
result
def
searchContent
(
self
,
key
,
fypage
=
1
,
show_name
=
False
):
if
self
.
encoding
and
str
(
self
.
encoding
).
startswith
(
'gb'
):
key
=
quote
(
key
.
encode
(
'utf-8'
).
decode
(
'utf-8'
).
encode
(
self
.
encoding
,
'ignore'
))
if
self
.
search_encoding
:
if
str
(
self
.
search_encoding
).
lower
()
!=
'utf-8'
:
key
=
encodeStr
(
key
,
self
.
search_encoding
)
elif
self
.
encoding
and
str
(
self
.
encoding
).
startswith
(
'gb'
):
# key = quote(key.encode('utf-8').decode('utf-8').encode(self.encoding,'ignore'))
key
=
encodeStr
(
key
,
self
.
encoding
)
# print(key)
pg
=
str
(
fypage
)
if
not
self
.
searchUrl
:
...
...
doc/写源教程.md
浏览文件 @
126365a3
...
...
@@ -13,6 +13,7 @@
var
rule
=
{
title
:
''
,
//规则标题,没有实际作用,但是可以作为cms类名称依据
编码
:
''
,
//不填就默认utf-8
搜索编码
:
''
,
//不填则不编码,默认都是按utf-8.可优先于全局编码属性.比如网页源码编码是gbk,这里可以指定utf-8搜索独立编码。多数情况这个属性不填或者填写gbk应对特殊的网站搜索
host
:
''
,
//网页的域名根,包含http头如 https://www,baidu.com
homeUrl
:
'
/latest/
'
,
//网站的首页链接,可以是完整路径或者相对路径,用于分类获取和推荐获取 fyclass是分类标签 fypage是页数
url
:
'
/fyclass/fypage.html[/fyclass/]
'
,
//网站的分类页面链接
...
...
doc/更新日志.md
浏览文件 @
126365a3
###### 2023/02/15
###### 2023/03/06
-
[X] 3.9.37beta1 drpy增加属性搜索编码,用于解决某些网站搜索关键字必须是gbk编码结果的问题 目前js0已测试通过并实现了encodeStr和decodeStr函数。js1预留了逻辑暂未实现,函数已增加
###### 2023/03/03
-
[X] 3.9.36beta1 drpy2.js和drpy2.min.js依赖引入改为从壳子内部引入和相对路径引入模板
###### 2023/02/15
...
...
js/007影视.js
浏览文件 @
126365a3
...
...
@@ -3,6 +3,7 @@ muban.首图2.二级.desc = '.data:eq(1)&&Text;;;.data:eq(6)&&Text;.data:eq(5)&&
muban
.
首图2
.
二级
.
tabs
=
'
.nav-tabs.dpplay&&li
'
;
var
rule
=
{
title
:
'
007影视
'
,
搜索编码
:
'
utf-8
'
,
模板
:
'
首图2
'
,
ali_token
:
'
{{ali_token}}
'
,
bili_cookie
:
'
{{bili_cookie}}
'
,
...
...
js/version.txt
浏览文件 @
126365a3
3.9.36beta5
\ No newline at end of file
3.9.37beta1
\ No newline at end of file
libs/drpy.js
浏览文件 @
126365a3
...
...
@@ -54,7 +54,7 @@ function pre(){
}
let
rule
=
{};
const
VERSION
=
'
drpy1 3.9.3
5 20230215
'
;
const
VERSION
=
'
drpy1 3.9.3
7beta1 20230306
'
;
/** 已知问题记录
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
...
...
@@ -394,6 +394,30 @@ function md5(text) {
return
CryptoJS
.
MD5
(
text
).
toString
();
}
/**
* 字符串按指定编码
* @param input
* @param encoding
* @returns {*}
*/
function
encodeStr
(
input
,
encoding
){
encoding
=
encoding
||
'
gbk
'
;
return
input
}
/**
* 字符串指定解码
* @param input
* @param encoding
* @returns {*}
*/
function
decodeStr
(
input
,
encoding
){
encoding
=
encoding
||
'
gbk
'
;
return
input
}
function
getCryptoJS
(){
// return request('https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/crypto-hiker.js');
return
'
console.log("CryptoJS已装载");
'
...
...
@@ -2120,6 +2144,7 @@ function playParse(playObj){
rule
.
timeout
=
rule
.
timeout
||
5000
;
rule
.
encoding
=
rule
.
编码
||
rule
.
encoding
||
'
utf-8
'
;
rule
.
search_encoding
=
rule
.
搜索编码
||
rule
.
search_encoding
||
''
;
rule
.
图片来源
=
rule
.
图片来源
||
''
;
rule
.
play_json
=
rule
.
hasOwnProperty
(
'
play_json
'
)?
rule
.
play_json
:[];
rule
.
pagecount
=
rule
.
hasOwnProperty
(
'
pagecount
'
)?
rule
.
pagecount
:{};
...
...
@@ -2265,6 +2290,15 @@ function play(flag, id, flags) {
* @returns {string}
*/
function
search
(
wd
,
quick
)
{
if
(
rule
.
search_encoding
){
if
(
rule
.
search_encoding
.
toLowerCase
()
!==
'
utf-8
'
){
// 按搜索编码进行编码
wd
=
encodeStr
(
wd
,
rule
.
search_encoding
);
}
}
else
if
(
rule
.
encoding
&&
rule
.
encoding
.
toLowerCase
()
!==
'
utf-8
'
){
// 按全局编码进行编码
wd
=
encodeStr
(
wd
,
rule
.
encoding
);
}
let
searchObj
=
{
searchUrl
:
rule
.
searchUrl
,
搜索
:
rule
.
搜索
,
...
...
libs/drpy.min.js
浏览文件 @
126365a3
此差异已折叠。
点击以展开。
libs/drpy2.js
浏览文件 @
126365a3
...
...
@@ -39,7 +39,7 @@ function pre(){
let
rule
=
{};
let
vercode
=
typeof
(
pdfl
)
===
'
function
'
?
'
drpy2.1
'
:
'
drpy2
'
;
const
VERSION
=
vercode
+
'
3.9.3
6beta1 20230303
'
;
const
VERSION
=
vercode
+
'
3.9.3
7beta1 20230306
'
;
/** 已知问题记录
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
...
...
@@ -381,6 +381,30 @@ function md5(text) {
return
CryptoJS
.
MD5
(
text
).
toString
();
}
/**
* 字符串按指定编码
* @param input
* @param encoding
* @returns {*}
*/
function
encodeStr
(
input
,
encoding
){
encoding
=
encoding
||
'
gbk
'
;
return
input
}
/**
* 字符串指定解码
* @param input
* @param encoding
* @returns {*}
*/
function
decodeStr
(
input
,
encoding
){
encoding
=
encoding
||
'
gbk
'
;
return
input
}
function
getCryptoJS
(){
// return request('https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/crypto-hiker.js');
return
'
console.log("CryptoJS已装载");
'
...
...
@@ -1983,6 +2007,7 @@ function init(ext) {
rule
.
timeout
=
rule
.
timeout
||
5000
;
rule
.
encoding
=
rule
.
编码
||
rule
.
encoding
||
'
utf-8
'
;
rule
.
search_encoding
=
rule
.
搜索编码
||
rule
.
search_encoding
||
''
;
rule
.
图片来源
=
rule
.
图片来源
||
''
;
rule
.
play_json
=
rule
.
hasOwnProperty
(
'
play_json
'
)?
rule
.
play_json
:[];
rule
.
pagecount
=
rule
.
hasOwnProperty
(
'
pagecount
'
)?
rule
.
pagecount
:{};
...
...
@@ -2128,6 +2153,15 @@ function play(flag, id, flags) {
* @returns {string}
*/
function
search
(
wd
,
quick
)
{
if
(
rule
.
search_encoding
){
if
(
rule
.
search_encoding
.
toLowerCase
()
!==
'
utf-8
'
){
// 按搜索编码进行编码
wd
=
encodeStr
(
wd
,
rule
.
search_encoding
);
}
}
else
if
(
rule
.
encoding
&&
rule
.
encoding
.
toLowerCase
()
!==
'
utf-8
'
){
// 按全局编码进行编码
wd
=
encodeStr
(
wd
,
rule
.
encoding
);
}
let
searchObj
=
{
searchUrl
:
rule
.
searchUrl
,
搜索
:
rule
.
搜索
,
...
...
libs/drpy2.min.js
浏览文件 @
126365a3
此差异已折叠。
点击以展开。
test/测试.py
浏览文件 @
126365a3
...
...
@@ -5,10 +5,29 @@
# Date : 2022/8/28
import
re
from
urllib.parse
import
quote
,
unquote
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}'
ret
=
re
.
search
(
'var player_(.*?)=(.*?)<'
,
txt
,
re
.
M
|
re
.
I
)
print
(
ret
)
def
encodeStr
(
input
,
encoding
=
'GBK'
):
"""
指定字符串编码
:param input:
:param encoding:
:return:
"""
return
quote
(
input
.
encode
(
encoding
,
'ignore'
))
def
lazyParse
(
input
,
jsp
,
getParse
,
saveParse
,
headers
,
encoding
):
pass
\ No newline at end of file
pass
str1
=
'星'
key
=
str1
.
encode
(
'gb2312'
,
'ignore'
)
print
(
quote
(
key
))
print
(
quote
(
str1
))
# print(str1.decode('utf-8',))
# str_gbk = str1.encode("gbk",ignore=True).strip()
# print("转码结果:"+repr(str_gbk))
# print( unquote('%D0%C7','GBK'))
print
(
encodeStr
(
'星'
,
'utf-8'
))
print
(
encodeStr
(
'斗罗大陆'
,
'gbk'
))
# %B6%B7%C2%DE%B4%F3%C2%BD
\ No newline at end of file
utils/encode.py
浏览文件 @
126365a3
...
...
@@ -176,6 +176,33 @@ def base64Decode(text):
# print(text)
return
base64
.
b64decode
(
text
).
decode
(
"utf-8"
)
#base64解码
def
encodeStr
(
input
,
encoding
=
'GBK'
):
"""
指定字符串编码
:param input:
:param encoding:
:return:
"""
if
isinstance
(
input
,
PyJsString
):
input
=
parseText
(
str
(
input
))
if
isinstance
(
encoding
,
PyJsString
):
encoding
=
parseText
(
str
(
input
))
return
quote
(
input
.
encode
(
encoding
,
'ignore'
))
def
decodeStr
(
input
,
encoding
=
'GBK'
):
"""
指定字符串解码
:param input:
:param encoding:
:return:
"""
if
isinstance
(
input
,
PyJsString
):
input
=
parseText
(
str
(
input
))
if
isinstance
(
encoding
,
PyJsString
):
encoding
=
parseText
(
str
(
input
))
return
unquote
(
input
,
encoding
)
def
parseText
(
text
:
str
):
text
=
text
.
replace
(
'false'
,
'False'
).
replace
(
'true'
,
'True'
).
replace
(
'null'
,
'None'
)
# print(text)
...
...
utils/pyctx.py
浏览文件 @
126365a3
...
...
@@ -9,66 +9,76 @@ import json
import
requests
from
utils.web
import
*
from
utils.log
import
logger
from
utils.encode
import
base64Encode
,
base64Decode
,
fetch
,
post
,
request
,
getCryptoJS
,
getPreJs
,
buildUrl
,
getHome
,
parseText
,
atob
from
utils.encode
import
setDetail
,
join
,
urljoin2
,
parseText
,
requireCache
,
base64ToImage
from
utils.encode
import
base64Encode
,
base64Decode
,
fetch
,
post
,
request
,
getCryptoJS
,
getPreJs
,
buildUrl
,
getHome
,
\
parseText
,
atob
,
btoa
from
utils.encode
import
setDetail
,
join
,
urljoin2
,
parseText
,
requireCache
,
base64ToImage
,
encodeStr
,
decodeStr
from
utils.encode
import
md5
as
mmd5
from
utils.parser
import
runPy
,
runJScode
,
JsObjectWrapper
,
PyJsObject
,
PyJsString
from
utils.parser
import
runPy
,
runJScode
,
JsObjectWrapper
,
PyJsObject
,
PyJsString
from
urllib.parse
import
quote
from
utils.htmlParser
import
jsoup
from
controllers.service
import
storage_service
def
setItem
(
key
,
value
):
def
setItem
(
key
,
value
):
lsg
=
storage_service
()
if
isinstance
(
key
,
PyJsString
):
if
isinstance
(
key
,
PyJsString
):
key
=
parseText
(
str
(
key
))
if
isinstance
(
value
,
PyJsString
):
if
isinstance
(
value
,
PyJsString
):
value
=
parseText
(
str
(
value
))
return
lsg
.
setItem
(
key
,
value
)
return
lsg
.
setItem
(
key
,
value
)
def
getItem
(
key
,
value
=
''
):
def
getItem
(
key
,
value
=
''
):
lsg
=
storage_service
()
if
isinstance
(
key
,
PyJsString
):
if
isinstance
(
key
,
PyJsString
):
key
=
parseText
(
str
(
key
))
if
isinstance
(
value
,
PyJsString
):
if
isinstance
(
value
,
PyJsString
):
value
=
parseText
(
str
(
value
))
return
lsg
.
getItem
(
key
,
value
)
return
lsg
.
getItem
(
key
,
value
)
def
clearItem
(
key
):
lsg
=
storage_service
()
if
isinstance
(
key
,
PyJsString
):
if
isinstance
(
key
,
PyJsString
):
key
=
parseText
(
str
(
key
))
return
lsg
.
clearItem
(
key
)
def
encodeUrl
(
url
):
# return base64Encode(quote(url))
# return base64Encode(url)
# print(type(url))
if
isinstance
(
url
,
PyJsString
):
if
isinstance
(
url
,
PyJsString
):
# obj = obj.to_dict()
url
=
parseText
(
str
(
url
))
return
quote
(
url
)
def
stringify
(
obj
):
if
isinstance
(
obj
,
PyJsObject
):
if
isinstance
(
obj
,
PyJsObject
):
# obj = obj.to_dict()
obj
=
parseText
(
str
(
obj
))
return
json
.
dumps
(
obj
,
separators
=
(
','
,
':'
),
ensure_ascii
=
False
)
def
requireObj
(
url
):
if
isinstance
(
url
,
PyJsString
):
if
isinstance
(
url
,
PyJsString
):
url
=
parseText
(
str
(
url
))
return
requireCache
(
url
)
def
md5
(
text
):
if
isinstance
(
text
,
PyJsString
):
if
isinstance
(
text
,
PyJsString
):
text
=
parseText
(
str
(
text
))
return
mmd5
(
text
)
py_ctx
=
{
'requests'
:
requests
,
'print'
:
print
,
'base64Encode'
:
base64Encode
,
'base64Decode'
:
base64Decode
,
'log'
:
logger
.
info
,
'fetch'
:
fetch
,
'post'
:
post
,
'request'
:
request
,
'getCryptoJS'
:
getCryptoJS
,
'buildUrl'
:
buildUrl
,
'getHome'
:
getHome
,
'setDetail'
:
setDetail
,
'join'
:
join
,
'urljoin2'
:
urljoin2
,
'PC_UA'
:
PC_UA
,
'MOBILE_UA'
:
MOBILE_UA
,
'UC_UA'
:
UC_UA
,
'IOS_UA'
:
IOS_UA
,
'setItem'
:
setItem
,
'getItem'
:
getItem
,
'clearItem'
:
clearItem
,
'stringify'
:
stringify
,
'encodeUrl'
:
encodeUrl
,
'requireObj'
:
requireObj
,
'md5'
:
md5
,
'atob'
:
atob
,
'base64ToImage'
:
base64ToImage
}
\ No newline at end of file
'requests'
:
requests
,
'print'
:
print
,
'base64Encode'
:
base64Encode
,
'base64Decode'
:
base64Decode
,
'log'
:
logger
.
info
,
'fetch'
:
fetch
,
'post'
:
post
,
'request'
:
request
,
'getCryptoJS'
:
getCryptoJS
,
'buildUrl'
:
buildUrl
,
'getHome'
:
getHome
,
'setDetail'
:
setDetail
,
'join'
:
join
,
'urljoin2'
:
urljoin2
,
'PC_UA'
:
PC_UA
,
'MOBILE_UA'
:
MOBILE_UA
,
'UC_UA'
:
UC_UA
,
'IOS_UA'
:
IOS_UA
,
'setItem'
:
setItem
,
'getItem'
:
getItem
,
'clearItem'
:
clearItem
,
'stringify'
:
stringify
,
'encodeUrl'
:
encodeUrl
,
'requireObj'
:
requireObj
,
'md5'
:
md5
,
'atob'
:
atob
,
'btoa'
:
btoa
,
'base64ToImage'
:
base64ToImage
,
'encodeStr'
:
encodeStr
,
'decodeStr'
:
decodeStr
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录