更新央视

This commit is contained in:
晚风拂柳颜 2024-01-10 20:28:18 +08:00
parent f045dbe823
commit cd8cb1aaf1
10 changed files with 609 additions and 128 deletions

View File

@ -19,9 +19,9 @@
"quickSearch":0,
"filterable":0
},
{
"key":"hipy_t4_base",
"name":"base(hipy_t4)",
{
"key":"hipy_t4_base_spider",
"name":"base_spider(hipy_t4)",
"type":4,
"api":"http://192.168.31.49:5707/api/v1/vod/base_spider",
"searchable":1,
@ -30,8 +30,8 @@
"ext":"base_spider"
},
{
"key": "hipy_t3_base",
"name": "base(hipy_t3)",
"key": "hipy_t3_base_spider",
"name": "base_spider(hipy_t3)",
"type": 3,
"api": "{{host}}/txt/hipy/base_spider.py",
"searchable": 1,
@ -40,26 +40,46 @@
"ext": "{{host}}/txt/hipy/base_spider.json"
},
{
"key":"hipy_t4_cctv",
"name":"cctv(hipy_t4)",
"key":"hipy_t4_cntv央视",
"name":"cntv央视(hipy_t4)",
"type":4,
"api":"http://192.168.31.49:5707/api/v1/vod/cctv_spider?api_ext={{host}}/txt/hipy/cctv_spider.json",
"api":"http://192.168.31.49:5707/api/v1/vod/cntv央视?api_ext={{host}}/txt/hipy/cntv央视.json",
"searchable":1,
"quickSearch":0,
"filterable":1,
"ext":"cctv_spider",
},
{
"key": "hipy_t3_cctv",
"name": "cctv(hipy_t3)",
"ext":"cntv央视"
},
{
"key": "hipy_t3_cntv央视",
"name": "cntv央视(hipy_t3)",
"type": 3,
"api": "{{host}}/txt/hipy/cctv_spider.py",
"api": "{{host}}/txt/hipy/cntv央视.py",
"searchable": 1,
"quickSearch": 0,
"filterable": 1,
"ext": "{{host}}/txt/hipy/cctv_spider.json"
"ext": "{{host}}/txt/hipy/cntv央视.json"
},
{
"key":"hipy_t4_两个BT",
"name":"两个BT(hipy_t4)",
"type":4,
"api":"http://192.168.31.49:5707/api/v1/vod/两个BT?api_ext={{host}}/txt/hipy/两个BT.json",
"searchable":1,
"quickSearch":0,
"filterable":1,
"ext":"两个BT"
},
{
"key": "hipy_t3_两个BT",
"name": "两个BT(hipy_t3)",
"type": 3,
"api": "{{host}}/txt/hipy/两个BT.py",
"searchable": 1,
"quickSearch": 0,
"filterable": 1,
"ext": "{{host}}/txt/hipy/两个BT.json"
},
{
"key":"hipy_t4_樱花动漫",
"name":"樱花动漫(hipy_t4)",
"type":4,
@ -79,16 +99,6 @@
"filterable": 1,
"ext": "https://jihulab.com/qiaoji/open/-/raw/main/yinghua"
},
{
"key":"hipy_t4_两个BT",
"name":"两个BT(hipy_t4)",
"type":4,
"api":"http://192.168.31.49:5707/api/v1/vod/两个BT?api_ext={{host}}/txt/hipy/两个BT.json",
"searchable":1,
"quickSearch":0,
"filterable":1,
"ext":"两个BT"
},
{"key":"Test_jsapi","name":"Test_jsapi(drpy)","type":3,"api":"{{host}}/libs/drpy2.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/js/jsapi.js","jar":"{{host}}/libs/jar/custom_jsapi.jar"},
# 缓存js

Binary file not shown.

View File

@ -1,58 +1,64 @@
📺|定期维护,#genre#
2023-11-22,https://vdse.bdstatic.com//13da18e12728e9d7849f6589a3070b4c.mp4
海阔道长,https://vd2.bdstatic.com/mda-mhhf5mr00yyhpfjs/1080p/cae_h264/1629284581057661229/mda-mhhf5mr00yyhpfjs.mp4
🌏|电视频道,#genre#
CCTV1,http://cfss.cc/api/ysp/cctv1.m3u8
CCTV2,http://cfss.cc/api/ysp/cctv2.m3u8
CCTV3,http://cfss.cc/api/ysp/cctv3.m3u8
CCTV4,http://58.220.219.14:9901/tsfile/live/0004_1.m3u8?key=txiptv
CCTV4K,http://cfss.cc/api/ysp/cctv4k.m3u8
CCTV5,https://node1.olelive.com:6443/live/CCTV5HD/hls.m3u8
CCTV6,http://cfss.cc/api/ysp/cctv6.m3u8
CCTV7,https://node1.olelive.com:6443/live/CCTV7HD/hls.m3u8
CCTV8,http://cfss.cc/api/ysp/cctv8.m3u8
CCTV9,http://cfss.cc/api/ysp/cctv9.m3u8
CCTV10,https://node1.olelive.com:6443/live/CCTV10HD/hls.m3u8
CCTV11,https://iptv.luas.edu.cn/liverespath/3d0aa0f1604f13f0ae90c2dc0590ca22a1bcaaa2/646e868153-0-0-a53121a1df5b93a74d1980270e652878/index.m3u8
CCTV13,https://live-play.cctvnews.cctv.com/cctv/merge_cctv13.m3u8
CCTV14,http://cyz32.livehbindex.hbcatv.cn/live/8a22035194884b1eb5515aac434c313c.m3u8?bitrate=2300&pt=5
CCTV15,http://gxdl-lhs.8866.org:85/tsfile/live/1025_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV16,http://120.196.232.124:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226825/1.m3u8
CCTV17,http://120.196.232.124:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226660/1.m3u8
CCTV娱乐,http://line.premiumpowers.net/play/live.php?mac=00:1A:79:73:45:10&extension=ts&stream=156405
CCTV戏曲,http://line.premiumpowers.net/play/live.php?mac=00:1A:79:73:45:10&extension=ts&stream=156406
TVB,http://38.64.72.148/hls/modn/list/4005/chunklist1.m3u8
北京卫视,http://angtv.cc/test/lngd.php?id=083
黑龙江卫视,http://122.224.153.162:9901/tsfile/live/0143_1.m3u8?key=txiptv
吉林卫视,http://jltpc.x3322.net:9901/tsfile/live/0116_1.m3u8?key=txiptv
辽宁卫视,http://angtv.cc/test/lngd.php?id=058
河北卫视,http://jltpc.x3322.net:9901/tsfile/live/0117_1.m3u8?key=txiptv
山东卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001028/index.m3u8
山西卫视,http://jltpc.x3322.net:9901/tsfile/live/0118_1.m3u8?key=txiptv
天津卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001036/index.m3u8
江苏卫视,http://cfss.cc/api/ysp/jsws.m3u8
安徽卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001037/index.m3u8
江西卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001034/index.m3u8
浙江卫视,http://hw-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8
东方卫视,http://cfss.cc/api/ysp/dfws.m3u8
河南卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001222/index.m3u8
湖北卫视,https://iptv.luas.edu.cn/liverespath/a8e4cf2bade25844b998d7743d83331412ea841f/09ef2cf7aa-0-0-41178ff5e45faa352937baadccc115df/index.m3u8
湖南卫视,http://120.196.232.124:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226698/1.m3u8
东南卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001201/index.m3u8
广东卫视,http://cfss.cc/api/ysp/gdws.m3u8
广西卫视,http://live.gxrb.com.cn/tv/gxtvlive03/index.m3u8
海南卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001183/index.m3u8
云南卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001223/index.m3u8
贵州卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001184/index.m3u8
重庆卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001129/index.m3u8
四川卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001130/index.m3u8
西藏卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001072/index.m3u8
青海卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001082/index.m3u8
新疆卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001065/index.m3u8
甘肃卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001298/index.m3u8
宁夏卫视,http://hls.live.cqccn.com/__cl/cg:live/__c/ningxia/__op/default/__f/index.m3u8
陕西卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001067/index.m3u8
内蒙古卫视,http://222.175.159.226:808/hls/202366/index.m3u8
凤凰卫视,http://113.117.74.28:8081/hls/37/index.m3u8
凤凰资讯,http://[2409:8087:2001:20:2800:0:df6e:eb27]:80/wh7f454c46tw1890984412_1778241929/ott.mobaibox.com/PLTV/3/224/3221228524/index.m3u8?icpid=3&RTS=1674373416&from=40&popid=40&hms_devid=2293&prioritypopid=40&vqe=3
📺|定期维护,#genre#
2023-11-23,https://vdse.bdstatic.com//13da18e12728e9d7849f6589a3070b4c.mp4
海阔道长,https://vd2.bdstatic.com/mda-mhhf5mr00yyhpfjs/1080p/cae_h264/1629284581057661229/mda-mhhf5mr00yyhpfjs.mp4
🌏|电视频道,#genre#
CCTV1,http://angtv.cc/test/lngd.php?id=488
CCTV2,https://node1.olelive.com:6443/live/CCTV2HD/hls.m3u8
CCTV3,https://iptv.luas.edu.cn/liverespath/f76f9947c68be18d7a456e25aa59a08c5747e6a5/0df24da9ec-0-0-dca40ddadd2a051ce1a83536d9310820/index.m3u8
CCTV4,http://cfss.cc/api/ysp/cctv4.m3u8
CCTV4K,http://cfss.cc/api/ysp/cctv4k.m3u8
CCTV5,https://node1.olelive.com:6443/live/CCTV5HD/hls.m3u8
CCTV6,http://cfss.cc/api/ysp/cctv6.m3u8
CCTV7,http://49.235.110.121:9090/898/peda/bestv.php?id=cctv7hd8m/8000000
CCTV8,https://node1.olelive.com:6443/live/CCTV8HD/hls.m3u8
CCTV9,http://cfss.cc/api/ysp/cctv9.m3u8
CCTV10,http://cfss.cc/api/ysp/cctv10.m3u8
CCTV11,http://cfss.cc/api/ysp/cctv11.m3u8
CCTV12,http://cfss.cc/ds/bst.php?id=Cf-13
CCTV13,https://live-play.cctvnews.cctv.com/cctv/merge_cctv13.m3u8
CCTV14,http://cyz32.livehbindex.hbcatv.cn/live/8a22035194884b1eb5515aac434c313c.m3u8?bitrate=2300&pt=5
CCTV15,http://cfss.cc/api/ysp/cctv15.m3u8
CCTV16,http://120.196.232.124:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226825/1.m3u8
CCTV17,http://120.196.232.124:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226727/1.m3u8
CCTV娱乐,http://line.premiumpowers.net/play/live.php?mac=00:1A:79:73:45:10&extension=ts&stream=156405
CCTV戏曲,http://line.premiumpowers.net/play/live.php?mac=00:1A:79:73:45:10&extension=ts&stream=156406
TVB,http://38.64.72.148:80/hls/modn/list/4005/chunklist0.m3u8
五星体育,https://live.goodiptv.club/api/bestv.php?id=wxtyhd8m/8000000
咪咕体育,http://[2409:8087:1a01:df::4077]/PLTV/88888888/224/3221225895/index.m3u8
纬来体育,http://198.16.100.90:8278/videolandsport/playlist.m3u8?tid=MA6A1192684511926845&ct=19226&tsum=0b7ca9a61e7371df68108a27dc358c68
超级体育,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8
精品体育,http://[2409:8087:2001:20:2800:0:df6e:eb1b]:80/wh7f454c46tw2797725038_-2054878207/ott.mobaibox.com/PLTV/3/224/3221227615/index.m3u8
北京卫视,http://120.196.232.124:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226719/1.m3u8
黑龙江卫视,http://122.224.153.162:9901/tsfile/live/0143_1.m3u8?key=txiptv
吉林卫视,http://jltpc.x3322.net:9901/tsfile/live/0116_1.m3u8?key=txiptv
辽宁卫视,https://iptv.luas.edu.cn/liverespath/73aedb8ffd21b3b8afe4664591d4cb3a5cced827/bdc834c533-0-0-aefef0ed39d19073554f1c7e80a25cbc/index.m3u8
河北卫视,http://jltpc.x3322.net:9901/tsfile/live/0117_1.m3u8?key=txiptv
山东卫视,https://iptv.luas.edu.cn/liverespath/8b205af319dcc92c60a69a96423af21b24a29ca0/dd6f0a43db-0-0-63f6f29dcc6843fd6b50323d4bfc8b09/index.m3u8
山西卫视,http://218.17.196.234:9901/tsfile/live/0118_1.m3u8
天津卫视,http://120.196.232.124:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226686/1.m3u8
江苏卫视,https://iptv.luas.edu.cn/liverespath/0be64515076e489456de2f33e7b58ff1b392d3b3/8c0352e42d-0-0-2529f61c8f420136013f1ab8a93169c3/index.m3u8
安徽卫视,https://iptv.luas.edu.cn/liverespath/6e91e17de838dbf7c77f9ed8e41726bd4a1516f5/494a63d492-0-0-94541fa104bd30ce82410455ab950402/index.m3u8
江西卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001034/index.m3u8
浙江卫视,http://hw-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8
东方卫视,https://iptv.luas.edu.cn/liverespath/4015e6015b3b818a4cbc2247960b8536a3cd0153/0bc51b40df-0-0-23a64a0dc546104d1ba498a41ff49540/index.m3u8
河南卫视,http://angtv.cc/test/lngd.php?id=339
湖北卫视,http://113.100.193.10:9901/tsfile/live/0132_1.m3u8
湖南卫视,http://jltpc.x3322.net:9901/tsfile/live/0117_2.m3u8?key=txiptv
东南卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001201/index.m3u8
广东卫视,https://iptv.luas.edu.cn/liverespath/57e80ee85ec1f4e523e1bca55f5a676abd292db8/0ff9a42344-0-0-0eb4f8fe53cdbc02d1db696ecc425752/index.m3u8
广东体育,http://gxdl-lhs.8866.org:85/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
广西卫视,http://live.gxrb.com.cn/tv/gxtvlive03/index.m3u8
海南卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001183/index.m3u8
云南卫视,https://iptv.luas.edu.cn/liverespath/d45a277ca433670e3f463b497783af19bb2c63f8/3f1dcf4cf3-0-0-3f0618b5bab73c0ebb1be6c66ccbf65d/index.m3u8
贵州卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001184/index.m3u8
重庆卫视,https://iptv.luas.edu.cn/liverespath/b14734af7f740eb61419248c57e25551a7d1093f/5255a86445-0-0-4ce4f2e82145e9bc39b5b4ccd7cce4a0/index.m3u8
四川卫视,https://iptv.luas.edu.cn/liverespath/ca3f021632b48e6960797776657926074723d276/027c826f0e-0-0-4caf8e44f0157ea591d8857569b9a2c3/index.m3u8
西藏卫视,http://zteres.sn.chinamobile.com:6060/000000001000/1000000002000015894/1.m3u8?channel-id=ystenlive&Contentid=1000000002000015894&livemode=1&stbId=3
青海卫视,http://stream.qhbtv.com/qhws/playlist.m3u8
新疆卫视,http://zteres.sn.chinamobile.com:6060/000000001000/1000000002000029441/1.m3u8?channel-id=ystenlive&Contentid=1000000002000029441&livemode=1&stbId=3
甘肃卫视,https://iptv.luas.edu.cn/liverespath/975463fd39229112f75925af024d6ed11de84a0e/d46f4f77ca-0-0-3b64a6fd708d6eeeb0e60461ad736b78/index.m3u8
宁夏卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001074/index.m3u8
陕西卫视,https://iptv.luas.edu.cn/liverespath/ebc9ec3e297c071df95d759b6313b9d9dbc3dbda/ef6e859417-0-0-62a8314666ead4b1cf49536375036d60/index.m3u8
内蒙古卫视,http://222.175.159.226:808/hls/202366/index.m3u8
凤凰资讯,http://50.7.238.114:8278/phoenixinfo_hd/playlist.m3u8?tid=m7f4a830029be&ct=18336&tsum=74f57bddc0725f74838380086dce3e44
翡翠台,https://sc2022.stream-link.org/tv2306.php?id=h02&checkedby:iptvcat.com

View File

@ -1 +1 @@
3.9.49beta18
3.9.49beta19

View File

@ -28,22 +28,22 @@ from urllib.parse import quote
t4的配置里ext节点会自动变成api对应query参数extend,但t4的ext字符串不支持路径格式比如./开头或者.json结尾
api里会自动含有ext参数是base64编码后的选中的筛选条件
{
"key":"hipy_t4_base",
"name":"base(hipy_t4)",
"key":"hipy_t4_base_spider",
"name":"base_spider(hipy_t4)",
"type":4,
"api":"http://192.168.31.49:5707/api/v1/vod/base_spider",
"searchable":1,
"quickSearch":1,
"quickSearch":0,
"filterable":1,
"ext":"base_spider"
},
{
"key": "hipy_t3_base",
"name": "base(hipy_t3)",
"key": "hipy_t3_base_spider",
"name": "base_spider(hipy_t3)",
"type": 3,
"api": "{{host}}/txt/hipy/base_spider.py",
"searchable": 1,
"quickSearch": 1,
"quickSearch": 0,
"filterable": 1,
"ext": "{{host}}/txt/hipy/base_spider.json"
},
@ -379,6 +379,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
if __name__ == '__main__':
spider = Spider()
spider.init()
spider.init_api_ext_file() # 生成筛选对应的json文件
spider.searchContent('斗罗大陆')
# spider.init_api_ext_file() # 生成筛选对应的json文件
spider.log({'key': 'value'})
spider.log('====文本内容====')
# spider.searchContent('斗罗大陆')

View File

@ -25,37 +25,36 @@ api里会自动含有ext参数是base64编码后的选中的筛选条件
错误示例,ext含有json:
{
"key":"hipy_cctv",
"name":"hipy_cctv",
"key":"hipy_cntv央视",
"name":"cntv央视(hipy_t4)",
"type":4,
"api":"http://192.168.31.49:5707/api/v1/vod/cctv_spider?api_ext={{host}}/txt/hipy/cctv_spider.json",
"api":"http://192.168.31.49:5707/api/v1/vod/cntv央视?api_ext={{host}}/txt/hipy/cntv央视.json",
"searchable":1,
"quickSearch":1,
"filterable":1,
"ext":"cctv_spider.json"
"filterable":0,
"ext":"cntv央视.json"
}
正确示例同时存在ext和api_ext会优先取ext作为extend加载init
{
"key":"hipy_t4_cctv",
"name":"cctv(hipy_t4)",
"key":"hipy_t4_cntv央视",
"name":"cntv央视(hipy_t4)",
"type":4,
"api":"http://192.168.31.49:5707/api/v1/vod/cctv_spider?api_ext={{host}}/txt/hipy/cctv_spider.json",
"api":"http://192.168.31.49:5707/api/v1/vod/cntv央视?api_ext={{host}}/txt/hipy/cntv央视.json",
"searchable":1,
"quickSearch":1,
"quickSearch":0,
"filterable":1,
"ext":"cctv_spider"
}
"ext":"cntv央视"
},
{
"key": "hipy_t3_cctv",
"name": "cctv(hipy_t3)",
"key": "hipy_t3_cntv央视",
"name": "cntv央视(hipy_t3)",
"type": 3,
"api": "{{host}}/txt/hipy/cctv_spider.py",
"api": "{{host}}/txt/hipy/cntv央视.py",
"searchable": 1,
"quickSearch": 1,
"quickSearch": 0,
"filterable": 1,
"ext": "{{host}}/txt/hipy/cctv_spider.json"
}
"ext": "{{host}}/txt/hipy/cntv央视.json"
},
"""
@ -246,6 +245,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
def homeContent(self, filter):
result = {}
cateManual = {
"4K专区": "4K专区",
"栏目大全": "栏目大全",
"特别节目": "特别节目",
"纪录片": "纪录片",
@ -335,6 +335,11 @@ class Spider(BaseSpider): # 元类 默认的元类 type
url = 'https://api.cntv.cn/lanmu/columnSearch?&fl={0}&fc={1}&cid={2}&p={3}&n=20&serviceId=tvcctv&t=json&cb=ko'.format(
fl, fc, cid, pg)
pagecount = 20
elif tid == '4K专区':
cid = 'CHAL1558416868484111'
url = 'https://api.cntv.cn/NewVideo/getLastVideoList4K?serviceId=cctv4k&cid={0}&p={1}&n={2}&t=json&cb=ko'.format(
cid,pg,pagecount
)
else:
url = 'https://tv.cctv.com/epg/index.shtml'
@ -345,6 +350,12 @@ class Spider(BaseSpider): # 元类 默认的元类 type
if index > -1:
htmlText = htmlText[3:index]
videos = self.get_list1(html=htmlText, tid=tid)
elif tid == '4K专区':
index = htmlText.rfind(');')
if index > -1:
htmlText = htmlText[3:index]
videos = self.get_list_4k(html=htmlText, tid=tid)
else:
videos = self.get_list(html=htmlText, tid=tid)
# print(videos)
@ -378,6 +389,9 @@ class Spider(BaseSpider): # 元类 默认的元类 type
topicId)
# htmlTxt = self.webReadFile(urlStr=Url, header=self.header)
htmlTxt = self.fetch(Url).text
elif tid == "4K专区":
Url = 'https://api.cntv.cn/NewVideo/getVideoListByAlbumIdNew?id={0}&serviceId=cctv4k&p=1&n=100&mode=0&pub=1'.format(id)
print(Url)
else:
Url = 'https://api.cntv.cn/NewVideo/getVideoListByAlbumIdNew?id={0}&serviceId=tvcctv&p=1&n=100&mode=0&pub=1'.format(
id)
@ -397,7 +411,7 @@ class Spider(BaseSpider): # 元类 默认的元类 type
if len(videoList) < 1:
# htmlTxt = self.webReadFile(urlStr=lastVideo, header=self.header)
htmlTxt = self.fetch(lastVideo).text
if tid == "电视剧" or tid == "纪录片":
if tid == "电视剧" or tid == "纪录片" or tid == "4K专区":
patternTxt = r"'title':\s*'(?P<title>.+?)',\n{0,1}\s*'brief':\s*'(.+?)',\n{0,1}\s*'img':\s*'(.+?)',\n{0,1}\s*'url':\s*'(?P<url>.+?)'"
elif tid == "特别节目":
patternTxt = r'class="tp1"><a\s*href="(?P<url>https://.+?)"\s*target="_blank"\s*title="(?P<title>.+?)"></a></div>'
@ -747,22 +761,26 @@ class Spider(BaseSpider): # 元类 默认的元类 type
htmlTxt = self.fetch(url).text
jo = json.loads(htmlTxt)
link = jo['hls_url'].strip()
html = self.webReadFile(urlStr=link, header=self.header)
# 获取域名前缀
urlPrefix = self.get_RegexGetText(Text=link, RegexText='(http[s]?://[a-zA-z0-9.]+)/', Index=1)
# 域名前缀指定替换,然后可以获取到更高质量的视频列表
new_link = link.replace(f'{urlPrefix}/asp/hls/', 'https://dh5.cntv.qcloudcdn.com/asp/h5e/hls/').split('?')[0]
html = self.webReadFile(urlStr=new_link, header=self.header)
content = html.strip()
arr = content.split('\n')
urlPrefix = self.get_RegexGetText(Text=link, RegexText='(http[s]?://[a-zA-z0-9.]+)/', Index=1)
subUrl = arr[-1].split('/')
# subUrl[3] = '1200'
subUrl[3] = '2000'
# subUrl[-1] = '1200.m3u8'
subUrl[-1] = '2000.m3u8'
hdUrl = urlPrefix + '/'.join(subUrl)
url = urlPrefix + arr[-1]
# hdUrl = urlPrefix + arr[-1]
# subUrl[3] = '2000'
# subUrl[-1] = '2000.m3u8'
# hdUrl = urlPrefix + '/'.join(subUrl)
maxVideo = subUrl[-1].replace('.m3u8', '')
hdUrl = link.replace('main', maxVideo)
hdUrl = hdUrl.replace(urlPrefix, 'https://newcntv.qcloudcdn.com')
hdRsp = self.TestWebPage(urlStr=hdUrl, header=self.header)
if hdRsp == 200:
url = hdUrl
url = hdUrl.split('?')[0]
self.log(f'视频链接: {url}')
else:
url = ''
return url
@ -859,11 +877,45 @@ class Spider(BaseSpider): # 元类 默认的元类 type
})
return videos
# 4k分类取结果
def get_list_4k(self, html, tid):
jRoot = json.loads(html)
videos = []
data = jRoot['data']
if data is None:
return []
jsonList = data['list']
for vod in jsonList:
vod_remarks = vod['title']
id = vod['id']
vod = vod['last_video']
img = vod['image']
url = vod['url']
title = vod['title']
brief = vod.get('brief') or ''
year = vod.get('year') or ''
actors = vod.get('actors') or ''
if len(url) == 0:
continue
guids = [tid, title, url, img, id, year, actors, brief]
guid = "||".join(guids)
# print(vod_id)
videos.append({
"vod_id": guid,
"vod_name": title,
"vod_pic": img,
"vod_remarks": vod_remarks
})
return videos
if __name__ == '__main__':
from t4.core.loader import t4_spider_init
spider = Spider()
spider.init()
spider.init_api_ext_file()
t4_spider_init(spider)
print(spider.homeVideoContent())
# spider.init_api_ext_file()
# url = 'https://api.cntv.cn/lanmu/columnSearch?&fl=&fc=%E6%96%B0%E9%97%BB&cid=&p=1&n=20&serviceId=tvcctv&t=jsonp&cb=Callback'
# url = 'https://api.cntv.cn/lanmu/columnSearch?&fl=&fc=&cid=&p=1&n=20&serviceId=tvcctv&t=json&cb=ko'
# r = spider.fetch(url)

View File

@ -496,8 +496,9 @@ class Spider(BaseSpider): # 元类 默认的元类 type
if __name__ == '__main__':
from t4.core.loader import t4_spider_init
spider = Spider()
spider.init()
t4_spider_init(spider)
spider.init_api_ext_file() # 生成筛选对应的json文件
# print(spider.homeVideoContent())

411
txt/hipy/新浪资源.py Normal file
View File

@ -0,0 +1,411 @@
# coding=utf-8
# !/usr/bin/python
import sys
sys.path.append('..')
try:
# from base.spider import Spider as BaseSpider
from base.spider import BaseSpider
except ImportError:
from t4.base.spider import BaseSpider
import time
import re
from urllib import request, parse
import urllib
import urllib.request
from xml.etree.ElementTree import fromstring, ElementTree as et
"""
配置示例:
t4的配置里ext节点会自动变成api对应query参数extend,但t4的ext字符串不支持路径格式比如./开头或者.json结尾
api里会自动含有ext参数是base64编码后的选中的筛选条件
{
"key":"hipy_t4_新浪资源",
"name":"新浪资源(hipy_t4)",
"type":4,
"api":"http://192.168.31.49:5707/api/v1/vod/新浪资源",
"searchable":1,
"quickSearch":0,
"filterable":1,
"ext":""
},
{
"key": "hipy_t3_新浪资源",
"name": "新浪资源(hipy_t3)",
"type": 3,
"api": "{{host}}/txt/hipy/新浪资源.py",
"searchable": 1,
"quickSearch": 0,
"filterable": 1,
"ext": ""
},
"""
class Spider(BaseSpider): # 元类 默认的元类 type
def getName(self):
return "新浪资源" # 除去少儿不宜的内容
filterate = False
def init(self, extend=""):
print("============{0}============".format(extend))
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def homeContent(self, filter):
result = {}
timeClass = time.localtime(time.time())
cateManual = {
'动漫': '3',
'动漫电影': '17',
'综艺': '4',
'纪录片': '5',
'动作片': '6',
'爱情片': '7',
'科幻片': '8',
'战争片': '9',
'剧情片': '10',
'恐怖片': '11',
'喜剧片': '12',
'大陆剧': '13',
'港澳剧': '14',
'台湾剧': '15',
'欧美剧': '16',
'韩剧': '18',
'日剧': '20',
'泰剧': '21',
'体育': '23'
}
# if timeClass.tm_hour>22:
# cateManual['伦理片']='22'
# self.filterate=False
classes = []
for k in cateManual:
classes.append({
'type_name': k,
'type_id': cateManual[k]
})
result['class'] = classes
if (filter):
result['filters'] = self.config['filter']
return result
def homeVideoContent(self):
xmlTxt = self.custom_webReadFile(
urlStr='https://api.xinlangapi.com/xinlangapi.php/provide/vod/from/xlyun/at/xml/?ac=list&h=24')
tree = et(fromstring(xmlTxt))
root = tree.getroot()
listXml = root.iter('list')
videos = self.custom_list(html=listXml)
result = {
'list': videos
}
return result
def categoryContent(self, tid, pg, filter, extend):
result = {}
videos = []
pagecount = 1
limit = 20
total = 9999
Url = 'https://api.xinlangapi.com/xinlangapi.php/provide/vod/from/xlyun/at/xml/?ac=list&t={0}&pg={1}'.format(
tid, pg)
xmlTxt = self.custom_webReadFile(urlStr=Url)
tree = et(fromstring(xmlTxt))
root = tree.getroot()
listXml = root.iter('list')
for vod in listXml:
pagecount = vod.attrib['pagecount']
limit = vod.attrib['pagesize']
total = vod.attrib['recordcount']
videos = self.custom_list(html=root.iter('list'))
result['list'] = videos
result['page'] = pg
result['pagecount'] = pagecount
result['limit'] = limit
result['total'] = total
return result
def detailContent(self, array):
result = {}
aid = array[0].split('###')
id = aid[1]
logo = aid[2]
title = aid[0]
vod_play_from = ['播放线路', ]
vod_year = ''
vod_actor = ''
vod_content = ''
vod_director = ''
type_name = ''
vod_area = ''
vod_lang = ''
vodItems = []
vod_play_url = []
try:
url = 'https://api.xinlangapi.com/xinlangapi.php/provide/vod/from/xlyun/at/xml/?ac=detail&ids=' + id
xmlTxt = self.custom_webReadFile(urlStr=url)
jRoot = et(fromstring(xmlTxt))
xmlList = jRoot.iter('list')
for vod in xmlList:
for x in vod:
for v in x:
if v.tag == 'actor':
vod_actor = v.text
if v.tag == 'director':
vod_director = v.text
if v.tag == 'des':
vod_content = v.text
if v.tag == 'area':
vod_area = v.text
if v.tag == 'year':
vod_year = v.text
if v.tag == 'type':
type_name = v.text
if v.tag == 'lang':
vod_lang = v.text
temporary = self.custom_RegexGetText(Text=xmlTxt, RegexText=r'<dd flag="xlyun">(.+?)</dd>', Index=1)
temporary = temporary.replace('<![CDATA[', '').replace(']]>', '')
vodItems = self.custom_EpisodesList(temporary)
joinStr = "#".join(vodItems)
vod_play_url.append(joinStr)
except:
pass
vod = {
"vod_id": array[0],
"vod_name": title,
"vod_pic": logo,
"type_name": type_name,
"vod_year": vod_year,
"vod_area": vod_area,
"vod_remarks": vod_lang,
"vod_actor": vod_actor,
"vod_director": vod_director,
"vod_content": vod_content
}
vod['vod_play_from'] = "$$$".join(vod_play_from)
vod['vod_play_url'] = "$$$".join(vod_play_url)
result = {
'list': [
vod
]
}
if self.filterate == True and self.custom_RegexGetText(Text=type_name, RegexText=r'(伦理|倫理|福利)',
Index=1) != '':
result = {'list': []}
return result
def searchContent(self, key, quick, pg=1):
Url = 'https://api.xinlangapi.com/xinlangapi.php/provide/vod/from/xlyun/at/xml/?ac=list&wd={0}&pg={1}'.format(
urllib.parse.quote(key), '1')
xmlTxt = self.custom_webReadFile(urlStr=Url)
tree = et(fromstring(xmlTxt))
root = tree.getroot()
listXml = root.iter('list')
videos = self.custom_list(html=listXml)
result = {
'list': videos
}
return result
def playerContent(self, flag, id, vipFlags):
result = {}
parse = 1
url = id
htmlTxt = self.custom_webReadFile(urlStr=url, header=self.header)
url = self.custom_RegexGetText(Text=htmlTxt, RegexText=r'(https{0,1}://.+?\.m3u8)', Index=1)
if url.find('.m3u8') < 1:
url = id
parse = 0
result["parse"] = parse # 0=直接播放、1=嗅探
result["playUrl"] = ''
result["url"] = url
result['jx'] = 0 # VIP解析,0=不解析、1=解析
result["header"] = ''
return result
config = {
"player": {},
"filter": {}
}
header = {}
def localProxy(self, param):
return [200, "video/MP2T", action, ""]
# -----------------------------------------------自定义函数-----------------------------------------------
# 正则取文本
def custom_RegexGetText(self, Text, RegexText, Index):
returnTxt = ""
Regex = re.search(RegexText, Text, re.M | re.S)
if Regex is None:
returnTxt = ""
else:
returnTxt = Regex.group(Index)
return returnTxt
# 分类取结果
def custom_list(self, html):
ListRe = html
videos = []
temporary = []
for vod in ListRe:
for value in vod:
for x in value:
if x.tag == 'name':
title = x.text
if x.tag == 'id':
id = x.text
if x.tag == 'type':
tid = x.text
if x.tag == 'last':
last = x.text
temporary.append({
"name": title,
"id": id,
"last": last
})
if len(temporary) > 0:
idTxt = ''
for vod in temporary:
idTxt = idTxt + vod['id'] + ','
if len(idTxt) > 1:
idTxt = idTxt[0:-1]
url = 'https://api.xinlangapi.com/xinlangapi.php/provide/vod/from/xlyun/at/xml/?ac=detail&ids=' + idTxt
xmlTxt = self.custom_webReadFile(urlStr=url)
jRoot = et(fromstring(xmlTxt))
xmlList = jRoot.iter('list')
for vod in xmlList:
for x in vod:
for v in x:
if v.tag == 'name':
title = v.text
if v.tag == 'id':
vod_id = v.text
if v.tag == 'pic':
img = v.text
if v.tag == 'note':
remarks = v.text
if v.tag == 'year':
vod_year = v.text
if v.tag == 'type':
type_name = v.text
if self.filterate == True and self.custom_RegexGetText(Text=type_name,
RegexText=r'(伦理|倫理|福利)',
Index=1) != '':
continue
vod_id = '{0}###{1}###{2}'.format(title, vod_id, img)
# vod_id='{0}###{1}###{2}###{3}###{4}###{5}###{6}###{7}###{8}###{9}###{10}'.format(title,vod_id,img,vod_actor,vod_director,'/'.join(type_name),'/'.join(vod_time),'/'.join(vod_area),vod_lang,vod_content,vod_play_url)
# print(vod_id)
videos.append({
"vod_id": vod_id,
"vod_name": title,
"vod_pic": img,
"vod_year": vod_year,
"vod_remarks": remarks
})
return videos
# 访问网页
def custom_webReadFile(self, urlStr, header=None, codeName='utf-8'):
html = ''
if header == None:
header = {
"Referer": urlStr,
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36',
"Host": self.custom_RegexGetText(Text=urlStr, RegexText='https*://(.*?)(/|$)', Index=1)
}
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context#全局取消证书验证
req = urllib.request.Request(url=urlStr, headers=header) # ,headers=header
with urllib.request.urlopen(req) as response:
html = response.read().decode(codeName)
return html
# 取剧集区
def custom_lineList(self, Txt, mark, after):
circuit = []
origin = Txt.find(mark)
while origin > 8:
end = Txt.find(after, origin)
circuit.append(Txt[origin:end])
origin = Txt.find(mark, end)
return circuit
# 正则取文本,返回数组
def custom_RegexGetTextLine(self, Text, RegexText, Index):
returnTxt = []
pattern = re.compile(RegexText, re.M | re.S)
ListRe = pattern.findall(Text)
if len(ListRe) < 1:
return returnTxt
for value in ListRe:
returnTxt.append(value)
return returnTxt
# 取集数
def custom_EpisodesList(self, html):
ListRe = html.split('#')
videos = []
for vod in ListRe:
t = vod.split('$')
url = t[1]
title = t[0]
if len(url) == 0:
continue
videos.append(title + "$" + url)
return videos
# 取分类
def custom_classification(self):
xmlTxt = self.custom_webReadFile(
urlStr='https://api.xinlangapi.com/xinlangapi.php/provide/vod/from/xlyun/at/xml/')
tree = et(fromstring(xmlTxt))
root = tree.getroot()
classXml = root.iter('class')
temporaryClass = {}
for vod in classXml:
for value in vod:
if self.custom_RegexGetText(Text=value.text, RegexText=r'(福利|倫理片|伦理片)', Index=1) != '':
continue
temporaryClass[value.text] = value.attrib['id']
print("'{0}':'{1}',".format(value.text, value.attrib['id']))
return temporaryClass
if __name__ == '__main__':
from t4.core.loader import t4_spider_init
spider = Spider()
t4_spider_init(spider)
print(spider.homeContent(True))
print(spider.homeVideoContent())
# T=Spider()
# T. homeContent(filter=False)
# T.custom_classification()
# l=T.homeVideoContent()
# l=T.searchContent(key='柯南',quick='')
# l=T.categoryContent(tid='22',pg='1',filter=False,extend={})
# for x in l['list']:
# print(x['vod_name'])
# mubiao= l['list'][2]['vod_id']
# # print(mubiao)
# playTabulation=T.detailContent(array=[mubiao,])
# # print(playTabulation)
# vod_play_from=playTabulation['list'][0]['vod_play_from']
# vod_play_url=playTabulation['list'][0]['vod_play_url']
# url=vod_play_url.split('$$$')
# vod_play_from=vod_play_from.split('$$$')[0]
# url=url[0].split('$')
# url=url[1].split('#')[0]
# # print(url)
# m3u8=T.playerContent(flag=vod_play_from,id=url,vipFlags=True)
# print(m3u8)

View File

@ -26,7 +26,7 @@ api里会自动含有ext参数是base64编码后的选中的筛选条件
"type":4,
"api":"http://192.168.31.49:5707/api/v1/vod/樱花动漫",
"searchable":1,
"quickSearch":1,
"quickSearch":0,
"filterable":1,
"ext":"https://jihulab.com/qiaoji/open/-/raw/main/yinghua"
},
@ -360,15 +360,15 @@ if __name__ == '__main__':
# 在线aes测试 https://config.net.cn/tools/AES.html
# 分类页:http://60.204.185.245:7090/appto/v1/home/cateData?id=1
# 推荐页:http://60.204.185.245:7090/appto/v1/config/get?p=android
from t4.core.loader import t4_spider_init
spider = Spider()
# spider.init('https://jihulab.com/qiaoji/open/-/raw/main/yinghua')
spider.init()
t4_spider_init(spider,'https://jihulab.com/qiaoji/open/-/raw/main/yinghua')
# spider.init_api_ext_file() # 生成筛选对应的json文件
# print(spider.homeContent(True))
# print(spider.homeVideoContent())
# print(spider.categoryContent('1', 1, True, {'year': '2024'}))
# print(spider.detailContent([110078]))
# print(spider.searchContent('斗罗大陆'))
print(spider.searchContent('斗罗大陆'))
# print(spider.playerContent(None, 'f1d7d074f624e993e425f|11d1d091b0b28|31613145e4a7c|518737c8650978', None))
# spider.searchContent('斗罗大陆')