Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
peater12
dr_py
提交
2a9d474c
dr_py
项目概览
peater12
/
dr_py
落后 Fork 源项目 2 个版本
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,发现更多精彩内容 >>
提交
2a9d474c
编写于
10月 14, 2022
作者:
H
hjdhnx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
升级了
上级
4e0cadfd
变更
8
展开全部
隐藏空白更改
内联
并排
Showing
8 changed file
with
175 addition
and
7 deletion
+175
-7
controllers/cms.py
controllers/cms.py
+4
-0
js/version.txt
js/version.txt
+1
-1
js/短视频.js
js/短视频.js
+1
-3
libs/drpy.js
libs/drpy.js
+5
-0
libs/drpy.min.js
libs/drpy.min.js
+1
-1
libs/drpy.ym.js
libs/drpy.ym.js
+2
-2
libs/util.ym.js
libs/util.ym.js
+158
-0
readme.md
readme.md
+3
-0
未找到文件。
controllers/cms.py
浏览文件 @
2a9d474c
...
...
@@ -552,6 +552,10 @@ class CMS:
except
Exception
as
e
:
logger
.
info
(
f
'首页推荐执行js获取列表出错:
{
e
}
'
)
else
:
if
p
==
'*'
and
self
.
一级
:
p
=
self
.
一级
self
.
double
=
False
logger
.
info
(
f
'首页推荐继承一级:
{
p
}
'
)
p
=
p
.
strip
().
split
(
';'
)
# 解析
if
not
self
.
double
and
len
(
p
)
<
5
:
return
self
.
blank
()
...
...
js/version.txt
浏览文件 @
2a9d474c
3.9.6beta2
\ No newline at end of file
3.9.7
\ No newline at end of file
js/短视频.js
浏览文件 @
2a9d474c
...
...
@@ -20,8 +20,7 @@ var rule = {
lazy
:
''
,
limit
:
6
,
double
:
false
,
推荐
:
'
.item-box&&ul&&li;a&&title;img&&data-original;;a&&href
'
,
推荐
:
'
*
'
,
一级
:
'
.item-box&&ul&&li;a&&title;img&&data-original;;a&&href
'
,
二级
:
'
*
'
,
//搜索:'.search-video-box&&ul&&li;h3&&Text;img&&src;;a&&href',
}
\ No newline at end of file
libs/drpy.js
浏览文件 @
2a9d474c
...
...
@@ -432,6 +432,7 @@ const defaultParser = {
},
};
/**
* pdfh原版优化,能取style属性里的图片链接
* @param html 源码
...
...
@@ -1022,6 +1023,10 @@ function homeVodParse(homeVodObj){
// setItem('MY_URL',MY_URL);
console
.
log
(
MY_URL
);
let
p
=
homeVodObj
.
推荐
;
if
(
p
===
'
*
'
&&
rule
.
一级
){
p
=
rule
.
一级
;
homeVodObj
.
double
=
false
;
}
if
(
!
p
||
typeof
(
p
)
!==
'
string
'
){
return
'
{}
'
}
...
...
libs/drpy.min.js
浏览文件 @
2a9d474c
此差异已折叠。
点击以展开。
libs/drpy.ym.js
浏览文件 @
2a9d474c
import
'
./util
-
ym.js
'
import
dr
from
'
./drpy.js
'
import
'
./util
.
ym.js
'
import
dr
from
'
./drpy.
min.
js
'
__JS_SPIDER__
=
dr
.
DRPY
()
\ No newline at end of file
libs/util
-
ym.js
→
libs/util
.
ym.js
浏览文件 @
2a9d474c
import
'
assets://js/lib/uri.min.js
'
import
cheerio
from
'
assets://js/lib/cheerio.min.js
'
;
import
'
assets://js/lib/crypto-js.js
'
import
'
assets://js/lib/dayjs.min.js
'
import
_
from
'
assets://js/lib/underscore-esm-min.js
'
var
charStr
=
'
abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789
'
;
export
function
randIndex
(
min
,
max
,
i
)
{
...
...
@@ -23,155 +21,6 @@ export function randomStr(len) {
}
return
_str
;
}
if
(
typeof
Object
.
assign
!=
'
function
'
)
{
Object
.
assign
=
function
()
{
var
target
=
arguments
[
0
];
for
(
var
i
=
1
;
i
<
arguments
.
length
;
i
++
)
{
var
source
=
arguments
[
i
];
for
(
var
key
in
source
)
{
if
(
Object
.
prototype
.
hasOwnProperty
.
call
(
source
,
key
))
{
target
[
key
]
=
source
[
key
];
}
}
}
return
target
;
};
}
if
(
!
String
.
prototype
.
includes
)
{
String
.
prototype
.
includes
=
function
(
search
,
start
)
{
if
(
typeof
start
!==
'
number
'
)
{
start
=
0
;
}
if
(
start
+
search
.
length
>
this
.
length
)
{
return
false
;
}
else
{
return
this
.
indexOf
(
search
,
start
)
!==
-
1
;
}
};
}
if
(
!
Array
.
prototype
.
includes
)
{
Object
.
defineProperty
(
Array
.
prototype
,
'
includes
'
,
{
value
:
function
(
searchElement
,
fromIndex
)
{
if
(
this
==
null
)
{
//this是空或者未定义,抛出错误
throw
new
TypeError
(
'
"this" is null or not defined
'
);
}
var
o
=
Object
(
this
);
//将this转变成对象
var
len
=
o
.
length
>>>
0
;
//无符号右移0位,获取对象length属性,如果未定义就会变成0
if
(
len
===
0
)
{
//length为0直接返回false未找到目标值
return
false
;
}
var
n
=
fromIndex
|
0
;
//查找起始索引
var
k
=
Math
.
max
(
n
>=
0
?
n
:
len
-
Math
.
abs
(
n
),
0
);
//计算正确起始索引,因为有可能是负值
while
(
k
<
len
)
{
//从起始索引处开始循环
if
(
o
[
k
]
===
searchElement
)
{
//如果某一位置与寻找目标相等,返回true,找到了
return
true
;
}
k
++
;
}
return
false
;
//未找到,返回false
}
});
}
if
(
typeof
String
.
prototype
.
startsWith
!=
'
function
'
)
{
String
.
prototype
.
startsWith
=
function
(
prefix
)
{
return
this
.
slice
(
0
,
prefix
.
length
)
===
prefix
;
};
}
if
(
typeof
String
.
prototype
.
endsWith
!=
'
function
'
)
{
String
.
prototype
.
endsWith
=
function
(
suffix
)
{
return
this
.
indexOf
(
suffix
,
this
.
length
-
suffix
.
length
)
!==
-
1
;
};
}
Object
.
prototype
.
myValues
=
function
(
obj
)
{
if
(
obj
==
null
)
{
throw
new
TypeError
(
"
Cannot convert undefined or null to object
"
);
}
var
res
=
[]
for
(
var
k
in
obj
)
{
if
(
obj
.
hasOwnProperty
(
k
))
{
//需判断是否是本身的属性
res
.
push
(
obj
[
k
]);
}
}
return
res
;
}
if
(
typeof
Object
.
prototype
.
values
!=
'
function
'
)
{
Object
.
prototype
.
values
=
function
(
obj
)
{
if
(
obj
==
null
)
{
throw
new
TypeError
(
"
Cannot convert undefined or null to object
"
);
}
var
res
=
[]
for
(
var
k
in
obj
)
{
if
(
obj
.
hasOwnProperty
(
k
))
{
//需判断是否是本身的属性
res
.
push
(
obj
[
k
]);
}
}
return
res
;
}
}
if
(
typeof
Array
.
prototype
.
join
!=
'
function
'
)
{
Array
.
prototype
.
join
=
function
(
emoji
)
{
// emoji = emoji||',';
emoji
=
emoji
||
''
;
let
self
=
this
;
let
str
=
""
;
let
i
=
0
;
if
(
!
Array
.
isArray
(
self
))
{
throw
String
(
self
)
+
'
is not Array
'
}
if
(
self
.
length
===
0
)
{
return
''
}
if
(
self
.
length
===
1
)
{
return
String
(
self
[
0
])
}
i
=
1
;
str
=
this
[
0
];
for
(;
i
<
self
.
length
;
i
++
)
{
str
+=
String
(
emoji
)
+
String
(
self
[
i
]);
}
return
str
;
};
}
String
.
prototype
.
rstrip
=
function
(
chars
)
{
let
regex
=
new
RegExp
(
chars
+
"
$
"
);
return
this
.
replace
(
regex
,
""
);
};
Array
.
prototype
.
append
=
Array
.
prototype
.
push
;
String
.
prototype
.
strip
=
String
.
prototype
.
trim
;
export
function
是否正版
(
vipUrl
)
{
let
flag
=
new
RegExp
(
'
qq
\
.com|iqiyi
\
.com|youku
\
.com|mgtv
\
.com|bilibili
\
.com|sohu
\
.com|ixigua
\
.com|pptv
\
.com|miguvideo
\
.com|le
\
.com|1905
\
.com|fun
\
.tv
'
);
return
flag
.
test
(
vipUrl
);
}
export
function
urlDeal
(
vipUrl
)
{
if
(
!
vipUrl
)
{
return
''
}
if
(
!
是否正版
(
vipUrl
))
{
return
vipUrl
}
if
(
!
/miguvideo/
.
test
(
vipUrl
))
{
vipUrl
=
vipUrl
.
split
(
'
#
'
)[
0
].
split
(
'
?
'
)[
0
];
}
return
vipUrl
}
export
function
urlencode
(
str
)
{
str
=
(
str
+
''
).
toString
();
return
encodeURIComponent
(
str
).
replace
(
/!/g
,
'
%21
'
).
replace
(
/'/g
,
'
%27
'
).
replace
(
/
\(
/g
,
'
%28
'
).
replace
(
/
\)
/g
,
'
%29
'
).
replace
(
/
\*
/g
,
'
%2A
'
).
replace
(
/%20/g
,
'
+
'
);
}
export
function
base64Encode
(
text
)
{
return
CryptoJS
.
enc
.
Base64
.
stringify
(
CryptoJS
.
enc
.
Utf8
.
parse
(
text
));
}
export
function
base64Decode
(
text
)
{
return
CryptoJS
.
enc
.
Utf8
.
stringify
(
CryptoJS
.
enc
.
Base64
.
parse
(
text
));
}
export
function
urljoin
(
base
,
url
)
{
base
=
base
||
''
;
...
...
@@ -195,10 +44,6 @@ export function urljoin(base, url) {
return
u
.
toString
();
}
export
function
md5
(
src
)
{
return
CryptoJS
.
MD5
(
src
).
toString
();
}
const
DOM_CHECK_ATTR
=
/
(
url|src|href|data-original|data-src
)
$/
;
const
SELECT_REGEX
=
/:eq|:lt|:gt|#/g
;
const
SELECT_REGEX_A
=
/:eq|:lt|:gt/g
;
...
...
@@ -284,17 +129,30 @@ export function pdfa(html, parse) {
return
result
;
}
const
defaultParser
=
{
pdfh
:
pdfh
,
pdfa
:
pdfa
,
pd
(
html
,
parse
,
uri
){
let
ret
=
this
.
pdfh
(
html
,
parse
);
if
(
typeof
(
uri
)
===
'
undefined
'
||!
uri
){
uri
=
''
;
}
if
(
DOM_CHECK_ATTR
.
test
(
parse
)){
if
(
/http/
.
test
(
ret
)){
ret
=
ret
.
substr
(
ret
.
indexOf
(
'
http
'
));
}
else
{
ret
=
urljoin
(
MY_URL
,
ret
)
}
}
return
ret
},
};
globalThis
.
randIndex
=
randIndex
;
globalThis
.
randomStr
=
randomStr
;
globalThis
.
urljoin
=
urljoin
;
globalThis
.
joinUrl
=
urljoin
;
globalThis
.
urljoin2
=
urljoin
;
globalThis
.
是否正版
=
是否正版
;
globalThis
.
urlDeal
=
urlDeal
;
globalThis
.
urlencode
=
urlencode
;
globalThis
.
encodeUrl
=
urlencode
;
globalThis
.
base64Encode
=
base64Encode
;
globalThis
.
base64Decode
=
base64Decode
;
globalThis
.
pdfa
=
pdfa
;
globalThis
.
pdfh
=
pdfh
;
globalThis
.
md5
=
md5
;
\ No newline at end of file
globalThis
.
defaultParser
=
defaultParser
;
globalThis
.
pdfa
=
defaultParser
.
pdfa
;
globalThis
.
pdfh
=
defaultParser
.
pdfh
;
globalThis
.
pd
=
defaultParser
.
pd
;
\ No newline at end of file
readme.md
浏览文件 @
2a9d474c
...
...
@@ -50,6 +50,9 @@
###### 2022/10/14
-
[X] todo:推荐支持
*
自动集成一级定位
-
[X] todo:辅助嗅探
-
[X] done:推荐支持
*
自动继承一级定位(参考短视频.js)
-
[X] done:drpy.js优化,drpy.ym.js完美支持pythonbox及俊版tvb
-
[X] 升级版本至3.9.7
###### 2022/10/13
-
[X] 3.9.5修复凌云影视源并增加短视模板
-
[X] 增加秋霞影视,ddys等半成品(优化代码兼容取style属性的情况自动提取链接)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录