提交 1933f4b0 编写于 作者: H hjdhnx

新增酷云77源

上级 01e21e2d
无法预览此类型文件
......@@ -555,7 +555,8 @@ class CMS:
# print(html)
try:
if self.double:
items = pdfa(html, p[0])
items = pdfa(html, p[0].replace('json:',''))
# print(p[0])
# print(items)
# print(len(items))
for item in items:
......@@ -1022,7 +1023,7 @@ class CMS:
'list': []
}
logger.info(f'{self.getName()}获取详情页耗时:{get_interval(t1)}毫秒,发生错误:{e}')
# print(result)
print(result)
return result
def searchContent(self, key, fypage=1,show_name=False):
......
var rule = {
title:'酷云77',
host:'http://api.kunyu77.com',
homeUrl:'/api.php/provide/homeBlock?type_id=0',
searchUrl:'/api.php/provide/searchVideo?searchName=**',
searchable:2,
quickSearch:0,
filterable:1,
multi:1,
// 分类链接fypage参数支持1个()表达式
url:'/api.php/provide/searchFilter?type_id=fyclass&pagesize=24&pagenum=fypage',
detailUrl:'/api.php/provide/videoDetail?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&version=1.8.7&ids=fyid',
filter_url:'year={{fl.y}}&category={{fl.scat}}&area={{fl.a}}',
filter:{0: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 1: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 2: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 3: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 4: [{'key': 'y', 'name': '年代', 'value': [{'n': '全部', 'v': ''}, {'n': '2022', 'v': '2022'}, {'n': '2021', 'v': '2021'}, {'n': '2020', 'v': '2020'}, {'n': '2019', 'v': '2019'}, {'n': '2018', 'v': '2018'}, {'n': '2017', 'v': '2017'}, {'n': '2016', 'v': '2016'}, {'n': '2015', 'v': '2015'}, {'n': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}]},
headers:{
"User-Agent": "Dalvik/2.1.0"
},
timeout:5000,
class_name:'全部&电影&电视剧&综艺&动漫',
class_url:'0&1&2&3&4',
limit:20,
play_parse:true,
// 手动调用解析请求json的url,此lazy不方便
// lazy:'js:input={parse:1,url:input};',
lazy:'js:function GetPlayUrl(playUrl){let realPlay={parse:0,url:playUrl};if(/mgtv|sohu/.test(playUrl)){realPlay.headers={"User-Agent":"Mozilla/5.0"}}else if(/bili/.test(playUrl)){realPlay.headers={"User-Agent":"Mozilla/5.0",Referer:"https://www.bilibili.com"}}else if(/ixigua/.test(playUrl)){realPlay.headers={"User-Agent":"Mozilla/5.0",Referer:"https://www.ixigua.com"}}return realPlay}if(/\\.m3u8|\\.mp4/.test(input)){input={parse:0,url:input}}else{try{let url="http://api.kunyu77.com/api.php/provide/parserUrl?url="+input;let html=request(url);let urll=JSON.parse(html).data.url;let playhtml=request(urll);let playurl=JSON.parse(playhtml).url;input=GetPlayUrl(playurl)}catch(e){input={parse:1,url:input}}}',
推荐:'json:data.blocks;contents;title;videoCover;msg;id',
double:true,
// 一级:'json:data.filterData.listData;title;img;subTitle;videoLink;summary',
一级:'',
一级:'json:data.result;title;videoCover;msg;id',
二级:'',
二级:'js:var d=[];var vod={vod_id:input};try{let html=request(input);html=JSON.parse(html);let node=html.data;vod={vod_id:node["id"],vod_name:node["videoName"],vod_pic:node["videoCover"],type_name:node["subCategory"],vod_year:node["year"],vod_area:node["area"],vod_remarks:node["msg"],vod_actor:node["actor"],vod_director:node["director"],vod_content:node["brief"].strip()};let tid=input.split("ids=")[1];let listUrl="http://api.kunyu77.com/api.php/provide/videoPlaylist?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&version=1.8.7&ids="+tid;html=request(listUrl);html=JSON.parse(html);let episodes=html.data.episodes;let playMap={};play_url=play_url.replace("&play_url=","&type=json&play_url=");episodes.forEach(function(ep){let playurls=ep["playurls"];playurls.forEach(function(playurl){source=playurl["playfrom"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(playurl["title"].strip()+"$"+play_url+urlencode(playurl["playurl"]))})});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key].join("#"))});let vod_play_from=playFrom.join("$$$");let vod_play_url=playList.join("$$$");vod["vod_play_from"]=vod_play_from;vod["vod_play_url"]=vod_play_url}catch(e){log("获取二级详情页发生错误:"+e.message)}',
搜索:'',
搜索:'json:data;videoName;videoCover;msg;id',
}
\ No newline at end of file
......@@ -109,6 +109,7 @@ Array.prototype.join = function (emoji) {
return str;
};
Array.prototype.append = Array.prototype.push;
String.prototype.strip = String.prototype.trim;
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);
......
js:
var d=[];
var vod={vod_id:input};
// print(input);
try {
let html=request(input);
html = JSON.parse(html);
let node = html.data;
vod = {
"vod_id":node['id'],
"vod_name":node['videoName'],
"vod_pic":node['videoCover'],
"type_name":node['subCategory'],
"vod_year":node['year'],
"vod_area":node['area'],
"vod_remarks":node['msg'],
"vod_actor":node['actor'],
"vod_director":node['director'],
"vod_content":node['brief'].strip()
}
// print(vod);
let tid = input.split('ids=')[1];
let listUrl = 'http://api.kunyu77.com/api.php/provide/videoPlaylist?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&version=1.8.7&ids='+tid;
html = request(listUrl);
html = JSON.parse(html);
let episodes = html.data.episodes;
let playMap = {};
play_url = play_url.replace('&play_url=','&type=json&play_url=');
episodes.forEach(function (ep){
let playurls = ep['playurls'];
playurls.forEach(function (playurl){
source = playurl['playfrom'];
if(!playMap.hasOwnProperty(source)){
playMap[source] = [];
}
playMap[source].append(playurl['title'].strip() + '$' + play_url+urlencode(playurl['playurl']));
});
});
let playFrom = [];
let playList = [];
Object.keys(playMap).forEach(function (key){
playFrom.append(key);
playList.append(playMap[key].join('#'));
});
// print(playFrom);
// print(playList);
let vod_play_from = playFrom.join('$$$');
let vod_play_url = playList.join('$$$');
vod['vod_play_from'] = vod_play_from;
vod['vod_play_url'] = vod_play_url;
// print(vod);
}catch (e) {
log('获取二级详情页发生错误:'+e.message);
}
\ No newline at end of file
js:
function GetPlayUrl(playUrl) {
let realPlay = {parse:0,url:playUrl};
if (/mgtv|sohu/.test(playUrl)) {
realPlay.headers = {'User-Agent':'Mozilla/5.0'};
} else if (/bili/.test(playUrl)) {
realPlay.headers ={'User-Agent':'Mozilla/5.0','Referer':'https://www.bilibili.com'};
} else if (/ixigua/.test(playUrl)) {
realPlay.headers = {'User-Agent':'Mozilla/5.0','Referer':'https://www.ixigua.com'};
}
return realPlay
}
if (/\.m3u8|\.mp4/.test(input)) {
input={parse:0,url:input};
} else {
try {
let url = "http://api.kunyu77.com/api.php/provide/parserUrl?url=" + input;
let html = request(url);
let urll = JSON.parse(html).data.url;
let playhtml = request(urll);
let playurl = JSON.parse(playhtml).url;
input = GetPlayUrl(playurl);
}catch (e) {
input = {parse:1,url:input};
}
}
\ No newline at end of file
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : 酷云筛选.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/24
import requests
headers = {
"User-Agent": "Dalvik/2.1.0"
}
def getClass():
url = 'http://api.kunyu77.com/api.php/provide/filter'
r = requests.get(url, headers=headers)
html = r.json()
class_names = []
class_urls = []
data = html['data']
for i in data:
class_names.append(data[i][0]['cat'])
class_urls.append(i)
print('&'.join(class_names))
print('&'.join(class_urls))
ft_dict = {}
def getCate():
# url = 'http://api.kunyu77.com/api.php/provide/searchFilter?devid=EA83E58357FC020ABA526E9620AD7E89&package=com.sevenVideo.app.android&pcode=010110004&year=&category=&area=&pagenum=1&type_id=0&pagesize=24'
url = 'http://api.kunyu77.com/api.php/provide/searchFilter?year=&category=&area=&pagenum=1&type_id=1&pagesize=24'
r = requests.get(url,headers=headers)
html = r.json()
print(html)
filters = html['data']['conditions']
print(filters)
cates = [0,1,2,3,4] # 全部&电影&电视剧&综艺&动漫
for cate in cates:
getOne(cate,filters)
print(ft_dict)
def getOne(cate_id,filters):
ft_dict[cate_id] = []
print(filters)
if 'cat' in filters.keys():
del filters['cat']
for key in (filters):
value = [{"n":"全部","v":""}]
name_dict = {
'y':'年代',
'a':'地区',
'scat':'类型',
}
# value = []
vl = [{"n": i['name'], "v": i.get('value', '')} for i in filters[key]]
value.extend(vl)
ft_dict[cate_id].append({
'key': key,
'name': name_dict[key],
'value': value
})
return ft_dict
if __name__ == '__main__':
getCate()
\ No newline at end of file
#coding=utf-8
#!/usr/bin/python
import sys
sys.path.append('..')
from base.spider import Spider
import json
class Spider(Spider):
def getName(self):
return "77"
def init(self,extend=""):
print("============{0}============".format(extend))
pass
def homeContent(self,filter):
result = {}
url = 'http://api.kunyu77.com/api.php/provide/filter'
rsp = self.fetch(url,headers=self.header)
jo = json.loads(rsp.text)
classes = []
jData = jo['data']
for cKey in jData.keys():
classes.append({
'type_name':jData[cKey][0]['cat'],
'type_id':cKey
})
result['class'] = classes
if(filter):
result['filters'] = self.config['filter']
return result
def homeVideoContent(self):
url = 'http://api.kunyu77.com/api.php/provide/homeBlock?type_id=0'
rsp = self.fetch(url,headers=self.header)
jo = json.loads(rsp.text)
blockList = jo['data']['blocks']
videos = []
for block in blockList:
vodList = block['contents']
for vod in vodList:
videos.append({
"vod_id":vod['id'],
"vod_name":vod['title'],
"vod_pic":vod['videoCover'],
"vod_remarks":vod['msg']
})
result = {
'list':videos
}
return result
def categoryContent(self,tid,pg,filter,extend):
result = {}
if 'type_id' not in extend.keys():
extend['type_id'] = tid
extend['pagenum'] = pg
filterParams = ["type_id", "pagenum"]
params = ["", ""]
for idx in range(len(filterParams)):
fp = filterParams[idx]
if fp in extend.keys():
params[idx] = '&'+filterParams[idx]+'='+extend[fp]
suffix = ''.join(params)
url = 'http://api.kunyu77.com/api.php/provide/searchFilter?pagesize=24{0}'.format(suffix)
rsp = self.fetch(url,headers=self.header)
jo = json.loads(rsp.text)
vodList = jo['data']['result']
videos = []
for vod in vodList:
videos.append({
"vod_id":vod['id'],
"vod_name":vod['title'],
"vod_pic":vod['videoCover'],
"vod_remarks":vod['msg']
})
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self,array):
tid = array[0]
url = 'http://api.kunyu77.com/api.php/provide/videoDetail?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&version=1.8.7&ids={0}'.format(tid)
rsp = self.fetch(url,headers=self.header)
jo = json.loads(rsp.text)
node = jo['data']
vod = {
"vod_id":node['id'],
"vod_name":node['videoName'],
"vod_pic":node['videoCover'],
"type_name":node['subCategory'],
"vod_year":node['year'],
"vod_area":node['area'],
"vod_remarks":node['msg'],
"vod_actor":node['actor'],
"vod_director":node['director'],
"vod_content":node['brief'].strip()
}
listUrl = 'http://api.kunyu77.com/api.php/provide/videoPlaylist?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&version=1.8.7&ids={0}'.format(tid)
listRsp = self.fetch(listUrl,headers=self.header)
listJo = json.loads(listRsp.text)
playMap = {}
episodes = listJo['data']['episodes']
for ep in episodes:
playurls = ep['playurls']
for playurl in playurls:
source = playurl['playfrom']
if source not in playMap.keys():
playMap[source] = []
playMap[source].append(playurl['title'].strip() + '$' + playurl['playurl'])
playFrom = []
playList = []
for key in playMap.keys():
playFrom.append(key)
playList.append('#'.join(playMap[key]))
vod_play_from = '$$$'
vod_play_from = vod_play_from.join(playFrom)
vod_play_url = '$$$'
vod_play_url = vod_play_url.join(playList)
vod['vod_play_from'] = vod_play_from
vod['vod_play_url'] = vod_play_url
result = {
'list':[
vod
]
}
return result
def searchContent(self,key,quick):
url = 'http://api.kunyu77.com/api.php/provide/searchVideo?searchName={0}'.format(key)
rsp = self.fetch(url,headers=self.header)
jo = json.loads(rsp.text)
vodList = jo['data']
videos = []
for vod in vodList:
videos.append({
"vod_id":vod['id'],
"vod_name":vod['videoName'],
"vod_pic":vod['videoCover'],
"vod_remarks":vod['msg']
})
result = {
'list':videos
}
return result
config = {
"player": {},
"filter": {}
}
header = {
"User-Agent":"Dalvik/2.1.0"
}
def playerContent(self,flag,id,vipFlags):
result = {}
url = 'http://api.kunyu77.com/api.php/provide/parserUrl?url={0}'.format(id)
jo = self.fetch(url,headers=self.header).json()
result = {
'parse':0,
'jx':0,
'playUrl':'',
'url':id,
'header':''
}
if flag in vipFlags:
result['parse'] = 1
result['jx'] = 1
return result
def isVideoFormat(self,url):
pass
def manualVideoCheck(self):
pass
def localProxy(self,param):
return [200, "video/MP2T", action, ""]
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册