提交 cc8f7c05 编写于 作者: H hjdhnx

尝试增加豆瓣

上级 64acf990
......@@ -15,7 +15,7 @@ from utils.log import logger
from utils.encode import base64Encode,baseDecode,fetch,post,request,getCryptoJS,getPreJs,buildUrl,getHome
from utils.encode import verifyCode,setDetail,join,urljoin2,parseText
from utils.safePython import safePython
from utils.parser import runPy,runJScode,JsObjectWrapper
from utils.parser import runPy,runJScode,JsObjectWrapper,PyJsObject
from utils.htmlParser import jsoup
from urllib.parse import urljoin,quote,unquote
from concurrent.futures import ThreadPoolExecutor # 引入线程池
......@@ -40,12 +40,18 @@ def encodeUrl(url):
# return base64Encode(url)
return quote(url)
def stringify(obj):
if isinstance(obj,PyJsObject):
# obj = obj.to_dict()
obj = parseText(str(obj))
return json.dumps(obj, separators=(',', ':'), ensure_ascii=False)
py_ctx = {
'requests':requests,'print':print,'base64Encode':base64Encode,'baseDecode':baseDecode,
'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
'setItem':setItem,'getItem':getItem,'clearItem':clearItem,'stringify':stringify
}
# print(getCryptoJS())
......@@ -780,7 +786,11 @@ class CMS:
print(vod)
return vod
if not isinstance(p,dict) and not isinstance(p,str) and not str(p).startswith('js:'):
if not p:
return vod
if not isinstance(p,dict) and not isinstance(p,str):
return vod
if isinstance(p,str) and not str(p).startswith('js:'):
return vod
jsp = jsoup(self.url)
......
此差异已折叠。
......@@ -77,6 +77,21 @@ Object.prototype.myValues=function(obj){
}
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;
}
}
Array.prototype.join = function (emoji) {
// emoji = emoji||',';
emoji = emoji||'';
......@@ -93,6 +108,7 @@ Array.prototype.join = function (emoji) {
}
return str;
};
Array.prototype.append = Array.prototype.push;
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);
......@@ -145,7 +161,7 @@ function setResult(d){
return VODS
}
function setResult2(res){
VODS = res.list;
VODS = res.list||[];
return VODS
}
function setHomeResult(res){
......
js:
print(input);
print(MY_CATE);
print(MY_PAGE);
print(MY_FL);
// print(input);
// print(MY_CATE);
// print(MY_PAGE);
// print(MY_FL);
let d = [];
let douban = input.split('douban=')[1].split('&')[0];
let douban_api_host = 'https://frodo.douban.com/api/v2';
let miniapp_apikey = '0ac44ae016490db2204ce0a042db2916';
const count = 30;
......@@ -30,7 +30,7 @@ function miniapp_request(path, query){
return JSON.parse(html);
}
catch(e){
print(e.message);
print('发生了错误:'+e.message);
return {}
}
}
......@@ -39,6 +39,7 @@ function cate_filter(d,douban){
douban = douban||'';
try {
if(MY_CATE==='interests'){
if(douban){
let status = MY_FL.status||"mark";
let subtype_tag = MY_FL.subtype_tag||"";
let year_tag = MY_FL.year_tag||"全部";
......@@ -51,20 +52,84 @@ function cate_filter(d,douban){
"start": (MY_PAGE - 1) * count,
"count": count
});
print(res);
// print(res);
}else{
return {}
}
}else if(MY_CATE === "hot_gaia"){
let sort =MY_FL.sort||"recommend";
let area =MY_FL.area||"全部";
let path = '/movie/'+MY_CATE;
res = miniapp_request(path, {
let res = miniapp_request(path, {
"area": area,
"sort": sort,
"start": (MY_PAGE - 1) * count,
"count": count
});
print(res);
// print(res);
}else if(MY_CATE === "tv_hot" || MY_CATE === "show_hot"){
let stype = MY_FL.type||MY_CATE;
let path = "/subject_collection/"+stype+"/items"
let res = miniapp_request(path, {
"start": (MY_PAGE - 1) * count,
"count": count
});
// print(res);
}
else if(MY_CATE.startsWith("rank_list")){
let id = MY_CATE === "rank_list_movie"?"movie_real_time_hotest":"tv_real_time_hotest";
id = MY_FL.榜单||id;
let path = "/subject_collection/"+id+"/items";
let res = miniapp_request(path, {
"start": (MY_PAGE - 1) * count,
"count": count
});
// print(res);
}else{
let path = "/"+MY_CATE+"/recommend";
let selected_categories;
if(Object.keys(MY_FL).length > 0){
let sort = MY_FL.sort||"T";
let tags = Object.Values(MY_FL).join(',');
if(MY_CATE === "movie"){
selected_categories = {
"类型": MY_FL.类型||'',
"地区": MY_FL.地区||''
}
}else{
selected_categories = {
"类型": MY_FL.类型||"",
"形式": MY_FL.类型?MY_FL.类型+'地区':'',
"地区": MY_FL.地区||""
}
}
}else{
let sort = "T";
let tags = "";
if(MY_CATE === "movie"){
selected_categories = {
"类型": "",
"地区": ""
};
}else{
selected_categories = {
"类型": "",
"形式": "",
"地区": ""
}
}
}
let params = {
"tags": tags,
"sort": sort,
"refresh": 0,
"selected_categories": stringify(selected_categories),
"start": (MY_PAGE - 1) * count,
"count": count
}
// print(params);
let res = miniapp_request(path, params)
}
let result = {
"page": MY_PAGE,
"pagecount": Math.ceil(res.total / count),
......@@ -72,7 +137,7 @@ function cate_filter(d,douban){
"total": res.total
}
let items = [];
if(/rank_list|tv_hot|show_hot/.test(MY_CATE)) {
if(/^rank_list|tv_hot|show_hot/.test(MY_CATE)) {
items = res['subject_collection_items']
}
else if(MY_CATE==='interests'){
......@@ -93,7 +158,7 @@ function cate_filter(d,douban){
let honor_str = honor.map(function (it){return it.title}).join('|');
let vod_obj = {
// "vod_id": f'msearch:{item.get("type", "")}__{item.get("id", "")}',
"vod_id": item.type+'$'+item.id,
// "vod_id": item.type+'$'+item.id,
"vod_name": title !== "未知电影"?title: "暂不支持展示",
"vod_pic": item.pic.normal,
"vod_remarks": rat_str + " " + honor_str
......
js:
let d = [];
let douban_api_host = 'https://frodo.douban.com/api/v2';
let miniapp_apikey = '0ac44ae016490db2204ce0a042db2916';
const count = 30;
function miniapp_request(path, query){
try {
let url = douban_api_host + path;
query.apikey = miniapp_apikey;
fetch_params.headers = oheaders;
url = buildUrl(url,query);
let html = fetch(url,fetch_params);
return JSON.parse(html);
}
catch(e){
print('发生了错误:'+e.message);
return {}
}
}
function subject_real_time_hotest(){
try{
let res = miniapp_request("/subject_collection/subject_real_time_hotest/items", {});
let lists = [];
let arr = res.subject_collection_items||[];
arr.forEach(function (item){
if(item.type==='movie'||item.type==='tv'){
let rating = item.rating?item.rating.value:"暂无评分";
let honnor = (item.honor_infos||[]).map(function (it){return it.title}).join('|');
lists.append({
// "vod_id": "",
"vod_id": TYPE+"$1",
"vod_name": item.title||"",
"vod_pic": item.pic.normal,
"vod_remarks": rating + " " + honnor
})
}
});
return lists
}catch (e) {
print('发生了错误:'+e.message);
return []
}
}
VODS = subject_real_time_hotest();
print(VODS);
\ No newline at end of file
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : 豆瓣测试.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/16
import json
selected_categories = {
"类型": "",
"形式": "",
"地区": ""
}
print(selected_categories)
b = json.dumps(selected_categories, separators=(',', ':'), ensure_ascii=False)
print(b)
\ No newline at end of file
......@@ -5,7 +5,7 @@
# Date : 2022/8/29
import base64
from urllib.parse import urljoin
from urllib.parse import urljoin,quote,unquote
from js2py.base import PyJsString
import requests,warnings
# 关闭警告
......@@ -225,19 +225,37 @@ def request(url,obj):
return base_request(url, obj)
def redx(text):
"""
修正js2py交互的字符串自动加前后引号问题
:param text:
:return:
"""
# return text.replace("'", "").replace('"', "")
text = str(text)
if text.startswith("'") and text.endswith("'"):
text = text[1:-1]
return text
def buildUrl(url,obj=None):
url = str(url).replace("'", "")
# url = str(url).replace("'", "")
url = redx(url)
if not obj:
obj = {}
new_obj = {}
for i in obj:
new_obj[str(i).replace("'", "")] = str(obj[i]).replace("'", "")
# new_obj[str(i).replace("'", "")] = str(obj[i]).replace("'", "")
new_obj[redx(i)] = redx(obj[i])
if str(url).find('?') < 0:
url = str(url) + '?'
prs = '&'.join([f'{i}={obj[i]}' for i in obj])
param_list = [f'{i}={new_obj[i]}' for i in new_obj]
# print(param_list)
prs = '&'.join(param_list)
if len(new_obj) > 0 and not str(url).endswith('?'):
url += '&'
url = (url + prs).replace('"','').replace("'",'')
# url = (url + prs).replace('"','').replace("'",'')
url = url + prs
# print(url)
return url
......
......@@ -14,7 +14,7 @@ subprocess.Popen = partial(subprocess.Popen, encoding="utf-8") # 固定写法
# 解决execjs执行js时产生的乱码报错,需要在导入该模块之前,让Popen的encoding参数锁定为utf-8
# import execjs
import js2py
from js2py.base import JsObjectWrapper,PyJsString
from js2py.base import JsObjectWrapper,PyJsString,PyJsObject
# os.environ["EXECJS_RUNTIME"] = "JScript"
# print(execjs.get().name)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册