"茶杯狐"

"https://www.cupfox.in/"

zpccool (13551) 16小时前 下载:312

视频
"茶杯狐视频"
二维码导入(APP尚未完成该功能)
// @name "茶杯狐"
// @uuid chabeihu
// @version 1.0.0
// @author AI
// @url "https://www.cupfox.in/"
// @enabled true
// @description "茶杯狐视频"
// @group "影视"
// @type video

var BASE = "https://www.cupfox.in/";

function fixUrl(u) {
    if (!u) return "";
    if (/^https?:\/\//i.test(u)) return u;
    if (u.charAt(0) === '/') u = u.substring(1);
    return BASE.replace(/\/$/, '') + '/' + u;
}

async function search(keyword, page) {
    var url = BASE + 'search?q=' + encodeURIComponent(keyword);
    if (page > 1) url += '&page=' + page;
    var html = await legado.http.get(url);
    var doc = legado.dom.parse(html);
    var items = legado.dom.selectAll(doc, '.movie-list-item');
    var list = [];
    for (var i = 0; i < items.length; i++) {
        var item = items[i];
        var name = legado.dom.selectText(item, '.movie-title');
        var bookUrl = legado.dom.selectAttr(item, '.movie-post-wrapper a', 'href');
        var coverUrl = legado.dom.selectAttr(item, '.movie-post-wrapper img', 'src');
        if (name && bookUrl) {
            list.push({
                name: name,
                bookUrl: fixUrl(bookUrl),
                coverUrl: fixUrl(coverUrl),
                author: '',
                kind: ''
            });
        }
    }
    legado.dom.free(doc);
    return list;
}

async function bookInfo(bookUrl) {
    var html = await legado.http.get(bookUrl);
    var doc = legado.dom.parse(html);
    
    var name = '';
    var titleEl = legado.dom.select(doc, 'h1');
    if (titleEl) name = legado.dom.text(titleEl);
    
    if (!name) {
        var titleMatch = html.match(/<title>([^<]+)<\/title>/);
        if (titleMatch) {
            name = titleMatch[1].replace('在线观看 - 茶杯狐 Cupfox', '').trim();
            name = name.replace('茶杯狐 Cupfox', '').trim();
        }
    }
    
    if (!name) {
        var titleEl2 = legado.dom.select(doc, '.movie-title');
        if (titleEl2) name = legado.dom.text(titleEl2);
    }
    
    if (!name) {
        var titleEl3 = legado.dom.select(doc, '.title');
        if (titleEl3) name = legado.dom.text(titleEl3);
    }
    
    var coverUrl = '';
    var coverMatch = html.match(/<img[^>]*src="([^"]*\/uimg\/[^"]+)"[^>]*>/);
    if (coverMatch) coverUrl = coverMatch[1];
    
    if (!coverUrl) {
        var imgEl = legado.dom.select(doc, 'img[src*="/uimg/"]');
        if (imgEl) coverUrl = legado.dom.attr(imgEl, 'src');
    }
    
    if (!coverUrl) {
        var imgEl2 = legado.dom.select(doc, 'img[src*="/simg/"]');
        if (imgEl2) coverUrl = legado.dom.attr(imgEl2, 'src');
    }
    
    var intro = '';
    var descEl = legado.dom.select(doc, '.subject-desc');
    if (descEl) {
        intro = legado.dom.text(descEl).replace(/简介[::]?/g, '').trim();
    }
    
    if (!intro) {
        var descEl2 = legado.dom.select(doc, '.desc');
        if (descEl2) {
            intro = legado.dom.text(descEl2).replace(/简介[::]?/g, '').trim();
        }
    }
    
    legado.dom.free(doc);
    return {
        name: name,
        author: '',
        bookUrl: bookUrl,
        tocUrl: bookUrl,
        coverUrl: fixUrl(coverUrl),
        intro: intro,
        latestChapter: '',
        kind: ''
    };
}

async function chapterList(tocUrl) {
    var html = await legado.http.get(tocUrl);
    var doc = legado.dom.parse(html);
    var list = [];
    var items = legado.dom.selectAll(doc, '[ep_slug]');
    for (var i = 0; i < items.length; i++) {
        var item = items[i];
        var slug = legado.dom.attr(item, 'ep_slug');
        var name = legado.dom.text(item);
        if (name) {
            list.push({
                name: name,
                url: tocUrl + '#ep' + slug
            });
        }
    }
    legado.dom.free(doc);
    return list;
}

async function chapterContent(chapterUrl) {
    var match = chapterUrl.match(/\/vod-detail\/(\d+)\.html/);
    if (!match || !match[1]) return '';
    var hash = chapterUrl.match(/#(.+)/);
    var slug = '';
    if (hash && hash[1]) slug = hash[1].replace('ep', '');
    var api = BASE + 'tea/' + match[1];
    if (slug) api = BASE + 'tea/' + match[1] + '-' + slug;
    var resp = await legado.http.get(api);
    var playMatch = resp.match(/"play_data":"([^"]+)"/);
    if (playMatch && playMatch[1]) {
        var url = decodeURIComponent(playMatch[1]);
        if (url.indexOf('http') === 0) return url;
    }
    var m3u8 = resp.match(/https:\/\/[^"'\s]+\.m3u8/);
    if (m3u8 && m3u8.length > 0) return m3u8[0];
    return '';
}

async function explore(page, category) {
    if (!category || category === "GETALL") {
        return ["剧集", "电影", "动漫", "综艺"];
    }
    var type = "";
    if (category === "剧集") type = "tv";
    else if (category === "电影") type = "movie";
    else if (category === "综艺") type = "show";
    else if (category === "动漫") type = "anime";
    else type = category.toLowerCase();
    var url = BASE + 'type/' + type + '/';
    if (page > 1) url += 'page/' + page + '/';
    var html = await legado.http.get(url);
    var doc = legado.dom.parse(html);
    var items = legado.dom.selectAll(doc, '.movie-list-item');
    var list = [];
    for (var i = 0; i < items.length; i++) {
        var item = items[i];
        var name = legado.dom.selectText(item, '.movie-title');
        var bookUrl = legado.dom.selectAttr(item, '.movie-post-wrapper a', 'href');
        var coverUrl = legado.dom.selectAttr(item, '.movie-post-wrapper img', 'src');
        if (name && bookUrl) {
            list.push({
                name: name,
                bookUrl: fixUrl(bookUrl),
                coverUrl: fixUrl(coverUrl),
                author: '',
                kind: category
            });
        }
    }
    legado.dom.free(doc);
    return list;
}

function categories() {
    return [
        { name: '剧集', url: '/type/tv/' },
        { name: '电影', url: '/type/movie/' },
        { name: '动漫', url: '/type/anime/' },
        { name: '综艺', url: '/type/show/' }
    ];
}

async function TEST(type) {
    if (type === '__list__') return ['explore', 'bookInfo', 'chapterList', 'chapterContent', 'search'];
    if (type === 'explore') {
        var cats = await explore(1);
        if (!cats || cats.length < 1) return { passed: false, message: '分类异常' };
        var books = await explore(1, cats[0]);
        if (!books || books.length < 1) return { passed: false, message: '发现页空' };
        return { passed: true, message: '发现页成功' };
    }
    if (type === 'bookInfo') {
        var info = await bookInfo('https://www.cupfox.in/vod-detail/202365557.html');
        if (!info || !info.name) return { passed: false, message: 'bookInfo空' };
        return { passed: true, message: 'name=' + info.name };
    }
    if (type === 'chapterList') {
        var chs = await chapterList('https://www.cupfox.in/vod-detail/202365557.html');
        if (!chs || chs.length < 1) return { passed: false, message: '章节空' };
        return { passed: true, message: '共' + chs.length + '集' };
    }
    if (type === 'chapterContent') {
        var url = await chapterContent('https://www.cupfox.in/vod-detail/202365557.html#zheng_pian');
        if (!url) return { passed: false, message: '播放地址空' };
        return { passed: true, message: '播放地址成功' };
    }
    if (type === 'search') {
        var results = await search('斗破苍穹', 1);
        if (!results || results.length < 1) return { passed: false, message: '搜索空' };
        return { passed: true, message: '搜索' + results.length + '条' };
    }
    return { passed: false, message: '未知' };
}
广告