提交 20492ff7 编写于 作者: H hjdhnx

增加了服务器解析

上级 76daa5a4
......@@ -6,11 +6,12 @@
from flask_sqlalchemy import SQLAlchemy
import config
# import settings
import warnings
warnings.filterwarnings('ignore')
import os
from flask import Flask, jsonify, abort,request,redirect,make_response,render_template,send_from_directory
from flask import Flask, jsonify, abort,request,redirect,make_response,render_template,send_from_directory,url_for
from js.rules import getRules
from utils import error,parser
from utils.web import *
......@@ -19,11 +20,13 @@ import codecs
from classes.cms import CMS,logger
import json
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
app = Flask(__name__,static_folder='static',static_url_path='/static')
# app.config["JSON_AS_ASCII"] = False # jsonify返回的中文正常显示
app.config.from_object(config) # 单独的配置文件里写了,这里就不用弄json中文显示了
# new_conf = get_conf(settings)
# print(new_conf)
print('自定义播放解析地址:',app.config.get('PLAY_URL'))
app.logger.name="drLogger"
db = SQLAlchemy(app)
......@@ -60,10 +63,17 @@ def forbidden(): # put application's code here
@app.route('/index')
def index(): # put application's code here
# logger.info("进入了首页")
a = redirect(url_for('vod')).headers['Location']
print(a)
return render_template('index.html',getHost=getHost)
@app.route('/vod')
def vod():
play_url = getParmas('play_url')
if play_url: # 播放
logger.info(f'播放重定向到:{play_url}')
return redirect(play_url)
rule = getParmas('rule')
ext = getParmas('ext')
if not ext.startswith('http') and not rule:
......@@ -77,7 +87,7 @@ def vod():
if not js_code:
return jsonify(error.failed('爬虫规则加载失败'))
rule = ctx.eval('rule')
cms = CMS(rule,db,RuleClass)
cms = CMS(rule,db,RuleClass,app.config)
wd = getParmas('wd')
ac = getParmas('ac')
quick = getParmas('quick')
......
......@@ -14,9 +14,22 @@ from utils.htmlParser import jsoup
from urllib.parse import urljoin
from concurrent.futures import ThreadPoolExecutor # 引入线程池
from time import time
from flask import url_for,redirect
class CMS:
def __init__(self,rule,db=None,RuleClass=None):
def __init__(self, rule, db=None, RuleClass=None, new_conf=None):
if new_conf is None:
new_conf = {}
self.play_parse = rule.get('play_parse', False)
play_url = new_conf.get('PLAY_URL',getHost(1))
if not play_url.startswith('http'):
play_url = 'http://'+play_url
self.vod = redirect(url_for('vod')).headers['Location']
if self.play_parse:
self.play_url = play_url + self.vod + '?play_url='
logger.info(f'cms重定向链接:{self.play_url}')
else:
self.play_url = ''
self.db = db
self.RuleClass = RuleClass
host = rule.get('host','').rstrip('/')
......@@ -386,7 +399,7 @@ class CMS:
if p == '*':
vod = self.blank_vod()
vod['vod_play_from'] = '道长在线'
vod['desc'] = detailUrl
vod['desc'] = self.play_url+detailUrl
vod['vod_actor'] = '没有二级,只有一级链接直接嗅探播放'
vod['content'] = detailUrl
vod['vod_play_url'] = '嗅探播放$'+detailUrl
......@@ -454,7 +467,8 @@ class CMS:
for i in range(len(vodHeader)):
p1 = p['lists'].replace('#id',str(i))
vodList = pdfa(html,p1) # 1条线路的选集列表
vodList = [pq(i).text()+'$'+pd(i,'a&&href') for i in vodList] # 拼接成 名称$链接
# vodList = [pq(i).text()+'$'+pd(i,'a&&href') for i in vodList] # 拼接成 名称$链接
vodList = [pq(i).text()+'$'+self.play_url+pd(i,'a&&href') for i in vodList] # 拼接成 名称$链接
vlist = '#'.join(vodList) # 拼多个选集
vod_tab_list.append(vlist)
vod_play_url = vod_play_url.join(vod_tab_list)
......@@ -483,7 +497,8 @@ class CMS:
'list': vod_list
}
t2 = time()
logger.info(f'{self.getName()}获取详情页耗时:{round((t2-t1)*1000,2)}毫秒')
logger.info(f'{self.getName()}获取详情页耗时:{round((t2-t1)*1000,2)}毫秒,共计{round(len(str(result))/1000,2)} kb')
# print(result)
return result
def searchContent(self, key, fypage=1):
......
......@@ -16,4 +16,6 @@ DB_URI = 'sqlite:///models/rules.db?charset=utf8&check_same_thread=False'
SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = False # 打印sql语句
JSON_AS_ASCII = False # jsonify返回的中文正常显示
\ No newline at end of file
JSON_AS_ASCII = False # jsonify返回的中文正常显示
# PLAY_URL = 'http://localhost:5705' # 匹配远程解析服务器链接
# PLAY_URL = PLAY_URL.rstrip('/')
\ No newline at end of file
......@@ -11,6 +11,7 @@ var rule = {
// class_name:'电影&连续剧&福利&动漫&综艺',
// class_url:'1&2&124&4&3',
class_parse:'.navbar-items li:gt(2):lt(8);a&&Text;a&&href;/(\\d+).html',
play_parse:true,
limit:10,
推荐:'.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
double:true, // 推荐内容是否双层定位
......
......@@ -10,6 +10,7 @@ var rule = {
},
timeout:5000,
class_parse:'.navbar-items li:gt(1):lt(7);a&&Text;a&&href;/(\\d+).html',
play_parse:true,
limit:8,
推荐:'.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
double:true, // 推荐内容是否双层定位
......
......@@ -9,6 +9,7 @@ var rule = {
},
timeout:5000,
class_parse:'.bm-item-list a:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html',
play_parse:true,
limit:5,
推荐:'.movie-list-body;.movie-list-item;.movie-title&&Text;.movie-post-lazyload&&data-original;.movie-rating&&Text;a&&href',
double:true, // 推荐内容是否双层定位
......
......@@ -11,6 +11,7 @@ var rule = {
// class_name:'电影&连续剧&福利&动漫&综艺',
// class_url:'1&2&124&4&3',
class_parse:'.navbar-items li:gt(1):lt(7);a&&Text;a&&href;.*v/(.*?)/',
play_parse:true,
limit:10,
推荐:'.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
double:true, // 推荐内容是否双层定位
......
......@@ -8,6 +8,7 @@ var rule = {
},
timeout:5000,
class_parse:'#side-menu:lt(1) li;a&&Text;a&&href;com/(.*?)/',
play_parse:true,
一级:'.col-sm-6;h3&&Text;img&&data-src;.date&&Text;a&&href',
二级:'*',
}
\ No newline at end of file
......@@ -11,6 +11,7 @@ var rule = {
// class_name:'电影&连续剧&福利&动漫&综艺',
// class_url:'1&2&124&4&3',
class_parse:'.navbar-items li:gt(1):lt(8);a&&Text;a&&href;.*-(.*?).html',
play_parse:true,
limit:10,
推荐:'.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
double:true, // 推荐内容是否双层定位
......
......@@ -11,6 +11,7 @@ var rule = {
// class_name:'电影&连续剧&福利&动漫&综艺',
// class_url:'1&2&124&4&3',
class_parse:'.navbar-items li:gt(2):lt(8);a&&Text;a&&href;.*/(.*?).html',
play_parse:true,
limit:10,
推荐:'.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
double:true, // 推荐内容是否双层定位
......
......@@ -10,6 +10,7 @@ var rule = {
// class_name:'电影&网剧&剧集&动漫&综艺&记录',
// class_url:'20&1&2&3&4&23',
class_parse:'.navbar-items li:gt(1):lt(8);a&&Text;a&&href;/(\\d+).html',
play_parse:true,
limit:30,
推荐:'.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
double:true, // 推荐内容是否双层定位
......
......@@ -8,6 +8,7 @@ var rule = {
// class_name:'电影&连续剧&综艺&动漫',
// class_url:'dianying&lianxuju&zongyi&dongman',
class_parse:'.navbar-items li:gt(1):lt(6);a&&Text;a&&href;.*/(.*?).html',
play_parse:true,
推荐:'.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
double:true, // 推荐内容是否双层定位
一级:'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
......
......@@ -73,6 +73,8 @@ var rule = {
class_url:'1&2&3&4',//静态分类标识拼接
//动态分类获取 列表;标题;链接;正则提取 不需要正则的时候后面别加分号
class_parse:'#side-menu:lt(1) li;a&&Text;a&&href;com/(.*?)/',
// 服务器解析播放
play_parse:true,
// 首页推荐显示数量
limit:6,
double:true,//是否双层列表定位,默认false
......
......@@ -5,6 +5,7 @@
# Date : 2022/8/25
import socket
from werkzeug.utils import import_string
from netifaces import interfaces, ifaddresses, AF_INET
from flask import request
from utils.log import logger
......@@ -52,4 +53,14 @@ def getHost(mode=0,port=None):
host = f'{ip}:{port}'
else:
host = 'cms.nokia.press'
return host
\ No newline at end of file
return host
def get_conf(obj):
new_conf = {}
if isinstance(obj, str):
config = import_string(obj)
for key in dir(obj):
if key.isupper():
new_conf[key] = getattr(obj, key)
# print(new_conf)
return new_conf
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册