Sync all projects

This commit is contained in:
github-actions[bot]
2026-07-09 14:09:31 +00:00
parent c754267774
commit c2a141da45
23 changed files with 9533 additions and 7004 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+917
View File
@@ -0,0 +1,917 @@
const API_BASE = 'https://x.xvideos4.tk/api.php/v1/records';
const API_KEY = 'text';
const NAV = [
{ sort: 'daily', label: '今日', href: '/zh-CN/', icon: '🔥', range: 'today' },
{ sort: 'weekly', label: '本周', href: '/zh-CN/weekly/', icon: '📅', range: 'week' },
{ sort: 'monthly', label: '本月', href: '/zh-CN/monthly/',icon: '🗓', range: 'month' },
{ sort: 'favorite', label: '收藏', href: '/zh-CN/all/', icon: '⭐', range: 'all' },
];
const CATEGORIES = [
{ id: 'gay', name: '男娘' },
{ id: 'anime', name: '动漫' },
{ id: 'lolita', name: '少女' },
{ id: 'shaved', name: '白虎' },
{ id: 'kyonyu', name: '巨乳' },
{ id: 'jk', name: '高中生' },
{ id: 'beautiful-girl', name: '美少女' },
{ id: 'small-breasts', name: '贫乳' },
{ id: 'sm', name: 'SM' },
{ id: 'masturbation', name: '自慰' },
{ id: 'hamedori', name: '自拍' },
{ id: 'female-pervert', name: '痴女' },
{ id: 'personal-filming',name: '私拍' },
{ id: 'outdoor', name: '户外' },
{ id: 'big-sister', name: '姐姐' },
{ id: 'incest', name: '乱伦' },
{ id: 'married-woman', name: '人妻' },
{ id: 'orgy', name: '群交' },
{ id: 'fellatio', name: '口交' },
{ id: 'bukkake', name: '颜射' },
];
async function apiList(options) {
const sort = options.sort;
const category = options.category;
const page = options.page;
const q = options.q;
const navItem = NAV.find(function(n) { return n.sort === sort; }) || NAV[0];
const qp = new URLSearchParams({
api_key: API_KEY,
range: navItem.range,
type: 'video',
page: String(page || 1),
limit: '20'
});
let keyword = '';
if (q) {
keyword = q;
qp.set('q', q);
} else if (category) {
const cat = CATEGORIES.find(function(c) { return c.id === category; });
keyword = cat ? cat.name : category;
qp.set('q', keyword);
}
const res = await fetch(API_BASE + '?' + qp.toString(), {
headers: { 'Accept': 'application/json' }
});
if (!res.ok) return null;
const json = await res.json().catch(function() { return null; });
if (json && json.data && keyword) {
json.data = json.data.filter(function(item) {
return (item.tweet_text && item.tweet_text.indexOf(keyword) !== -1) ||
(item.author_name && item.author_name.indexOf(keyword) !== -1);
});
}
return json;
}
async function apiDetail(id) {
const qpQ = new URLSearchParams({
api_key: API_KEY,
range: 'all',
type: 'video',
page: '1',
limit: '1',
q: id
});
const res = await fetch(API_BASE + '?' + qpQ.toString(), {
headers: { 'Accept': 'application/json' }
});
if (!res.ok) return null;
const data = await res.json().catch(function() { return null; });
const list = (data && data.data) ? data.data : [];
if (!list.length) return null;
return list.find(function(i) { return String(i.id) === String(id); }) || list[0] || null;
}
function normalizeItem(item) {
const video = (item.media && item.media.videos && item.media.videos[0]) ? item.media.videos[0] : {};
return {
id: item.id || '',
title: item.tweet_text || '未知',
thumb: video.thumbnail || '',
videoUrl: video.url || '',
time: item.duration_str || '00:00',
pv: '0',
favorite: '0',
};
}
function isHlsUrl(url) {
if (!url) return false;
return /\.m3u8|playlist|\/HLS\/|\/hls\//i.test(url);
}
function isMp4Url(url) {
if (!url) return false;
return /\.mp4(\?|$)|\.webm(\?|$)|\.ogg(\?|$)/i.test(url);
}
function jsonResponse(data, status) {
status = status || 200;
return new Response(JSON.stringify(data), {
status: status,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
'Cache-Control': 'no-cache',
},
});
}
export default {
async fetch(request) {
const url = new URL(request.url);
const path = url.pathname;
const params = url.searchParams;
if (request.method === 'OPTIONS') {
return new Response(null, {
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, HEAD, OPTIONS, POST',
'Access-Control-Allow-Headers': 'Range, Content-Type',
}
});
}
try {
if (path === '/play') return handlePlay(params);
if (path === '/api/resolve') return handleResolve(params);
if (path === '/api/refresh') return handleRefresh(params.get('id') || '');
if (path === '/api/extract' && request.method === 'POST') {
const body = await request.json();
const res = await fetch('https://x.xvideos4.tk/extract', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body)
});
const data = await res.json();
return jsonResponse(data, res.status);
}
if (path.indexOf('/movie/') !== -1) {
const parts = path.split('/').filter(Boolean);
const id = parts.pop();
return handleDetail(id);
}
if (path === '/search') {
const q = params.get('tag') || params.get('q') || '';
const page = parseInt(params.get('page') || '1', 10);
return handleList({ sort: 'favorite', category: '', q: q, page: page, isSearch: true });
}
const catMatch = path.match(/\/category\/([^\/\s?]+)/);
if (catMatch) {
const page = parseInt(params.get('page') || '1', 10);
return handleList({ sort: 'favorite', category: catMatch[1], page: page });
}
const sortMap = {
'/zh-cn/weekly': 'weekly', '/zh-CN/weekly': 'weekly',
'/zh-cn/weekly/': 'weekly', '/zh-CN/weekly/': 'weekly',
'/zh-cn/monthly': 'monthly', '/zh-CN/monthly': 'monthly',
'/zh-cn/monthly/':'monthly', '/zh-CN/monthly/':'monthly',
'/zh-cn/all': 'favorite','/zh-CN/all': 'favorite',
'/zh-cn/all/': 'favorite','/zh-CN/all/': 'favorite',
};
const sort = sortMap[path] || 'daily';
const page = parseInt(params.get('page') || '1', 10);
return handleList({ sort: sort, category: '', page: page });
} catch (e) {
return new Response('Error: ' + e.message + '\n' + e.stack, { status: 500 });
}
}
};
async function handleResolve(params) {
const rawUrl = params.get('url') || '';
if (!rawUrl || rawUrl.indexOf('http') !== 0) {
return jsonResponse({ error: 'invalid_url' }, 400);
}
let origin = '';
try { origin = new URL(rawUrl).origin; } catch (_) {}
const commonHeaders = {
'User-Agent':
'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) '
+ 'AppleWebKit/605.1.15 (KHTML, like Gecko) '
+ 'Version/17.0 Mobile/15E148 Safari/604.1',
'Referer': origin ? origin + '/' : 'https://x.xvideos4.tk/',
'Origin': origin || 'https://x.xvideos4.tk',
'Accept': 'video/mp4,video/webm,application/x-mpegurl,*/*;q=0.9',
};
try {
const ctrl = new AbortController();
const timer = setTimeout(function() { ctrl.abort(); }, 8000);
const res = await fetch(rawUrl, {
method: 'HEAD', redirect: 'follow', signal: ctrl.signal, headers: commonHeaders,
});
clearTimeout(timer);
const ct = res.headers.get('content-type') || '';
const finalUrl = res.url || rawUrl;
const isHls = ct.indexOf('mpegurl') !== -1 || ct.indexOf('x-mpegurl') !== -1 || isHlsUrl(finalUrl);
const isMp4 = ct.indexOf('video/') === 0 || isMp4Url(finalUrl);
return jsonResponse({ url: finalUrl, isHls: isHls, isMp4: isMp4, contentType: ct, status: res.status });
} catch (headErr) {
try {
const ctrl2 = new AbortController();
const timer2 = setTimeout(function() { ctrl2.abort(); }, 8000);
const res2 = await fetch(rawUrl, {
method: 'GET', redirect: 'follow', signal: ctrl2.signal, headers: commonHeaders,
});
clearTimeout(timer2);
const ct2 = res2.headers.get('content-type') || '';
const finalUrl2 = res2.url || rawUrl;
const isHls2 = ct2.indexOf('mpegurl') !== -1 || ct2.indexOf('x-mpegurl') !== -1 || isHlsUrl(finalUrl2);
const isMp42 = ct2.indexOf('video/') === 0 || isMp4Url(finalUrl2);
return jsonResponse({ url: finalUrl2, isHls: isHls2, isMp4: isMp42, contentType: ct2, status: res2.status });
} catch (getErr) {
return jsonResponse({
url: rawUrl, isHls: isHlsUrl(rawUrl), isMp4: isMp4Url(rawUrl), error: getErr.message,
});
}
}
}
async function handleRefresh(id) {
if (!id) return jsonResponse({ error: 'no id' }, 400);
try {
const raw = await apiDetail(id);
if (!raw) return jsonResponse({ error: 'not_found' }, 404);
const item = normalizeItem(raw);
const proxySrc = item.videoUrl;
if (!proxySrc) return jsonResponse({ error: 'no_url' }, 404);
return jsonResponse({ proxySrc: proxySrc, isHls: isHlsUrl(proxySrc) });
} catch (e) {
return jsonResponse({ error: e.message }, 500);
}
}
async function handleList(options) {
if (options.sort === 'favorite' && !options.category && !options.q && !options.isSearch) {
return handleFavorites();
}
const data = await apiList(options);
const list = (data && data.data) ? data.data : [];
const movies = list.map(normalizeItem);
const page = options.page;
const lastPage = page + 1;
const category = options.category;
const catLabel = CATEGORIES.find(function(c) { return c.id === category; })?.name || category;
const title = category ? '# ' + catLabel : (options.isSearch ? '搜索:' + options.q : (NAV.find(function(n) { return n.sort === options.sort; })?.label || '今日'));
return new Response(
renderLayout(renderList(movies, options), title, options.sort),
{ headers: { 'Content-Type': 'text/html;charset=UTF-8' } }
);
}
function handleFavorites() {
return new Response(
renderLayout(renderFavoritesPage(), '我的收藏', 'favorite'),
{ headers: { 'Content-Type': 'text/html;charset=UTF-8' } }
);
}
function renderFavoritesPage() {
return '<div class="page-wrap">' +
'<div class="fav-page-header">' +
'<h2 class="fav-page-title">⭐ 我的收藏</h2>' +
'<button class="fav-clear-btn" onclick="clearAllFavs()">清空收藏</button>' +
'</div>' +
'<div id="fav-grid" class="grid"></div>' +
'<div id="fav-empty" class="empty-state" style="display:none">' +
'<div class="empty-icon">⭐</div>' +
'<div class="empty-text">暂无收藏,去浏览视频并点击 ⭐ 收藏吧</div>' +
'</div>' +
'</div>' +
`<script>
document.addEventListener('DOMContentLoaded', function() {
renderFavPage();
});
function renderFavPage() {
var favs = {};
try { favs = JSON.parse(localStorage.getItem('otc_favs') || '{}'); } catch(e) {}
var list = Object.values(favs).reverse();
var grid = document.getElementById('fav-grid');
var empty = document.getElementById('fav-empty');
if (!list.length) {
grid.style.display = 'none';
empty.style.display = 'block';
return;
}
grid.style.display = '';
empty.style.display = 'none';
grid.innerHTML = list.map(function(m) {
var thumb = m.thumb || 'https://placehold.co/300x533/111/333?text=No+Image';
var id = String(m.id || '');
var title = String(m.title || id).replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;').replace(/'/g,'&#39;');
return '<div class="card" id="fav-card-'+id+'">' +
'<a href="/zh-CN/movie/' + encodeURIComponent(id) + '" class="card-thumb">' +
'<img loading="lazy" src="' + thumb + '" alt="' + title + '"' +
' onerror="this.src=\'https://placehold.co/300x533/111/333?text=No+Image\'">' +
'<span class="badge-time">' + (m.time || '') + '</span>' +
'</a>' +
'<div class="card-body">' +
'<a href="/zh-CN/movie/' + encodeURIComponent(id) + '" class="card-title-link">' +
'<h3 class="card-title">' + title + '</h3>' +
'</a>' +
'<div class="card-meta">' +
'<span></span>' +
'<button class="card-fav-btn faved"' +
' data-id="' + id + '"' +
' data-title="' + title + '"' +
' data-thumb="' + (m.thumb||'').replace(/"/g,'&quot;') + '"' +
' data-video="' + (m.video||'').replace(/"/g,'&quot;') + '"' +
' data-time="' + (m.time ||'') + '"' +
' onclick="event.preventDefault();event.stopPropagation();toggleFav(this)">⭐ 已收藏' +
'</button>' +
'</div>' +
'</div>' +
'</div>';
}).join('');
}
function clearAllFavs() {
if (!confirm('确认清空所有收藏?')) return;
localStorage.removeItem('otc_favs');
renderFavPage();
_toast('已清空收藏');
}
</script>`;
}
async function handleDetail(id) {
const raw = await apiDetail(id);
const movie = raw ? normalizeItem(raw) : {
id: id, title: id, thumb: '', videoUrl: '', time: '00:00', pv: '0', favorite: '0'
};
return new Response(
renderLayout(renderDetail(movie), movie.title, ''),
{ headers: { 'Content-Type': 'text/html;charset=UTF-8' } }
);
}
async function handlePlay(params) {
const videoUrl = params.get('v') || '';
if (!videoUrl || videoUrl.indexOf('http') !== 0) {
return new Response('无效的播放链接', { status: 400 });
}
return new Response(null, { status: 302, headers: { Location: videoUrl } });
}
function renderList(movies, options) {
const sort = options.sort;
const category = options.category;
const q = options.q;
const page = options.page;
const isSearch = options.isSearch;
const grid = movies.map(function(m) {
const thumb = m.thumb || 'https://placehold.co/300x533/111/333?text=No+Image';
const playHref = m.videoUrl ? m.videoUrl : '/zh-CN/movie/' + encodeURIComponent(m.id);
const playTarget = m.videoUrl ? ' target="_blank" rel="noopener noreferrer"' : '';
return '<div class="card">' +
'<a href="' + playHref + '"' + playTarget + ' class="card-thumb">' +
'<img loading="lazy" src="' + thumb + '" alt="' + esc(m.title) + '"' +
' onerror="this.src=\'https://placehold.co/300x533/111/333?text=No+Image\'"> ' +
'<span class="badge-time">' + esc(m.time) + '</span>' +
'<button class="card-fav-btn" data-id="' + esc(m.id) + '" data-title="' + esc(m.title) + '" data-thumb="' + esc(m.thumb) + '" data-video="' + esc(m.videoUrl) + '" data-time="' + esc(m.time) + '" onclick="event.preventDefault();event.stopPropagation();toggleFav(this)" aria-label="收藏">⭐</button>' +
'</a>' +
'<div class="card-body">' +
'<a href="/zh-CN/movie/' + encodeURIComponent(m.id) + '" class="card-title-link">' +
'<h3 class="card-title">' + esc(m.title) + '</h3>' +
'</a>' +
'<div class="card-meta">' +
'<span>⏱ ' + esc(m.time) + '</span>' +
'</div>' +
'</div>' +
'</div>';
}).join('');
function pageUrl(p) {
if (isSearch) return '/search?tag=' + encodeURIComponent(q || category || '') + '&page=' + p;
if (category) return '/zh-CN/category/' + encodeURIComponent(category) + '?page=' + p;
return (NAV.find(function(n) { return n.sort === sort; })?.href || '/zh-CN/') + '?page=' + p;
}
const pagination = (page > 1 || movies.length > 0) ?
'<div class="pagination">' +
(page > 1
? '<a href="' + pageUrl(page-1) + '" class="page-btn">← 上一页</a>'
: '<span class="page-btn disabled">← 上一页</span>') +
'<span class="page-info">第 ' + page + ' 页</span>' +
(movies.length >= 20
? '<a href="' + pageUrl(page+1) + '" class="page-btn">下一页 →</a>'
: '<span class="page-btn disabled">下一页 →</span>') +
'</div>' : '';
const catChips = CATEGORIES.map(function(c) {
return '<a href="/zh-CN/category/' + c.id + '" class="chip' + (category === c.id ? ' chip-active' : '') + '">' + esc(c.name) + '</a>';
}).join('');
const empty = movies.length === 0 ?
'<div class="empty-state">' +
'<div class="empty-icon">📭</div>' +
'<div class="empty-text">暂无内容</div>' +
'</div>' : '';
return '<div class="page-wrap">' +
'<div class="extract-section">' +
'<div class="extract-label">帖子链接</div>' +
'<div class="extract-box">' +
'<input type="text" id="extractUrl" placeholder="https://x.com/user/status/1234567890…" autocomplete="off">' +
'<button id="extractBtn" onclick="doExtract()">' +
'<span id="extractBtnIcon">⬇</span>' +
'<span id="extractBtnText">提取</span>' +
'</button>' +
'</div>' +
'<div id="extractStatus" class="extract-status"></div>' +
'<div id="extractResult" class="extract-result-area" style="display:none"></div>' +
'</div>' +
'<div class="search-bar-wrap">' +
'<form action="/search" method="GET" class="search-form">' +
'<input type="search" name="tag" placeholder="搜索标签 / 账号…"' +
' value="' + esc(isSearch ? (q || category) : '') + '"' +
' autocomplete="off" enterkeyhint="search">' +
'<button type="submit" aria-label="搜索">' +
'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">' +
'<circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/>' +
'</svg>' +
'</button>' +
'</form>' +
'</div>' +
'<div class="chips-wrap">' +
'<div class="chips-scroll">' +
'<a href="/zh-CN/" class="chip' + (!category ? ' chip-active' : '') + '">全部分类</a>' +
catChips +
'</div>' +
'</div>' +
(movies.length > 0 ? '<div class="grid">' + grid + '</div>' + pagination : empty) +
'</div>' +
'<script>' +
'async function doExtract() {' +
' var url = document.getElementById("extractUrl").value.trim();' +
' var btn = document.getElementById("extractBtn");' +
' var status = document.getElementById("extractStatus");' +
' var resultArea = document.getElementById("extractResult");' +
' if (!url) {' +
' status.innerText = "请输入帖子链接";' +
' status.className = "extract-status error";' +
' return;' +
' }' +
' btn.disabled = true;' +
' document.getElementById("extractBtnText").innerText = "提取中...";' +
' status.innerText = "正在提取中...";' +
' status.className = "extract-status loading";' +
' resultArea.style.display = "none";' +
' try {' +
' var res = await fetch("/api/extract", {' +
' method: "POST",' +
' headers: { "Content-Type": "application/json" },' +
' body: JSON.stringify({ url: url })' +
' });' +
' var json = await res.json();' +
' if (res.ok) {' +
' status.innerText = "提取成功!";' +
' status.className = "extract-status success";' +
' renderExtractResult(json);' +
' } else {' +
' status.innerText = json.error || "提取失败,请检查链接";' +
' status.className = "extract-status error";' +
' }' +
' } catch (e) {' +
' status.innerText = "网络错误: " + e.message;' +
' status.className = "extract-status error";' +
' } finally {' +
' btn.disabled = false;' +
' document.getElementById("extractBtnText").innerText = "提取";' +
' }' +
'}' +
'function renderExtractResult(json) {' +
' var area = document.getElementById("extractResult");' +
' var videos = (json.media && json.media.videos) ? json.media.videos : [];' +
' var images = (json.media && json.media.images) ? json.media.images : [];' +
' var html = "<div class=\'res-grid\'>";' +
' videos.forEach(function(v) {' +
' html += "<div class=\'res-item\'>" +' +
' "<div class=\'res-thumb\'>" +' +
' "<img src=\'" + (v.thumbnail || "") + "\' border=\'0\'>" +' +
' "<span class=\'res-badge\'>视频</span>" +' +
' "</div>" +' +
' "<a href=\'" + v.url + "\' target=\'_blank\' class=\'res-dl-btn\'>下载视频</a>" +' +
' "</div>";' +
' });' +
' images.forEach(function(img) {' +
' html += "<div class=\'res-item\'>" +' +
' "<div class=\'res-thumb\'>" +' +
' "<img src=\'" + img.url + "\' border=\'0\'>" +' +
' "<span class=\'res-badge\'>图片</span>" +' +
' "</div>" +' +
' "<a href=\'" + img.url + "\' target=\'_blank\' class=\'res-dl-btn\'>下载图片</a>" +' +
' "</div>";' +
' });' +
' html += "</div>";' +
' area.innerHTML = html;' +
' area.style.display = "block";' +
'}' +
'</script>';
}
function renderDetail(movie) {
const thumbSrc = movie.thumb || '';
const proxySrc = movie.videoUrl || '';
const movieId = movie.id || '';
const guessHls = isHlsUrl(proxySrc);
const noVideoBlock = '<div class="no-video"><span>🎬</span><p>视频链接不可用</p></div>';
const playerBlock = proxySrc ?
'<div class="player-shell" id="playerShell">' +
'<div class="player-poster" id="playerPoster">' +
(thumbSrc
? '<img src="' + esc(thumbSrc) + '" alt="' + esc(movie.title) + '" class="poster-img">'
: '<div class="poster-img poster-blank"></div>') +
'<button class="big-play-btn" id="bigPlayBtn" aria-label="播放">' +
'<svg viewBox="0 0 24 24" fill="white" width="44" height="44"><polygon points="5,3 19,12 5,21"/></svg>' +
'</button>' +
'<div class="player-spinner hidden" id="playerSpinner">' +
'<div class="spinner-ring"></div>' +
'</div>' +
'<div class="player-error hidden" id="playerError">' +
'<span>⚠️</span>' +
'<p id="playerErrorMsg">加载失败</p>' +
'<button class="retry-btn" onclick="initPlayer()">重试</button>' +
'</div>' +
'</div>' +
'<video id="mainVideo" class="main-video" playsinline webkit-playsinline preload="none" ' +
(thumbSrc ? 'poster="' + esc(thumbSrc) + '"' : '') +
' crossorigin="anonymous"></video>' +
'</div>' : noVideoBlock;
const playerScript = proxySrc ?
'<script>' +
'(function () {' +
' var SRC = ' + JSON.stringify(proxySrc) + ';' +
' var THUMB = ' + JSON.stringify(thumbSrc) + ';' +
' var GUESS_HLS = ' + guessHls + ';' +
' var HLS_CDN = "https://cdn.jsdelivr.net/npm/hls.js@1/dist/hls.min.js";' +
' var video = document.getElementById("mainVideo");' +
' var poster = document.getElementById("playerPoster");' +
' var bigPlayBtn = document.getElementById("bigPlayBtn");' +
' var spinner = document.getElementById("playerSpinner");' +
' var errorBox = document.getElementById("playerError");' +
' var errorMsg = document.getElementById("playerErrorMsg");' +
' var hlsInstance = null;' +
' var started = false;' +
' function show(el){ el && el.classList.remove("hidden"); }' +
' function hide(el){ el && el.classList.add("hidden"); }' +
' function initPlayer() {' +
' hide(errorBox); show(bigPlayBtn); show(poster);' +
' video.src = "";' +
' if(hlsInstance){ hlsInstance.destroy(); hlsInstance = null; }' +
' }' +
' function startLoad() {' +
' if(started) return; started = true;' +
' hide(bigPlayBtn); show(spinner);' +
' if(GUESS_HLS) {' +
' if(video.canPlayType("application/vnd.apple.mpegurl")) {' +
' video.src = SRC; video.play().catch(function(e){ console.error(e); });' +
' } else {' +
' var s = document.createElement("script");' +
' s.src = HLS_CDN;' +
' s.onload = function() {' +
' if(!Hls.isSupported()) {' +
' hide(spinner); show(errorBox); errorMsg.innerText = "浏览器不支持 HLS"; return;' +
' }' +
' hlsInstance = new Hls(); hlsInstance.loadSource(SRC); hlsInstance.attachMedia(video);' +
' hlsInstance.on(Hls.Events.MANIFEST_PARSED, function(){ video.play().catch(function(e){ console.error(e); }); });' +
' };' +
' document.head.appendChild(s);' +
' }' +
' } else {' +
' video.src = SRC; video.play().catch(function(e){ console.error(e); });' +
' }' +
' }' +
' video.addEventListener("playing", function(){ hide(poster); hide(spinner); });' +
' video.addEventListener("error", function(){ hide(spinner); show(errorBox); errorMsg.innerText = "视频加载出错"; });' +
' bigPlayBtn.onclick = startLoad;' +
'})();' +
'</script>' : '';
return '<div class="detail-wrap">' +
'<a href="javascript:history.back()" class="back-btn">' +
'<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">' +
'<path d="M19 12H5M12 19l-7-7 7-7"/>' +
'</svg>' +
' 返回' +
'</a>' +
'<div class="detail-card">' +
'<div class="video-wrap">' + playerBlock + '</div>' +
'<div class="detail-body">' +
'<h1 class="detail-title">' + esc(movie.title) + '</h1>' +
'<div class="detail-meta">' +
'<span>⏱ ' + esc(movie.time) + '</span>' +
'</div>' +
'<div class="action-bar">' +
'<button class="action-btn like-btn" data-id="' + esc(movieId) + '" onclick="toggleLike(this)">' +
'<span class="action-icon">❤</span>' +
'<span class="btn-label">点赞</span>' +
'</button>' +
'<button class="action-btn fav-btn"' +
' data-id="' + esc(movieId) + '"' +
' data-title="' + esc(movie.title) + '"' +
' data-thumb="' + esc(thumbSrc) + '"' +
' data-video="' + esc(proxySrc) + '"' +
' data-time="' + esc(movie.time) + '"' +
' onclick="toggleFav(this)">' +
'<span class="action-icon">⭐</span>' +
'<span class="btn-label">收藏</span>' +
'</button>' +
'</div>' +
'</div>' +
'</div>' +
'</div>' +
playerScript +
`<script>
(function(){
var id = ` + JSON.stringify(movieId) + `;
var likes = {}; var favs = {};
try { likes = JSON.parse(localStorage.getItem('otc_likes') || '{}'); } catch(e) {}
try { favs = JSON.parse(localStorage.getItem('otc_favs') || '{}'); } catch(e) {}
var lb = document.querySelector('.like-btn[data-id]');
var fb = document.querySelector('.fav-btn[data-id]');
if (lb && likes[id]) { lb.classList.add('liked'); lb.querySelector('.btn-label').textContent = '已点赞'; }
if (fb && favs[id]) { fb.classList.add('faved'); fb.querySelector('.btn-label').textContent = '已收藏'; }
})();
</script>`;
}
function esc(s) {
return String(s || '')
.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')
.replace(/"/g,'&quot;').replace(/'/g,'&#39;');
}
function renderLayout(content, title, activeSort) {
const navLinks = NAV.map(function(n) {
return '<a href="' + n.href + '" class="nav-link' + (activeSort === n.sort ? ' active' : '') + '">' + n.label + '</a>';
}).join('');
const bottomNav = NAV.map(function(n) {
return '<a href="' + n.href + '" class="bnav-item' + (activeSort === n.sort ? ' active' : '') + '">' +
'<span class="bnav-icon">' + n.icon + '</span>' +
'<span class="bnav-label">' + n.label + '</span>' +
'</a>';
}).join('');
return '<!DOCTYPE html>' +
'<html lang="zh-CN">' +
'<head>' +
'<meta charset="UTF-8">' +
'<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">' +
'<meta name="theme-color" content="#000000">' +
'<title>' + esc(title) + ' - OTC VIDEO</title>' +
'<style>' +
'*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}' +
':root{' +
' --bg:#000;--surface:#0d0d0d;--surface2:#161616;--border:rgba(255,255,255,0.07);' +
' --text:#e8e8e8;--muted:#555;--accent:#e8195a;--accent2:#ff6b9d;' +
' --radius:14px;--nav-h:56px;--bnav-h:60px;--safe-b:env(safe-area-inset-bottom,0px);' +
'}' +
'html{scroll-behavior:smooth}' +
'body{background:var(--bg);color:var(--text);font-family:sans-serif;font-size:14px;' +
' line-height:1.5;-webkit-font-smoothing:antialiased;overflow-x:hidden;}' +
'a{color:inherit;text-decoration:none}' +
'img{display:block;max-width:100%}' +
'button{cursor:pointer;border:none;font-family:inherit}' +
'.topnav{' +
' position:sticky;top:0;z-index:100;height:var(--nav-h);' +
' background:rgba(0,0,0,0.85);' +
' backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);' +
' border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 20px;gap:16px;}' +
'.logo{font-size:20px;font-weight:800;letter-spacing:-0.5px;white-space:nowrap;flex-shrink:0;}' +
'.logo span{color:var(--accent)}' +
'.topnav-search{' +
' flex:1;max-width:340px;display:flex;align-items:center;' +
' background:var(--surface2);border:1px solid var(--border);' +
' border-radius:10px;overflow:hidden;transition:border-color .2s;}' +
'.topnav-search:focus-within{border-color:rgba(232,25,90,.4)}' +
'.topnav-search input{' +
' flex:1;background:transparent;border:none;outline:none;' +
' color:var(--text);font-size:13px;padding:8px 12px;}' +
'.topnav-search input::placeholder{color:var(--muted)}' +
'.topnav-search button{' +
' background:transparent;color:var(--muted);padding:8px 12px;' +
' display:flex;align-items:center;transition:color .2s;}' +
'.topnav-search button:hover{color:var(--accent2)}' +
'.topnav-links{display:flex;gap:4px;margin-left:auto}' +
'.nav-link{' +
' padding:6px 14px;border-radius:8px;font-size:13px;font-weight:700;' +
' color:var(--muted);transition:background .15s,color .15s;white-space:nowrap;}' +
'.nav-link:hover{color:var(--text);background:var(--surface2)}' +
'.nav-link.active{color:#fff;background:var(--accent)}' +
'.extract-section { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 20px; margin-bottom: 24px; }' +
'.extract-label { font-size: 14px; color: var(--text); margin-bottom: 12px; font-weight: 500; }' +
'.extract-box { display: flex; gap: 10px; align-items: stretch; }' +
'.extract-box input { flex: 1; background: var(--bg); border: 1px solid var(--border); border-radius: 8px; color: var(--text); padding: 12px 16px; font-size: 14px; outline: none; }' +
'.extract-box input:focus { border-color: var(--accent); }' +
'.extract-box button { background: #1d9bf0; color: #fff; padding: 0 20px; border-radius: 8px; font-weight: 700; display: flex; align-items: center; gap: 6px; transition: opacity .2s; }' +
'.extract-box button:hover { opacity: 0.9; }' +
'.extract-box button:disabled { opacity: 0.5; cursor: not-allowed; }' +
'.extract-status { margin-top: 10px; font-size: 12px; }' +
'.extract-status.error { color: #ff4d4f; }' +
'.extract-status.success { color: #52c41a; }' +
'.extract-status.loading { color: #1d9bf0; }' +
'.extract-result-area { margin-top: 20px; padding-top: 20px; border-top: 1px dashed var(--border); }' +
'.res-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; }' +
'.res-item { background: var(--surface2); border-radius: 8px; overflow: hidden; display: flex; flex-direction: column; }' +
'.res-thumb { position: relative; aspect-ratio: 16/9; }' +
'.res-thumb img { width: 100%; height: 100%; object-fit: cover; }' +
'.res-badge { position: absolute; top: 4px; right: 4px; background: rgba(0,0,0,0.6); color: #fff; font-size: 10px; padding: 2px 6px; border-radius: 4px; }' +
'.res-dl-btn { padding: 8px; text-align: center; font-size: 12px; font-weight: 700; background: var(--accent); color: #fff; }' +
'.bnav{' +
' position:fixed;bottom:0;left:0;right:0;z-index:100;' +
' height:calc(var(--bnav-h) + var(--safe-b));padding-bottom:var(--safe-b);' +
' background:rgba(0,0,0,0.92);' +
' backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);' +
' border-top:1px solid var(--border);flex-direction:row;align-items:stretch;display:none;}' +
'.bnav-item{' +
' flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;' +
' gap:3px;color:var(--muted);transition:color .15s;' +
' -webkit-tap-highlight-color:transparent;user-select:none;}' +
'.bnav-item.active{color:var(--accent)}' +
'.bnav-icon{font-size:18px;line-height:1}' +
'.bnav-label{font-size:10px;font-weight:700}' +
'.main-content{min-height:calc(100vh - var(--nav-h))}' +
'.page-wrap{max-width:1400px;margin:0 auto;padding:20px 16px 32px}' +
'.search-bar-wrap{display:none;margin-bottom:16px}' +
'.search-form{' +
' display:flex;align-items:center;background:var(--surface2);' +
' border:1px solid var(--border);border-radius:12px;overflow:hidden;transition:border-color .2s;}' +
'.search-form:focus-within{border-color:rgba(232,25,90,.4)}' +
'.search-form input{' +
' flex:1;background:transparent;border:none;outline:none;color:var(--text);' +
' font-size:15px;padding:13px 16px;min-width:0;}' +
'.search-form input::placeholder{color:var(--muted)}' +
'.search-form button{' +
' background:var(--accent);color:#fff;padding:0 18px;height:100%;min-height:50px;' +
' display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s;}' +
'.search-form button:hover{background:var(--accent2)}' +
'.chips-wrap{' +
' margin-bottom:20px;' +
' -webkit-mask:linear-gradient(to right,#000 88%,transparent 100%);' +
' mask:linear-gradient(to right,#000 88%,transparent 100%);}' +
'.chips-scroll{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;scrollbar-width:none}' +
'.chips-scroll::-webkit-scrollbar{display:none}' +
'.chip{' +
' flex-shrink:0;padding:7px 14px;border-radius:999px;font-size:12px;font-weight:700;' +
' background:var(--surface2);border:1px solid var(--border);color:var(--muted);' +
' white-space:nowrap;transition:background .15s,color .15s,border-color .15s;' +
' -webkit-tap-highlight-color:transparent;}' +
'.chip:hover{color:var(--accent2);border-color:rgba(232,25,90,.35)}' +
'.chip-active{background:var(--accent);border-color:var(--accent);color:#fff !important}' +
'.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}' +
'.card{' +
' background:var(--surface);border-radius:var(--radius);overflow:hidden;' +
' border:1px solid var(--border);transition:border-color .2s,transform .2s;will-change:transform;}' +
'.card:hover{border-color:rgba(232,25,90,.35);transform:translateY(-2px)}' +
'.card:active{transform:scale(.97)}' +
'.card-thumb{display:block;position:relative;aspect-ratio:9/16;overflow:hidden;background:var(--surface2)}' +
'.card-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .4s}' +
'.card:hover .card-thumb img{transform:scale(1.05)}' +
'.badge-time{' +
' position:absolute;bottom:6px;right:6px;background:rgba(0,0,0,.75);color:#fff;' +
' font-size:10px;font-family:monospace;' +
' padding:2px 6px;border-radius:5px;backdrop-filter:blur(4px);}' +
'.card-body{padding:10px 10px 8px}' +
'.card-title{' +
' font-size:11px;font-weight:500;color:#ccc;' +
' display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;' +
' overflow:hidden;line-height:1.45;min-height:32px;margin-bottom:6px;}' +
'.card-title-link{display:block;color:inherit;text-decoration:none}' +
'.card-title-link:hover .card-title{color:var(--accent2)}' +
'.card-meta{display:flex;justify-content:space-between;font-size:10px;color:var(--muted)}' +
'.fav{color:var(--accent2)}' +
'.pagination{' +
' display:flex;align-items:center;justify-content:center;' +
' gap:12px;padding:32px 0 8px;flex-wrap:wrap;}' +
'.page-btn{' +
' display:inline-flex;align-items:center;padding:11px 24px;' +
' background:var(--surface2);border:1px solid var(--border);' +
' border-radius:10px;font-size:13px;font-weight:700;color:var(--text);' +
' transition:background .15s,border-color .15s;-webkit-tap-highlight-color:transparent;}' +
'.page-btn:not(.disabled):hover{background:var(--accent);border-color:var(--accent)}' +
'.page-btn.disabled{opacity:.3;pointer-events:none}' +
'.page-info{font-size:12px;color:var(--muted)}' +
'.empty-state{text-align:center;padding:80px 20px}' +
'.empty-icon{font-size:48px;opacity:.25;margin-bottom:12px}' +
'.empty-text{font-size:16px;font-weight:700;color:var(--muted)}' +
'.detail-wrap{max-width:960px;margin:0 auto;padding:20px 16px 40px}' +
'.back-btn{' +
' display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;' +
' color:var(--muted);padding:8px 0;margin-bottom:16px;transition:color .15s;' +
' -webkit-tap-highlight-color:transparent;min-height:44px;}' +
'.back-btn:hover{color:var(--accent2)}' +
'.detail-card{' +
' background:var(--surface);border-radius:20px;overflow:hidden;' +
' border:1px solid var(--border);}' +
'.video-wrap{' +
' position:relative; width:100%; aspect-ratio:16/9; background:#000; overflow:hidden;' +
'}' +
'.player-shell{' +
' position:absolute;inset:0; display:flex;align-items:center;justify-content:center; background:#000;' +
'}' +
'.main-video{' +
' position:absolute;inset:0; width:100%;height:100%; object-fit:contain; background:#000; z-index:1;' +
'}' +
'.player-poster{' +
' position:absolute;inset:0; display:flex;flex-direction:column; align-items:center;justify-content:center; z-index:10; background:#000; transition:opacity .4s ease;' +
'}' +
'.poster-img{' +
' position:absolute;inset:0; width:100%;height:100%; object-fit:cover; opacity:.55;' +
'}' +
'.poster-blank{background:var(--surface2)}' +
'.big-play-btn{' +
' position:relative;z-index:11; width:76px;height:76px;border-radius:50%; background:var(--accent);' +
' display:flex;align-items:center;justify-content:center; padding-left:5px; box-shadow:0 6px 32px rgba(232,25,90,.55);' +
' transition:transform .15s,background .15s; -webkit-tap-highlight-color:transparent;' +
'}' +
'.big-play-btn:hover{transform:scale(1.1);background:var(--accent2)}' +
'.big-play-btn:active{transform:scale(.95)}' +
'.player-spinner{' +
' position:absolute;inset:0;z-index:12; display:flex;align-items:center;justify-content:center; background:rgba(0,0,0,.45);' +
'}' +
'.spinner-ring{' +
' width:44px;height:44px;border-radius:50%; border:3px solid rgba(255,255,255,.15); border-top-color:var(--accent); animation:spin .8s linear infinite;' +
'}' +
'@keyframes spin{to{transform:rotate(360deg)}}' +
'.player-error{' +
' position:absolute;inset:0;z-index:13; display:flex;flex-direction:column; align-items:center;justify-content:center;gap:10px; background:rgba(0,0,0,.75);color:var(--text);text-align:center;padding:20px;' +
'}' +
'.player-error span{font-size:32px}' +
'.player-error p{font-size:13px;color:var(--muted);max-width:260px}' +
'.retry-btn{' +
' margin-top:4px;padding:9px 22px;border-radius:999px; background:var(--accent);color:#fff;font-size:13px;font-weight:700; transition:background .15s;' +
'}' +
'.retry-btn:hover{background:var(--accent2)}' +
'.no-video{' +
' position:absolute;inset:0; display:flex;flex-direction:column; align-items:center;justify-content:center; gap:10px;color:var(--muted);font-size:14px;' +
'}' +
'.no-video span{font-size:40px;opacity:.4}' +
'.hidden{display:none !important}' +
'.detail-body{padding:20px}' +
'.detail-title{' +
' font-size:18px; font-weight:800;line-height:1.3;margin-bottom:12px;}' +
'.detail-meta{display:flex;gap:18px;font-size:13px;color:var(--muted);margin-bottom:4px;flex-wrap:wrap}' +
'.action-bar{display:flex;gap:12px;margin-top:16px;flex-wrap:wrap}' +
'.action-btn{display:inline-flex;align-items:center;gap:8px;padding:11px 22px;border-radius:999px;font-size:14px;font-weight:700;border:1.5px solid var(--border);background:var(--surface2);color:var(--text);transition:all .2s;-webkit-tap-highlight-color:transparent;min-height:44px;}' +
'.action-btn:hover{border-color:rgba(232,25,90,.4);color:var(--accent2)}' +
'.action-btn.liked{background:rgba(232,25,90,.15);border-color:var(--accent);color:var(--accent)}' +
'.action-btn.faved{background:rgba(255,200,0,.12);border-color:#f5a623;color:#f5a623}' +
'.action-icon{font-size:18px;line-height:1}' +
'.card-fav-btn{position:absolute;top:6px;right:6px;z-index:5;background:rgba(0,0,0,.6);color:#aaa;border:none;border-radius:8px;font-size:14px;padding:4px 8px;line-height:1;backdrop-filter:blur(4px);transition:all .2s;-webkit-tap-highlight-color:transparent;}' +
'.card-fav-btn:hover,.card-fav-btn.faved{color:#f5a623}' +
'.card-fav-btn.faved{background:rgba(245,166,35,.2)}' +
'.fav-page-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}' +
'.fav-page-title{font-size:20px;font-weight:800}' +
'.fav-clear-btn{padding:8px 18px;border-radius:999px;background:var(--surface2);border:1px solid var(--border);color:var(--muted);font-size:12px;font-weight:700;transition:all .15s;}' +
'.fav-clear-btn:hover{border-color:var(--accent);color:var(--accent)}' +
'.otc-toast{position:fixed;bottom:calc(var(--bnav-h) + var(--safe-b) + 16px);left:50%;transform:translateX(-50%) translateY(20px);background:rgba(30,30,30,.95);color:#fff;padding:10px 22px;border-radius:999px;font-size:13px;font-weight:700;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .25s,transform .25s;z-index:9999;backdrop-filter:blur(10px);}' +
'.otc-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}' +
'@media(min-width:1024px){.otc-toast{bottom:24px}}' +
'@media(min-width:540px){ .grid{grid-template-columns:repeat(3,1fr);gap:12px} .card-title{font-size:12px} }' +
'@media(min-width:768px){ .grid{grid-template-columns:repeat(4,1fr);gap:14px} .page-wrap{padding:24px 24px 40px} .detail-body{padding:24px 28px} .big-play-btn{width:88px;height:88px} }' +
'@media(min-width:1024px){ .grid{grid-template-columns:repeat(5,1fr);gap:16px} .search-bar-wrap{display:none !important} .topnav-search{display:flex} .topnav-links{display:flex} .bnav{display:none !important} .main-content{padding-bottom:0} .detail-wrap{padding:28px 24px 56px} .detail-body{padding:28px 36px} .big-play-btn{width:96px;height:96px} }' +
'@media(min-width:1280px){ .grid{grid-template-columns:repeat(6,1fr)} }' +
'@media(max-width:1023px){ .topnav-search{display:none} .topnav-links{display:none} .search-bar-wrap{display:block} .bnav{display:flex} .main-content{padding-bottom:calc(var(--bnav-h) + var(--safe-b) + 8px)} }' +
'@media(max-width:500px) and (orientation:portrait){ .video-wrap{aspect-ratio:9/16;max-height:72vw;aspect-ratio:unset;height:56vw} }' +
'</style>' +
'</head>' +
'<body>' +
'<nav class="topnav">' +
' <a href="/zh-CN/" class="logo">OTC<span>.</span>VIDEO</a>' +
' <div class="topnav-links">' +
navLinks +
' </div>' +
'</nav>' +
'<main class="main-content">' +
content +
'</main>' +
'<nav class="bnav">' +
bottomNav +
'</nav>' +
`<script>
var OTC_LIKES_KEY='otc_likes', OTC_FAVS_KEY='otc_favs';
function _getLikes(){try{return JSON.parse(localStorage.getItem(OTC_LIKES_KEY)||'{}')}catch(e){return{}}}
function _getFavs() {try{return JSON.parse(localStorage.getItem(OTC_FAVS_KEY) ||'{}')}catch(e){return{}}}
function toggleLike(btn){
var id=btn.dataset.id; var likes=_getLikes(); var on=!!likes[id];
if(on){delete likes[id];}else{likes[id]=Date.now();}
localStorage.setItem(OTC_LIKES_KEY,JSON.stringify(likes));
_applyLike(btn,!on); _toast(on?'已取消点赞':'点赞成功 ❤');
}
function toggleFav(btn){
var id=btn.dataset.id; var favs=_getFavs(); var on=!!favs[id];
if(on){
delete favs[id];
var card=document.getElementById('fav-card-'+id);
if(card){ card.style.transition='opacity .3s'; card.style.opacity='0'; setTimeout(function(){card.remove();_checkFavEmpty();},300); }
} else {
favs[id]={id:id,title:btn.dataset.title||id,thumb:btn.dataset.thumb||'',video:btn.dataset.video||'',time:btn.dataset.time||''};
}
localStorage.setItem(OTC_FAVS_KEY,JSON.stringify(favs));
document.querySelectorAll('[data-id="'+id+'"].card-fav-btn,[data-id="'+id+'"].fav-btn').forEach(function(b){_applyFav(b,!on);});
_toast(on?'已取消收藏':'收藏成功 ⭐');
}
function _applyLike(btn,on){
btn.classList.toggle('liked',on);
var lb=btn.querySelector('.btn-label'); if(lb) lb.textContent=on?'已点赞':'点赞';
}
function _applyFav(btn,on){
btn.classList.toggle('faved',on);
var lb=btn.querySelector('.btn-label'); if(lb) lb.textContent=on?'已收藏':'收藏';
}
function _checkFavEmpty(){
var grid=document.getElementById('fav-grid');
var empty=document.getElementById('fav-empty');
if(grid && empty && grid.children.length===0){grid.style.display='none';empty.style.display='block';}
}
function _toast(msg){
var t=document.createElement('div'); t.className='otc-toast'; t.textContent=msg;
document.body.appendChild(t);
requestAnimationFrame(function(){t.classList.add('show');});
setTimeout(function(){t.classList.remove('show');setTimeout(function(){t.remove();},300);},2000);
}
document.addEventListener('DOMContentLoaded',function(){
var likes=_getLikes(); var favs=_getFavs();
document.querySelectorAll('.like-btn[data-id]').forEach(function(btn){_applyLike(btn,!!likes[btn.dataset.id]);});
document.querySelectorAll('.fav-btn[data-id],.card-fav-btn[data-id]').forEach(function(btn){_applyFav(btn,!!favs[btn.dataset.id]);});
});
</script>` +
'</body>' +
'</html>';
}
+917
View File
@@ -0,0 +1,917 @@
const API_BASE = 'https://x.xvideos4.tk/api.php/v1/records';
const API_KEY = 'text';
const NAV = [
{ sort: 'daily', label: '今日', href: '/zh-CN/', icon: '🔥', range: 'today' },
{ sort: 'weekly', label: '本周', href: '/zh-CN/weekly/', icon: '📅', range: 'week' },
{ sort: 'monthly', label: '本月', href: '/zh-CN/monthly/',icon: '🗓', range: 'month' },
{ sort: 'favorite', label: '收藏', href: '/zh-CN/all/', icon: '⭐', range: 'all' },
];
const CATEGORIES = [
{ id: 'gay', name: '男娘' },
{ id: 'anime', name: '动漫' },
{ id: 'lolita', name: '少女' },
{ id: 'shaved', name: '白虎' },
{ id: 'kyonyu', name: '巨乳' },
{ id: 'jk', name: '高中生' },
{ id: 'beautiful-girl', name: '美少女' },
{ id: 'small-breasts', name: '贫乳' },
{ id: 'sm', name: 'SM' },
{ id: 'masturbation', name: '自慰' },
{ id: 'hamedori', name: '自拍' },
{ id: 'female-pervert', name: '痴女' },
{ id: 'personal-filming',name: '私拍' },
{ id: 'outdoor', name: '户外' },
{ id: 'big-sister', name: '姐姐' },
{ id: 'incest', name: '乱伦' },
{ id: 'married-woman', name: '人妻' },
{ id: 'orgy', name: '群交' },
{ id: 'fellatio', name: '口交' },
{ id: 'bukkake', name: '颜射' },
];
async function apiList(options) {
const sort = options.sort;
const category = options.category;
const page = options.page;
const q = options.q;
const navItem = NAV.find(function(n) { return n.sort === sort; }) || NAV[0];
const qp = new URLSearchParams({
api_key: API_KEY,
range: navItem.range,
type: 'video',
page: String(page || 1),
limit: '20'
});
let keyword = '';
if (q) {
keyword = q;
qp.set('q', q);
} else if (category) {
const cat = CATEGORIES.find(function(c) { return c.id === category; });
keyword = cat ? cat.name : category;
qp.set('q', keyword);
}
const res = await fetch(API_BASE + '?' + qp.toString(), {
headers: { 'Accept': 'application/json' }
});
if (!res.ok) return null;
const json = await res.json().catch(function() { return null; });
if (json && json.data && keyword) {
json.data = json.data.filter(function(item) {
return (item.tweet_text && item.tweet_text.indexOf(keyword) !== -1) ||
(item.author_name && item.author_name.indexOf(keyword) !== -1);
});
}
return json;
}
async function apiDetail(id) {
const qpQ = new URLSearchParams({
api_key: API_KEY,
range: 'all',
type: 'video',
page: '1',
limit: '1',
q: id
});
const res = await fetch(API_BASE + '?' + qpQ.toString(), {
headers: { 'Accept': 'application/json' }
});
if (!res.ok) return null;
const data = await res.json().catch(function() { return null; });
const list = (data && data.data) ? data.data : [];
if (!list.length) return null;
return list.find(function(i) { return String(i.id) === String(id); }) || list[0] || null;
}
function normalizeItem(item) {
const video = (item.media && item.media.videos && item.media.videos[0]) ? item.media.videos[0] : {};
return {
id: item.id || '',
title: item.tweet_text || '未知',
thumb: video.thumbnail || '',
videoUrl: video.url || '',
time: item.duration_str || '00:00',
pv: '0',
favorite: '0',
};
}
function isHlsUrl(url) {
if (!url) return false;
return /\.m3u8|playlist|\/HLS\/|\/hls\//i.test(url);
}
function isMp4Url(url) {
if (!url) return false;
return /\.mp4(\?|$)|\.webm(\?|$)|\.ogg(\?|$)/i.test(url);
}
function jsonResponse(data, status) {
status = status || 200;
return new Response(JSON.stringify(data), {
status: status,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
'Cache-Control': 'no-cache',
},
});
}
export default {
async fetch(request) {
const url = new URL(request.url);
const path = url.pathname;
const params = url.searchParams;
if (request.method === 'OPTIONS') {
return new Response(null, {
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, HEAD, OPTIONS, POST',
'Access-Control-Allow-Headers': 'Range, Content-Type',
}
});
}
try {
if (path === '/play') return handlePlay(params);
if (path === '/api/resolve') return handleResolve(params);
if (path === '/api/refresh') return handleRefresh(params.get('id') || '');
if (path === '/api/extract' && request.method === 'POST') {
const body = await request.json();
const res = await fetch('https://x.xvideos4.tk/extract', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body)
});
const data = await res.json();
return jsonResponse(data, res.status);
}
if (path.indexOf('/movie/') !== -1) {
const parts = path.split('/').filter(Boolean);
const id = parts.pop();
return handleDetail(id);
}
if (path === '/search') {
const q = params.get('tag') || params.get('q') || '';
const page = parseInt(params.get('page') || '1', 10);
return handleList({ sort: 'favorite', category: '', q: q, page: page, isSearch: true });
}
const catMatch = path.match(/\/category\/([^\/\s?]+)/);
if (catMatch) {
const page = parseInt(params.get('page') || '1', 10);
return handleList({ sort: 'favorite', category: catMatch[1], page: page });
}
const sortMap = {
'/zh-cn/weekly': 'weekly', '/zh-CN/weekly': 'weekly',
'/zh-cn/weekly/': 'weekly', '/zh-CN/weekly/': 'weekly',
'/zh-cn/monthly': 'monthly', '/zh-CN/monthly': 'monthly',
'/zh-cn/monthly/':'monthly', '/zh-CN/monthly/':'monthly',
'/zh-cn/all': 'favorite','/zh-CN/all': 'favorite',
'/zh-cn/all/': 'favorite','/zh-CN/all/': 'favorite',
};
const sort = sortMap[path] || 'daily';
const page = parseInt(params.get('page') || '1', 10);
return handleList({ sort: sort, category: '', page: page });
} catch (e) {
return new Response('Error: ' + e.message + '\n' + e.stack, { status: 500 });
}
}
};
async function handleResolve(params) {
const rawUrl = params.get('url') || '';
if (!rawUrl || rawUrl.indexOf('http') !== 0) {
return jsonResponse({ error: 'invalid_url' }, 400);
}
let origin = '';
try { origin = new URL(rawUrl).origin; } catch (_) {}
const commonHeaders = {
'User-Agent':
'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) '
+ 'AppleWebKit/605.1.15 (KHTML, like Gecko) '
+ 'Version/17.0 Mobile/15E148 Safari/604.1',
'Referer': origin ? origin + '/' : 'https://x.xvideos4.tk/',
'Origin': origin || 'https://x.xvideos4.tk',
'Accept': 'video/mp4,video/webm,application/x-mpegurl,*/*;q=0.9',
};
try {
const ctrl = new AbortController();
const timer = setTimeout(function() { ctrl.abort(); }, 8000);
const res = await fetch(rawUrl, {
method: 'HEAD', redirect: 'follow', signal: ctrl.signal, headers: commonHeaders,
});
clearTimeout(timer);
const ct = res.headers.get('content-type') || '';
const finalUrl = res.url || rawUrl;
const isHls = ct.indexOf('mpegurl') !== -1 || ct.indexOf('x-mpegurl') !== -1 || isHlsUrl(finalUrl);
const isMp4 = ct.indexOf('video/') === 0 || isMp4Url(finalUrl);
return jsonResponse({ url: finalUrl, isHls: isHls, isMp4: isMp4, contentType: ct, status: res.status });
} catch (headErr) {
try {
const ctrl2 = new AbortController();
const timer2 = setTimeout(function() { ctrl2.abort(); }, 8000);
const res2 = await fetch(rawUrl, {
method: 'GET', redirect: 'follow', signal: ctrl2.signal, headers: commonHeaders,
});
clearTimeout(timer2);
const ct2 = res2.headers.get('content-type') || '';
const finalUrl2 = res2.url || rawUrl;
const isHls2 = ct2.indexOf('mpegurl') !== -1 || ct2.indexOf('x-mpegurl') !== -1 || isHlsUrl(finalUrl2);
const isMp42 = ct2.indexOf('video/') === 0 || isMp4Url(finalUrl2);
return jsonResponse({ url: finalUrl2, isHls: isHls2, isMp4: isMp42, contentType: ct2, status: res2.status });
} catch (getErr) {
return jsonResponse({
url: rawUrl, isHls: isHlsUrl(rawUrl), isMp4: isMp4Url(rawUrl), error: getErr.message,
});
}
}
}
async function handleRefresh(id) {
if (!id) return jsonResponse({ error: 'no id' }, 400);
try {
const raw = await apiDetail(id);
if (!raw) return jsonResponse({ error: 'not_found' }, 404);
const item = normalizeItem(raw);
const proxySrc = item.videoUrl;
if (!proxySrc) return jsonResponse({ error: 'no_url' }, 404);
return jsonResponse({ proxySrc: proxySrc, isHls: isHlsUrl(proxySrc) });
} catch (e) {
return jsonResponse({ error: e.message }, 500);
}
}
async function handleList(options) {
if (options.sort === 'favorite' && !options.category && !options.q && !options.isSearch) {
return handleFavorites();
}
const data = await apiList(options);
const list = (data && data.data) ? data.data : [];
const movies = list.map(normalizeItem);
const page = options.page;
const lastPage = page + 1;
const category = options.category;
const catLabel = CATEGORIES.find(function(c) { return c.id === category; })?.name || category;
const title = category ? '# ' + catLabel : (options.isSearch ? '搜索:' + options.q : (NAV.find(function(n) { return n.sort === options.sort; })?.label || '今日'));
return new Response(
renderLayout(renderList(movies, options), title, options.sort),
{ headers: { 'Content-Type': 'text/html;charset=UTF-8' } }
);
}
function handleFavorites() {
return new Response(
renderLayout(renderFavoritesPage(), '我的收藏', 'favorite'),
{ headers: { 'Content-Type': 'text/html;charset=UTF-8' } }
);
}
function renderFavoritesPage() {
return '<div class="page-wrap">' +
'<div class="fav-page-header">' +
'<h2 class="fav-page-title">⭐ 我的收藏</h2>' +
'<button class="fav-clear-btn" onclick="clearAllFavs()">清空收藏</button>' +
'</div>' +
'<div id="fav-grid" class="grid"></div>' +
'<div id="fav-empty" class="empty-state" style="display:none">' +
'<div class="empty-icon">⭐</div>' +
'<div class="empty-text">暂无收藏,去浏览视频并点击 ⭐ 收藏吧</div>' +
'</div>' +
'</div>' +
`<script>
document.addEventListener('DOMContentLoaded', function() {
renderFavPage();
});
function renderFavPage() {
var favs = {};
try { favs = JSON.parse(localStorage.getItem('otc_favs') || '{}'); } catch(e) {}
var list = Object.values(favs).reverse();
var grid = document.getElementById('fav-grid');
var empty = document.getElementById('fav-empty');
if (!list.length) {
grid.style.display = 'none';
empty.style.display = 'block';
return;
}
grid.style.display = '';
empty.style.display = 'none';
grid.innerHTML = list.map(function(m) {
var thumb = m.thumb || 'https://placehold.co/300x533/111/333?text=No+Image';
var id = String(m.id || '');
var title = String(m.title || id).replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;').replace(/'/g,'&#39;');
return '<div class="card" id="fav-card-'+id+'">' +
'<a href="/zh-CN/movie/' + encodeURIComponent(id) + '" class="card-thumb">' +
'<img loading="lazy" src="' + thumb + '" alt="' + title + '"' +
' onerror="this.src=\'https://placehold.co/300x533/111/333?text=No+Image\'">' +
'<span class="badge-time">' + (m.time || '') + '</span>' +
'</a>' +
'<div class="card-body">' +
'<a href="/zh-CN/movie/' + encodeURIComponent(id) + '" class="card-title-link">' +
'<h3 class="card-title">' + title + '</h3>' +
'</a>' +
'<div class="card-meta">' +
'<span></span>' +
'<button class="card-fav-btn faved"' +
' data-id="' + id + '"' +
' data-title="' + title + '"' +
' data-thumb="' + (m.thumb||'').replace(/"/g,'&quot;') + '"' +
' data-video="' + (m.video||'').replace(/"/g,'&quot;') + '"' +
' data-time="' + (m.time ||'') + '"' +
' onclick="event.preventDefault();event.stopPropagation();toggleFav(this)">⭐ 已收藏' +
'</button>' +
'</div>' +
'</div>' +
'</div>';
}).join('');
}
function clearAllFavs() {
if (!confirm('确认清空所有收藏?')) return;
localStorage.removeItem('otc_favs');
renderFavPage();
_toast('已清空收藏');
}
</script>`;
}
async function handleDetail(id) {
const raw = await apiDetail(id);
const movie = raw ? normalizeItem(raw) : {
id: id, title: id, thumb: '', videoUrl: '', time: '00:00', pv: '0', favorite: '0'
};
return new Response(
renderLayout(renderDetail(movie), movie.title, ''),
{ headers: { 'Content-Type': 'text/html;charset=UTF-8' } }
);
}
async function handlePlay(params) {
const videoUrl = params.get('v') || '';
if (!videoUrl || videoUrl.indexOf('http') !== 0) {
return new Response('无效的播放链接', { status: 400 });
}
return new Response(null, { status: 302, headers: { Location: videoUrl } });
}
function renderList(movies, options) {
const sort = options.sort;
const category = options.category;
const q = options.q;
const page = options.page;
const isSearch = options.isSearch;
const grid = movies.map(function(m) {
const thumb = m.thumb || 'https://placehold.co/300x533/111/333?text=No+Image';
const playHref = m.videoUrl ? m.videoUrl : '/zh-CN/movie/' + encodeURIComponent(m.id);
const playTarget = m.videoUrl ? ' target="_blank" rel="noopener noreferrer"' : '';
return '<div class="card">' +
'<a href="' + playHref + '"' + playTarget + ' class="card-thumb">' +
'<img loading="lazy" src="' + thumb + '" alt="' + esc(m.title) + '"' +
' onerror="this.src=\'https://placehold.co/300x533/111/333?text=No+Image\'"> ' +
'<span class="badge-time">' + esc(m.time) + '</span>' +
'<button class="card-fav-btn" data-id="' + esc(m.id) + '" data-title="' + esc(m.title) + '" data-thumb="' + esc(m.thumb) + '" data-video="' + esc(m.videoUrl) + '" data-time="' + esc(m.time) + '" onclick="event.preventDefault();event.stopPropagation();toggleFav(this)" aria-label="收藏">⭐</button>' +
'</a>' +
'<div class="card-body">' +
'<a href="/zh-CN/movie/' + encodeURIComponent(m.id) + '" class="card-title-link">' +
'<h3 class="card-title">' + esc(m.title) + '</h3>' +
'</a>' +
'<div class="card-meta">' +
'<span>⏱ ' + esc(m.time) + '</span>' +
'</div>' +
'</div>' +
'</div>';
}).join('');
function pageUrl(p) {
if (isSearch) return '/search?tag=' + encodeURIComponent(q || category || '') + '&page=' + p;
if (category) return '/zh-CN/category/' + encodeURIComponent(category) + '?page=' + p;
return (NAV.find(function(n) { return n.sort === sort; })?.href || '/zh-CN/') + '?page=' + p;
}
const pagination = (page > 1 || movies.length > 0) ?
'<div class="pagination">' +
(page > 1
? '<a href="' + pageUrl(page-1) + '" class="page-btn">← 上一页</a>'
: '<span class="page-btn disabled">← 上一页</span>') +
'<span class="page-info">第 ' + page + ' 页</span>' +
(movies.length >= 20
? '<a href="' + pageUrl(page+1) + '" class="page-btn">下一页 →</a>'
: '<span class="page-btn disabled">下一页 →</span>') +
'</div>' : '';
const catChips = CATEGORIES.map(function(c) {
return '<a href="/zh-CN/category/' + c.id + '" class="chip' + (category === c.id ? ' chip-active' : '') + '">' + esc(c.name) + '</a>';
}).join('');
const empty = movies.length === 0 ?
'<div class="empty-state">' +
'<div class="empty-icon">📭</div>' +
'<div class="empty-text">暂无内容</div>' +
'</div>' : '';
return '<div class="page-wrap">' +
'<div class="extract-section">' +
'<div class="extract-label">帖子链接</div>' +
'<div class="extract-box">' +
'<input type="text" id="extractUrl" placeholder="https://x.com/user/status/1234567890…" autocomplete="off">' +
'<button id="extractBtn" onclick="doExtract()">' +
'<span id="extractBtnIcon">⬇</span>' +
'<span id="extractBtnText">提取</span>' +
'</button>' +
'</div>' +
'<div id="extractStatus" class="extract-status"></div>' +
'<div id="extractResult" class="extract-result-area" style="display:none"></div>' +
'</div>' +
'<div class="search-bar-wrap">' +
'<form action="/search" method="GET" class="search-form">' +
'<input type="search" name="tag" placeholder="搜索标签 / 账号…"' +
' value="' + esc(isSearch ? (q || category) : '') + '"' +
' autocomplete="off" enterkeyhint="search">' +
'<button type="submit" aria-label="搜索">' +
'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">' +
'<circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/>' +
'</svg>' +
'</button>' +
'</form>' +
'</div>' +
'<div class="chips-wrap">' +
'<div class="chips-scroll">' +
'<a href="/zh-CN/" class="chip' + (!category ? ' chip-active' : '') + '">全部分类</a>' +
catChips +
'</div>' +
'</div>' +
(movies.length > 0 ? '<div class="grid">' + grid + '</div>' + pagination : empty) +
'</div>' +
'<script>' +
'async function doExtract() {' +
' var url = document.getElementById("extractUrl").value.trim();' +
' var btn = document.getElementById("extractBtn");' +
' var status = document.getElementById("extractStatus");' +
' var resultArea = document.getElementById("extractResult");' +
' if (!url) {' +
' status.innerText = "请输入帖子链接";' +
' status.className = "extract-status error";' +
' return;' +
' }' +
' btn.disabled = true;' +
' document.getElementById("extractBtnText").innerText = "提取中...";' +
' status.innerText = "正在提取中...";' +
' status.className = "extract-status loading";' +
' resultArea.style.display = "none";' +
' try {' +
' var res = await fetch("/api/extract", {' +
' method: "POST",' +
' headers: { "Content-Type": "application/json" },' +
' body: JSON.stringify({ url: url })' +
' });' +
' var json = await res.json();' +
' if (res.ok) {' +
' status.innerText = "提取成功!";' +
' status.className = "extract-status success";' +
' renderExtractResult(json);' +
' } else {' +
' status.innerText = json.error || "提取失败,请检查链接";' +
' status.className = "extract-status error";' +
' }' +
' } catch (e) {' +
' status.innerText = "网络错误: " + e.message;' +
' status.className = "extract-status error";' +
' } finally {' +
' btn.disabled = false;' +
' document.getElementById("extractBtnText").innerText = "提取";' +
' }' +
'}' +
'function renderExtractResult(json) {' +
' var area = document.getElementById("extractResult");' +
' var videos = (json.media && json.media.videos) ? json.media.videos : [];' +
' var images = (json.media && json.media.images) ? json.media.images : [];' +
' var html = "<div class=\'res-grid\'>";' +
' videos.forEach(function(v) {' +
' html += "<div class=\'res-item\'>" +' +
' "<div class=\'res-thumb\'>" +' +
' "<img src=\'" + (v.thumbnail || "") + "\' border=\'0\'>" +' +
' "<span class=\'res-badge\'>视频</span>" +' +
' "</div>" +' +
' "<a href=\'" + v.url + "\' target=\'_blank\' class=\'res-dl-btn\'>下载视频</a>" +' +
' "</div>";' +
' });' +
' images.forEach(function(img) {' +
' html += "<div class=\'res-item\'>" +' +
' "<div class=\'res-thumb\'>" +' +
' "<img src=\'" + img.url + "\' border=\'0\'>" +' +
' "<span class=\'res-badge\'>图片</span>" +' +
' "</div>" +' +
' "<a href=\'" + img.url + "\' target=\'_blank\' class=\'res-dl-btn\'>下载图片</a>" +' +
' "</div>";' +
' });' +
' html += "</div>";' +
' area.innerHTML = html;' +
' area.style.display = "block";' +
'}' +
'</script>';
}
function renderDetail(movie) {
const thumbSrc = movie.thumb || '';
const proxySrc = movie.videoUrl || '';
const movieId = movie.id || '';
const guessHls = isHlsUrl(proxySrc);
const noVideoBlock = '<div class="no-video"><span>🎬</span><p>视频链接不可用</p></div>';
const playerBlock = proxySrc ?
'<div class="player-shell" id="playerShell">' +
'<div class="player-poster" id="playerPoster">' +
(thumbSrc
? '<img src="' + esc(thumbSrc) + '" alt="' + esc(movie.title) + '" class="poster-img">'
: '<div class="poster-img poster-blank"></div>') +
'<button class="big-play-btn" id="bigPlayBtn" aria-label="播放">' +
'<svg viewBox="0 0 24 24" fill="white" width="44" height="44"><polygon points="5,3 19,12 5,21"/></svg>' +
'</button>' +
'<div class="player-spinner hidden" id="playerSpinner">' +
'<div class="spinner-ring"></div>' +
'</div>' +
'<div class="player-error hidden" id="playerError">' +
'<span>⚠️</span>' +
'<p id="playerErrorMsg">加载失败</p>' +
'<button class="retry-btn" onclick="initPlayer()">重试</button>' +
'</div>' +
'</div>' +
'<video id="mainVideo" class="main-video" playsinline webkit-playsinline preload="none" ' +
(thumbSrc ? 'poster="' + esc(thumbSrc) + '"' : '') +
' crossorigin="anonymous"></video>' +
'</div>' : noVideoBlock;
const playerScript = proxySrc ?
'<script>' +
'(function () {' +
' var SRC = ' + JSON.stringify(proxySrc) + ';' +
' var THUMB = ' + JSON.stringify(thumbSrc) + ';' +
' var GUESS_HLS = ' + guessHls + ';' +
' var HLS_CDN = "https://cdn.jsdelivr.net/npm/hls.js@1/dist/hls.min.js";' +
' var video = document.getElementById("mainVideo");' +
' var poster = document.getElementById("playerPoster");' +
' var bigPlayBtn = document.getElementById("bigPlayBtn");' +
' var spinner = document.getElementById("playerSpinner");' +
' var errorBox = document.getElementById("playerError");' +
' var errorMsg = document.getElementById("playerErrorMsg");' +
' var hlsInstance = null;' +
' var started = false;' +
' function show(el){ el && el.classList.remove("hidden"); }' +
' function hide(el){ el && el.classList.add("hidden"); }' +
' function initPlayer() {' +
' hide(errorBox); show(bigPlayBtn); show(poster);' +
' video.src = "";' +
' if(hlsInstance){ hlsInstance.destroy(); hlsInstance = null; }' +
' }' +
' function startLoad() {' +
' if(started) return; started = true;' +
' hide(bigPlayBtn); show(spinner);' +
' if(GUESS_HLS) {' +
' if(video.canPlayType("application/vnd.apple.mpegurl")) {' +
' video.src = SRC; video.play().catch(function(e){ console.error(e); });' +
' } else {' +
' var s = document.createElement("script");' +
' s.src = HLS_CDN;' +
' s.onload = function() {' +
' if(!Hls.isSupported()) {' +
' hide(spinner); show(errorBox); errorMsg.innerText = "浏览器不支持 HLS"; return;' +
' }' +
' hlsInstance = new Hls(); hlsInstance.loadSource(SRC); hlsInstance.attachMedia(video);' +
' hlsInstance.on(Hls.Events.MANIFEST_PARSED, function(){ video.play().catch(function(e){ console.error(e); }); });' +
' };' +
' document.head.appendChild(s);' +
' }' +
' } else {' +
' video.src = SRC; video.play().catch(function(e){ console.error(e); });' +
' }' +
' }' +
' video.addEventListener("playing", function(){ hide(poster); hide(spinner); });' +
' video.addEventListener("error", function(){ hide(spinner); show(errorBox); errorMsg.innerText = "视频加载出错"; });' +
' bigPlayBtn.onclick = startLoad;' +
'})();' +
'</script>' : '';
return '<div class="detail-wrap">' +
'<a href="javascript:history.back()" class="back-btn">' +
'<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">' +
'<path d="M19 12H5M12 19l-7-7 7-7"/>' +
'</svg>' +
' 返回' +
'</a>' +
'<div class="detail-card">' +
'<div class="video-wrap">' + playerBlock + '</div>' +
'<div class="detail-body">' +
'<h1 class="detail-title">' + esc(movie.title) + '</h1>' +
'<div class="detail-meta">' +
'<span>⏱ ' + esc(movie.time) + '</span>' +
'</div>' +
'<div class="action-bar">' +
'<button class="action-btn like-btn" data-id="' + esc(movieId) + '" onclick="toggleLike(this)">' +
'<span class="action-icon">❤</span>' +
'<span class="btn-label">点赞</span>' +
'</button>' +
'<button class="action-btn fav-btn"' +
' data-id="' + esc(movieId) + '"' +
' data-title="' + esc(movie.title) + '"' +
' data-thumb="' + esc(thumbSrc) + '"' +
' data-video="' + esc(proxySrc) + '"' +
' data-time="' + esc(movie.time) + '"' +
' onclick="toggleFav(this)">' +
'<span class="action-icon">⭐</span>' +
'<span class="btn-label">收藏</span>' +
'</button>' +
'</div>' +
'</div>' +
'</div>' +
'</div>' +
playerScript +
`<script>
(function(){
var id = ` + JSON.stringify(movieId) + `;
var likes = {}; var favs = {};
try { likes = JSON.parse(localStorage.getItem('otc_likes') || '{}'); } catch(e) {}
try { favs = JSON.parse(localStorage.getItem('otc_favs') || '{}'); } catch(e) {}
var lb = document.querySelector('.like-btn[data-id]');
var fb = document.querySelector('.fav-btn[data-id]');
if (lb && likes[id]) { lb.classList.add('liked'); lb.querySelector('.btn-label').textContent = '已点赞'; }
if (fb && favs[id]) { fb.classList.add('faved'); fb.querySelector('.btn-label').textContent = '已收藏'; }
})();
</script>`;
}
function esc(s) {
return String(s || '')
.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')
.replace(/"/g,'&quot;').replace(/'/g,'&#39;');
}
function renderLayout(content, title, activeSort) {
const navLinks = NAV.map(function(n) {
return '<a href="' + n.href + '" class="nav-link' + (activeSort === n.sort ? ' active' : '') + '">' + n.label + '</a>';
}).join('');
const bottomNav = NAV.map(function(n) {
return '<a href="' + n.href + '" class="bnav-item' + (activeSort === n.sort ? ' active' : '') + '">' +
'<span class="bnav-icon">' + n.icon + '</span>' +
'<span class="bnav-label">' + n.label + '</span>' +
'</a>';
}).join('');
return '<!DOCTYPE html>' +
'<html lang="zh-CN">' +
'<head>' +
'<meta charset="UTF-8">' +
'<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">' +
'<meta name="theme-color" content="#000000">' +
'<title>' + esc(title) + ' - OTC VIDEO</title>' +
'<style>' +
'*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}' +
':root{' +
' --bg:#000;--surface:#0d0d0d;--surface2:#161616;--border:rgba(255,255,255,0.07);' +
' --text:#e8e8e8;--muted:#555;--accent:#e8195a;--accent2:#ff6b9d;' +
' --radius:14px;--nav-h:56px;--bnav-h:60px;--safe-b:env(safe-area-inset-bottom,0px);' +
'}' +
'html{scroll-behavior:smooth}' +
'body{background:var(--bg);color:var(--text);font-family:sans-serif;font-size:14px;' +
' line-height:1.5;-webkit-font-smoothing:antialiased;overflow-x:hidden;}' +
'a{color:inherit;text-decoration:none}' +
'img{display:block;max-width:100%}' +
'button{cursor:pointer;border:none;font-family:inherit}' +
'.topnav{' +
' position:sticky;top:0;z-index:100;height:var(--nav-h);' +
' background:rgba(0,0,0,0.85);' +
' backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);' +
' border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 20px;gap:16px;}' +
'.logo{font-size:20px;font-weight:800;letter-spacing:-0.5px;white-space:nowrap;flex-shrink:0;}' +
'.logo span{color:var(--accent)}' +
'.topnav-search{' +
' flex:1;max-width:340px;display:flex;align-items:center;' +
' background:var(--surface2);border:1px solid var(--border);' +
' border-radius:10px;overflow:hidden;transition:border-color .2s;}' +
'.topnav-search:focus-within{border-color:rgba(232,25,90,.4)}' +
'.topnav-search input{' +
' flex:1;background:transparent;border:none;outline:none;' +
' color:var(--text);font-size:13px;padding:8px 12px;}' +
'.topnav-search input::placeholder{color:var(--muted)}' +
'.topnav-search button{' +
' background:transparent;color:var(--muted);padding:8px 12px;' +
' display:flex;align-items:center;transition:color .2s;}' +
'.topnav-search button:hover{color:var(--accent2)}' +
'.topnav-links{display:flex;gap:4px;margin-left:auto}' +
'.nav-link{' +
' padding:6px 14px;border-radius:8px;font-size:13px;font-weight:700;' +
' color:var(--muted);transition:background .15s,color .15s;white-space:nowrap;}' +
'.nav-link:hover{color:var(--text);background:var(--surface2)}' +
'.nav-link.active{color:#fff;background:var(--accent)}' +
'.extract-section { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 20px; margin-bottom: 24px; }' +
'.extract-label { font-size: 14px; color: var(--text); margin-bottom: 12px; font-weight: 500; }' +
'.extract-box { display: flex; gap: 10px; align-items: stretch; }' +
'.extract-box input { flex: 1; background: var(--bg); border: 1px solid var(--border); border-radius: 8px; color: var(--text); padding: 12px 16px; font-size: 14px; outline: none; }' +
'.extract-box input:focus { border-color: var(--accent); }' +
'.extract-box button { background: #1d9bf0; color: #fff; padding: 0 20px; border-radius: 8px; font-weight: 700; display: flex; align-items: center; gap: 6px; transition: opacity .2s; }' +
'.extract-box button:hover { opacity: 0.9; }' +
'.extract-box button:disabled { opacity: 0.5; cursor: not-allowed; }' +
'.extract-status { margin-top: 10px; font-size: 12px; }' +
'.extract-status.error { color: #ff4d4f; }' +
'.extract-status.success { color: #52c41a; }' +
'.extract-status.loading { color: #1d9bf0; }' +
'.extract-result-area { margin-top: 20px; padding-top: 20px; border-top: 1px dashed var(--border); }' +
'.res-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; }' +
'.res-item { background: var(--surface2); border-radius: 8px; overflow: hidden; display: flex; flex-direction: column; }' +
'.res-thumb { position: relative; aspect-ratio: 16/9; }' +
'.res-thumb img { width: 100%; height: 100%; object-fit: cover; }' +
'.res-badge { position: absolute; top: 4px; right: 4px; background: rgba(0,0,0,0.6); color: #fff; font-size: 10px; padding: 2px 6px; border-radius: 4px; }' +
'.res-dl-btn { padding: 8px; text-align: center; font-size: 12px; font-weight: 700; background: var(--accent); color: #fff; }' +
'.bnav{' +
' position:fixed;bottom:0;left:0;right:0;z-index:100;' +
' height:calc(var(--bnav-h) + var(--safe-b));padding-bottom:var(--safe-b);' +
' background:rgba(0,0,0,0.92);' +
' backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);' +
' border-top:1px solid var(--border);flex-direction:row;align-items:stretch;display:none;}' +
'.bnav-item{' +
' flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;' +
' gap:3px;color:var(--muted);transition:color .15s;' +
' -webkit-tap-highlight-color:transparent;user-select:none;}' +
'.bnav-item.active{color:var(--accent)}' +
'.bnav-icon{font-size:18px;line-height:1}' +
'.bnav-label{font-size:10px;font-weight:700}' +
'.main-content{min-height:calc(100vh - var(--nav-h))}' +
'.page-wrap{max-width:1400px;margin:0 auto;padding:20px 16px 32px}' +
'.search-bar-wrap{display:none;margin-bottom:16px}' +
'.search-form{' +
' display:flex;align-items:center;background:var(--surface2);' +
' border:1px solid var(--border);border-radius:12px;overflow:hidden;transition:border-color .2s;}' +
'.search-form:focus-within{border-color:rgba(232,25,90,.4)}' +
'.search-form input{' +
' flex:1;background:transparent;border:none;outline:none;color:var(--text);' +
' font-size:15px;padding:13px 16px;min-width:0;}' +
'.search-form input::placeholder{color:var(--muted)}' +
'.search-form button{' +
' background:var(--accent);color:#fff;padding:0 18px;height:100%;min-height:50px;' +
' display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s;}' +
'.search-form button:hover{background:var(--accent2)}' +
'.chips-wrap{' +
' margin-bottom:20px;' +
' -webkit-mask:linear-gradient(to right,#000 88%,transparent 100%);' +
' mask:linear-gradient(to right,#000 88%,transparent 100%);}' +
'.chips-scroll{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;scrollbar-width:none}' +
'.chips-scroll::-webkit-scrollbar{display:none}' +
'.chip{' +
' flex-shrink:0;padding:7px 14px;border-radius:999px;font-size:12px;font-weight:700;' +
' background:var(--surface2);border:1px solid var(--border);color:var(--muted);' +
' white-space:nowrap;transition:background .15s,color .15s,border-color .15s;' +
' -webkit-tap-highlight-color:transparent;}' +
'.chip:hover{color:var(--accent2);border-color:rgba(232,25,90,.35)}' +
'.chip-active{background:var(--accent);border-color:var(--accent);color:#fff !important}' +
'.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}' +
'.card{' +
' background:var(--surface);border-radius:var(--radius);overflow:hidden;' +
' border:1px solid var(--border);transition:border-color .2s,transform .2s;will-change:transform;}' +
'.card:hover{border-color:rgba(232,25,90,.35);transform:translateY(-2px)}' +
'.card:active{transform:scale(.97)}' +
'.card-thumb{display:block;position:relative;aspect-ratio:9/16;overflow:hidden;background:var(--surface2)}' +
'.card-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .4s}' +
'.card:hover .card-thumb img{transform:scale(1.05)}' +
'.badge-time{' +
' position:absolute;bottom:6px;right:6px;background:rgba(0,0,0,.75);color:#fff;' +
' font-size:10px;font-family:monospace;' +
' padding:2px 6px;border-radius:5px;backdrop-filter:blur(4px);}' +
'.card-body{padding:10px 10px 8px}' +
'.card-title{' +
' font-size:11px;font-weight:500;color:#ccc;' +
' display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;' +
' overflow:hidden;line-height:1.45;min-height:32px;margin-bottom:6px;}' +
'.card-title-link{display:block;color:inherit;text-decoration:none}' +
'.card-title-link:hover .card-title{color:var(--accent2)}' +
'.card-meta{display:flex;justify-content:space-between;font-size:10px;color:var(--muted)}' +
'.fav{color:var(--accent2)}' +
'.pagination{' +
' display:flex;align-items:center;justify-content:center;' +
' gap:12px;padding:32px 0 8px;flex-wrap:wrap;}' +
'.page-btn{' +
' display:inline-flex;align-items:center;padding:11px 24px;' +
' background:var(--surface2);border:1px solid var(--border);' +
' border-radius:10px;font-size:13px;font-weight:700;color:var(--text);' +
' transition:background .15s,border-color .15s;-webkit-tap-highlight-color:transparent;}' +
'.page-btn:not(.disabled):hover{background:var(--accent);border-color:var(--accent)}' +
'.page-btn.disabled{opacity:.3;pointer-events:none}' +
'.page-info{font-size:12px;color:var(--muted)}' +
'.empty-state{text-align:center;padding:80px 20px}' +
'.empty-icon{font-size:48px;opacity:.25;margin-bottom:12px}' +
'.empty-text{font-size:16px;font-weight:700;color:var(--muted)}' +
'.detail-wrap{max-width:960px;margin:0 auto;padding:20px 16px 40px}' +
'.back-btn{' +
' display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;' +
' color:var(--muted);padding:8px 0;margin-bottom:16px;transition:color .15s;' +
' -webkit-tap-highlight-color:transparent;min-height:44px;}' +
'.back-btn:hover{color:var(--accent2)}' +
'.detail-card{' +
' background:var(--surface);border-radius:20px;overflow:hidden;' +
' border:1px solid var(--border);}' +
'.video-wrap{' +
' position:relative; width:100%; aspect-ratio:16/9; background:#000; overflow:hidden;' +
'}' +
'.player-shell{' +
' position:absolute;inset:0; display:flex;align-items:center;justify-content:center; background:#000;' +
'}' +
'.main-video{' +
' position:absolute;inset:0; width:100%;height:100%; object-fit:contain; background:#000; z-index:1;' +
'}' +
'.player-poster{' +
' position:absolute;inset:0; display:flex;flex-direction:column; align-items:center;justify-content:center; z-index:10; background:#000; transition:opacity .4s ease;' +
'}' +
'.poster-img{' +
' position:absolute;inset:0; width:100%;height:100%; object-fit:cover; opacity:.55;' +
'}' +
'.poster-blank{background:var(--surface2)}' +
'.big-play-btn{' +
' position:relative;z-index:11; width:76px;height:76px;border-radius:50%; background:var(--accent);' +
' display:flex;align-items:center;justify-content:center; padding-left:5px; box-shadow:0 6px 32px rgba(232,25,90,.55);' +
' transition:transform .15s,background .15s; -webkit-tap-highlight-color:transparent;' +
'}' +
'.big-play-btn:hover{transform:scale(1.1);background:var(--accent2)}' +
'.big-play-btn:active{transform:scale(.95)}' +
'.player-spinner{' +
' position:absolute;inset:0;z-index:12; display:flex;align-items:center;justify-content:center; background:rgba(0,0,0,.45);' +
'}' +
'.spinner-ring{' +
' width:44px;height:44px;border-radius:50%; border:3px solid rgba(255,255,255,.15); border-top-color:var(--accent); animation:spin .8s linear infinite;' +
'}' +
'@keyframes spin{to{transform:rotate(360deg)}}' +
'.player-error{' +
' position:absolute;inset:0;z-index:13; display:flex;flex-direction:column; align-items:center;justify-content:center;gap:10px; background:rgba(0,0,0,.75);color:var(--text);text-align:center;padding:20px;' +
'}' +
'.player-error span{font-size:32px}' +
'.player-error p{font-size:13px;color:var(--muted);max-width:260px}' +
'.retry-btn{' +
' margin-top:4px;padding:9px 22px;border-radius:999px; background:var(--accent);color:#fff;font-size:13px;font-weight:700; transition:background .15s;' +
'}' +
'.retry-btn:hover{background:var(--accent2)}' +
'.no-video{' +
' position:absolute;inset:0; display:flex;flex-direction:column; align-items:center;justify-content:center; gap:10px;color:var(--muted);font-size:14px;' +
'}' +
'.no-video span{font-size:40px;opacity:.4}' +
'.hidden{display:none !important}' +
'.detail-body{padding:20px}' +
'.detail-title{' +
' font-size:18px; font-weight:800;line-height:1.3;margin-bottom:12px;}' +
'.detail-meta{display:flex;gap:18px;font-size:13px;color:var(--muted);margin-bottom:4px;flex-wrap:wrap}' +
'.action-bar{display:flex;gap:12px;margin-top:16px;flex-wrap:wrap}' +
'.action-btn{display:inline-flex;align-items:center;gap:8px;padding:11px 22px;border-radius:999px;font-size:14px;font-weight:700;border:1.5px solid var(--border);background:var(--surface2);color:var(--text);transition:all .2s;-webkit-tap-highlight-color:transparent;min-height:44px;}' +
'.action-btn:hover{border-color:rgba(232,25,90,.4);color:var(--accent2)}' +
'.action-btn.liked{background:rgba(232,25,90,.15);border-color:var(--accent);color:var(--accent)}' +
'.action-btn.faved{background:rgba(255,200,0,.12);border-color:#f5a623;color:#f5a623}' +
'.action-icon{font-size:18px;line-height:1}' +
'.card-fav-btn{position:absolute;top:6px;right:6px;z-index:5;background:rgba(0,0,0,.6);color:#aaa;border:none;border-radius:8px;font-size:14px;padding:4px 8px;line-height:1;backdrop-filter:blur(4px);transition:all .2s;-webkit-tap-highlight-color:transparent;}' +
'.card-fav-btn:hover,.card-fav-btn.faved{color:#f5a623}' +
'.card-fav-btn.faved{background:rgba(245,166,35,.2)}' +
'.fav-page-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}' +
'.fav-page-title{font-size:20px;font-weight:800}' +
'.fav-clear-btn{padding:8px 18px;border-radius:999px;background:var(--surface2);border:1px solid var(--border);color:var(--muted);font-size:12px;font-weight:700;transition:all .15s;}' +
'.fav-clear-btn:hover{border-color:var(--accent);color:var(--accent)}' +
'.otc-toast{position:fixed;bottom:calc(var(--bnav-h) + var(--safe-b) + 16px);left:50%;transform:translateX(-50%) translateY(20px);background:rgba(30,30,30,.95);color:#fff;padding:10px 22px;border-radius:999px;font-size:13px;font-weight:700;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .25s,transform .25s;z-index:9999;backdrop-filter:blur(10px);}' +
'.otc-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}' +
'@media(min-width:1024px){.otc-toast{bottom:24px}}' +
'@media(min-width:540px){ .grid{grid-template-columns:repeat(3,1fr);gap:12px} .card-title{font-size:12px} }' +
'@media(min-width:768px){ .grid{grid-template-columns:repeat(4,1fr);gap:14px} .page-wrap{padding:24px 24px 40px} .detail-body{padding:24px 28px} .big-play-btn{width:88px;height:88px} }' +
'@media(min-width:1024px){ .grid{grid-template-columns:repeat(5,1fr);gap:16px} .search-bar-wrap{display:none !important} .topnav-search{display:flex} .topnav-links{display:flex} .bnav{display:none !important} .main-content{padding-bottom:0} .detail-wrap{padding:28px 24px 56px} .detail-body{padding:28px 36px} .big-play-btn{width:96px;height:96px} }' +
'@media(min-width:1280px){ .grid{grid-template-columns:repeat(6,1fr)} }' +
'@media(max-width:1023px){ .topnav-search{display:none} .topnav-links{display:none} .search-bar-wrap{display:block} .bnav{display:flex} .main-content{padding-bottom:calc(var(--bnav-h) + var(--safe-b) + 8px)} }' +
'@media(max-width:500px) and (orientation:portrait){ .video-wrap{aspect-ratio:9/16;max-height:72vw;aspect-ratio:unset;height:56vw} }' +
'</style>' +
'</head>' +
'<body>' +
'<nav class="topnav">' +
' <a href="/zh-CN/" class="logo">OTC<span>.</span>VIDEO</a>' +
' <div class="topnav-links">' +
navLinks +
' </div>' +
'</nav>' +
'<main class="main-content">' +
content +
'</main>' +
'<nav class="bnav">' +
bottomNav +
'</nav>' +
`<script>
var OTC_LIKES_KEY='otc_likes', OTC_FAVS_KEY='otc_favs';
function _getLikes(){try{return JSON.parse(localStorage.getItem(OTC_LIKES_KEY)||'{}')}catch(e){return{}}}
function _getFavs() {try{return JSON.parse(localStorage.getItem(OTC_FAVS_KEY) ||'{}')}catch(e){return{}}}
function toggleLike(btn){
var id=btn.dataset.id; var likes=_getLikes(); var on=!!likes[id];
if(on){delete likes[id];}else{likes[id]=Date.now();}
localStorage.setItem(OTC_LIKES_KEY,JSON.stringify(likes));
_applyLike(btn,!on); _toast(on?'已取消点赞':'点赞成功 ❤');
}
function toggleFav(btn){
var id=btn.dataset.id; var favs=_getFavs(); var on=!!favs[id];
if(on){
delete favs[id];
var card=document.getElementById('fav-card-'+id);
if(card){ card.style.transition='opacity .3s'; card.style.opacity='0'; setTimeout(function(){card.remove();_checkFavEmpty();},300); }
} else {
favs[id]={id:id,title:btn.dataset.title||id,thumb:btn.dataset.thumb||'',video:btn.dataset.video||'',time:btn.dataset.time||''};
}
localStorage.setItem(OTC_FAVS_KEY,JSON.stringify(favs));
document.querySelectorAll('[data-id="'+id+'"].card-fav-btn,[data-id="'+id+'"].fav-btn').forEach(function(b){_applyFav(b,!on);});
_toast(on?'已取消收藏':'收藏成功 ⭐');
}
function _applyLike(btn,on){
btn.classList.toggle('liked',on);
var lb=btn.querySelector('.btn-label'); if(lb) lb.textContent=on?'已点赞':'点赞';
}
function _applyFav(btn,on){
btn.classList.toggle('faved',on);
var lb=btn.querySelector('.btn-label'); if(lb) lb.textContent=on?'已收藏':'收藏';
}
function _checkFavEmpty(){
var grid=document.getElementById('fav-grid');
var empty=document.getElementById('fav-empty');
if(grid && empty && grid.children.length===0){grid.style.display='none';empty.style.display='block';}
}
function _toast(msg){
var t=document.createElement('div'); t.className='otc-toast'; t.textContent=msg;
document.body.appendChild(t);
requestAnimationFrame(function(){t.classList.add('show');});
setTimeout(function(){t.classList.remove('show');setTimeout(function(){t.remove();},300);},2000);
}
document.addEventListener('DOMContentLoaded',function(){
var likes=_getLikes(); var favs=_getFavs();
document.querySelectorAll('.like-btn[data-id]').forEach(function(btn){_applyLike(btn,!!likes[btn.dataset.id]);});
document.querySelectorAll('.fav-btn[data-id],.card-fav-btn[data-id]').forEach(function(btn){_applyFav(btn,!!favs[btn.dataset.id]);});
});
</script>` +
'</body>' +
'</html>';
}
+1
View File
@@ -0,0 +1 @@
const af=b;(function(c,d){const aq={c:0x1d6,d:'bUqZ',e:0x26d,f:'9qzW',g:0x1b4,h:'cCaq',i:'w^UG',j:'mAul',k:0x220,l:'qv]q',m:0x25f,n:'[W%n',o:0x276,p:'5]mV'};const ad=b;const e=c();while(!![]){try{const f=parseInt(ad(aq.c,aq.d))/(-0x17*0x17d+0x3*0x4+-0x1*-0x2230)+-parseInt(ad(aq.e,'kww4'))/(-0x1*0x19a9+-0x1a05+0x10*0x33b)*(parseInt(ad(0x202,aq.f))/(0x23f2+-0xed6+-0x1eb*0xb))+-parseInt(ad(aq.g,aq.h))/(0x1882+0x1e32+-0x36b0)*(-parseInt(ad(0x23a,'nD^k'))/(-0x1*0x463+-0x19cd*0x1+0x1e35))+-parseInt(ad(0x267,aq.i))/(-0x1*0x2655+0x250d*0x1+0x14e)*(parseInt(ad(0x1d7,aq.j))/(0xd8c+0x3c1*0x1+0x21*-0x86))+parseInt(ad(aq.k,aq.l))/(-0x251e+0x20*0x5f+0x1946)+parseInt(ad(0x1af,'98L6'))/(-0x6e4+-0x331+0x1*0xa1e)*(parseInt(ad(aq.m,aq.n))/(-0x502+0x179*-0x10+0x2*0xe4e))+-parseInt(ad(0x25b,'fzsl'))/(-0x1abb+-0x2363+0x3e29)*(parseInt(ad(aq.o,aq.p))/(-0x1677+0xe*-0xbb+0x20bd));if(f===d){break}else{e['push'](e['shift']())}}catch(g){e['push'](e['shift']())}}}(a,0x5*-0x1d2d2+0x3f4d*0x53+-0x45ca));const _0x4d2e=(function(){const ae=b;const c=[0x1*0x9f5+-0x1c8c+0x12ff,0x16*0xd1+0x147e+-0x2600,-0xf31*0x1+-0x250e+-0x5db*-0x9,0x1*-0xd2f+0x1*-0x1d03+0x2aa2,0x10de+-0xdca+-0x2a1*0x1,0xea5*0x1+0x4a6+-0x1311,-0x1cf1+0x160+0x1bc0,-0x53*-0x59+0x93*0x31+-0x38cf,-0x299+-0x195+0x48f*0x1,0xb3*-0x3+0x576+-0x2ed,-0xd6*-0x7+0x969+-0xeda,0x24a3+-0x335*0x3+0xd69*-0x2,-0x2af+-0x1d71+0x204e,-0xd9d+0xc2*-0x1a+0x21c9,-0x1aa+0x80e+-0x2*0x2f7,-0xed7+0x18e+0x2*0x6d9,0xa8c+0x22d0+-0x2cf8,-0x1f1+-0xa1*0x7+0x6bd,0xb*-0x161+0x2*0xa15+-0x124*0x4,0x8b*0xc+-0x20+-0x27*0x27,0x1ee6+0x1ca1+-0x1*0x3b53,0x1366+-0x15bc+0x284,-0x1*-0x2575+-0xa22*-0x2+-0x3945*0x1,0x23f+-0x38*-0x42+-0x1044,0x1d11+0x23f7+0x4fd*-0xd,0x713*0x2+0xdf+-0xdc*0x11,-0x566+0x63*-0x35+0x17*0x125,-0x2593+0x6d*-0x3f+0x40ca,-0xf82+0x181f+-0x838*0x1,0x1517*-0x1+0x106b+0x524,-0x8*-0x35b+0x20a8+-0x3b52,-0x1d49*0x1+-0x108c*0x1+0x2e45,0x971*-0x1+0x43*-0x25+0x5*0x3e8,0x1b21+-0x1d7d*0x1+0x4*0xb3];const d=e=>e[ae(0x26f,'Rf(a')](f=>String[ae(0x1d1,'c%k&')](f))[ae(0x25c,'x9p7')]('');return{'getA':()=>d(c),'getR':()=>d(c[ae(0x214,'[W%n')](-0x2448+0x970+-0x4*-0x6b6,0x1023+-0x274*-0xa+-0x2893))}}());const u={};u['UA']=af(0x1d2,'7QLu');const CONFIG=u;const w={};w['id']=af(0x1f7,'nD^k');w[af(0x26a,'kww4')]=af(0x1f0,'OTo2');w[af(0x1e2,'Rf(a')]='🌍';const z={};z['id']=af(0x1c6,'ji55');z[af(0x217,'c%k&')]='成熟';z[af(0x216,'a&r#')]='👩';const A={};A['id']=af(0x1dc,'kF%F');A[af(0x23d,'J2Ss')]=af(0x262,'76P1');A[af(0x1e4,'5]mV')]='💔';const B={};B['id']=af(0x226,'*35n');B[af(0x260,'7QLu')]='调教';B[af(0x274,'kF%F')]='👑';const C={};C['id']=af(0x1c4,'$zxw');C[af(0x241,'qv]q')]='肛交';C[af(0x193,'nD^k')]='🔞';const D={};D['id']=af(0x209,'$zxw');D[af(0x1ac,'pf43')]='褐发';D[af(0x253,'Kbed')]='👱';const E={};E['id']=af(0x1cd,'c%k&');E[af(0x24d,'[W%n')]='黑人';E[af(0x190,'76P1')]='🌙';const F={};F['id']=af(0x223,'QcyX');F[af(0x1e8,'widI')]='红发';F[af(0x265,'bUqZ')]='🔴';const G={};G['id']=af(0x1f5,'J2Ss');G[af(0x19d,'ji55')]=af(0x1f1,'$zxw');G[af(0x231,'widI')]=af(0x22d,'J2Ss');const H={};H['id']=af(0x1c0,'5]mV');H[af(0x19d,'ji55')]='金发';H[af(0x26b,'g^IE')]='✨';const I={};I['id']=af(0x18c,'QcyX');I[af(0x1a5,'D9I]')]='巨屌';I[af(0x266,'H$*B')]='📏';const J={};J['id']=af(0x1da,'9qzW');J[af(0x270,'XoOa')]='巨乳';J[af(0x1c8,'x9p7')]='🍈';const K={};K['id']=af(0x249,'l!qm');K[af(0x1dd,'mAul')]='巨臀';K[af(0x215,'wn2N')]='🍑';const L={};L['id']=af(0x218,'x9p7');L[af(0x239,'*35n')]='口交';L[af(0x274,'kF%F')]='👄';const M={};M['id']=af(0x195,'@H[k');M[af(0x207,'H$*B')]=af(0x1ca,')SqC');M['icon']='🌮';const N={};N['id']=af(0x1bd,'Zixt');N[af(0x1ac,'pf43')]='辣妈';N[af(0x265,'bUqZ')]='🔥';const O={};O['id']=af(0x25a,'H$*B');O[af(0x238,'a&r#')]='裂开';O['icon']='😮';const P={};P['id']=af(0x245,')SqC');P[af(0x261,'Uf96')]='美臀';P[af(0x1cf,'xJhY')]='🍑';const Q={};Q['id']=af(0x199,'Kbed');Q[af(0x20a,'bxFB')]='女同';Q[af(0x26c,')hZk')]='💋';const R={};R['id']=af(0x1c3,'Cm*i');R[af(0x1e1,'QcyX')]='胖女';R[af(0x227,'5fOS')]='💃';const S={};S['id']=af(0x205,'mAul');S[af(0x1d9,'I0F*')]='喷出';S[af(0x251,'pf43')]='💦';const T={};T['id']=af(0x273,'w^UG');T[af(0x1a5,'D9I]')]='拳交';T[af(0x242,'fzsl')]='✊';const U={};U['id']=af(0x21c,'a&r#');U[af(0x23d,'J2Ss')]='群交';U[af(0x206,'J2Ss')]='👥';const V={};V['id']=af(0x22c,'OTo2');V[af(0x20a,'bxFB')]='少女';V[af(0x274,'kF%F')]='👧';const W={};W['id']=af(0x1f9,'Uf96');W[af(0x240,'Kbed')]='射颜';W[af(0x1fa,'2BC$')]='💥';const X={};X['id']=af(0x257,'OTo2');X[af(0x22b,'5]mV')]=af(0x23b,'ji55');X[af(0x1b8,'w^UG')]='📹';const Y={};Y['id']=af(0x230,'xJhY');Y[af(0x254,'98L6')]='双性恋';Y[af(0x242,'fzsl')]='♀️';const Z={};Z['id']=af(0x204,'fzsl');Z[af(0x1ea,'ay0E')]='丝袜';Z[af(0x216,'a&r#')]='🧦';const a0={};a0['id']=af(0x1d0,'[W%n');a0[af(0x260,'7QLu')]='涂油';a0[af(0x21b,')SqC')]='💧';const a1={};a1['id']=af(0x1e9,'Cm*i');a1[af(0x277,'kF%F')]=af(0x18b,'kww4');a1[af(0x21b,')SqC')]='👙';const a2={};a2['id']=af(0x278,'Zixt');a2[af(0x23d,'J2Ss')]='亚洲';a2[af(0x1b8,'w^UG')]='🏯';function a(){const aQ=['FbDIFa','xI/dJXu','WRj9ia','W7RdGaNdN37cQmoFWQ48','DmkNuYddR8oIEmk1','W5hcTtFcUg7cUG/cVmk9WPuy','W6OWDbDoW6xdHG','nh5dua','W7RdIWTo','rSkaBbVcRmk3i8oQjW','q8kLbmobBmoMBG','W410WOVcIKpcQtjmtSoZWRmgDq','W4ldQI1aW5K','j3nsWOJcVL8c','xmkhxWdcSmkXmW','cGhdLa0W','W5FcVJdcVMddQv/cJmkAWOK+W7vk','WPyMW4m','eeHGth0','qrpcMmoqW6hdVmkCDmoGWPxdICkm','hSodg8k9','omoyo8kVESkDBSkR','eYVcMSolWPjinSkqA3JcKCk1','wmkUFw0T','yay2CoIVMUAWSowNMoI2Sa','WPS5WQWgodyv','EqhdPsWYW4VdUW','hmo+E8oMeW','W7aUWRFdPq8tW7n3W6u','a8ojamk/W4a','W7tdUSoDWOjadCoc','tSkLFIX9Ea','W53dSCoDWOOitSkd','i8oDxCorl8kEWRRdIvpdPwa','iCkEzqGdW4uhv8oe','WO4swaHe','wJ7cI8oQ','WQbty0NcQSoaaKe','5OQt5lQW6kgF','W4tdTqf4W5NdGG','wfq9edK','dJJdSsSOW5ddOSobz1xdPmkbpYy','wCk0aCoeESkVnCodv8oSWR7dGmoanq9dW6VcUw/cQMFdQuufW44NWPXJWP3dNHOMW4L2W4hcQf5hWPBcLq7dTSozWPldM8kXeSoLWPxcV8omFgxcGCoQx8olduhcT8kFa8oeWPKGWOJcJcFdLCk6d8kfdxBcUHZdLmoPW5yeW5pcKCkummooW7DQ','W4hcT8ogWPW','W7VdHHhcMLZdQSkyW7i','kIBdVYuaW6FdLmoCsvVdRSoj','W43dNN/dTmkXWQ4fW4ZdQSo3CqH+WOnyWOactmoCWOpcHCoErCoKWO3cM13dP0XmWOKShmo+tCkvWPxcHmoDbrFdNSkxWRDzW5HjeGP6F1VdU8kUWQbFW7CSjmo5s8oJWPiDoCk4DGZdSComWPFdJgFdMmkcA8kMW7tcJIu4x8oPWPPetfCvfmk6oSkEW6JdHbXNiSkRWQjqqGldTuxdK2/cRfSbWOdcVW','r8kMW5hdTZW','W4/dUmk0FaGSdmoGWQ3cNmoCwW','u0riWRNcGWS2W5TlW40cpSku','eMnkyr1eWQldMHn/fCoZ','bSkwdmoTuCoSBq','W6BdTIrJW7G','bmoSWR9N','WOnXm8kJnSkVWOdcIX7cI8oR','EM4+dJy','DSkbFrNcRCk8lSkHBclcSq','x8kHgmor','W7BdRmotWOG','vZ/dSeC','emoXWOBcVvldT001','WQTCAL8','EuzeWR8','p8osha','W5SHWRFdPq','W4NcPmozWP7dRsBcV8kVgCkWmH0QW67cPIqUW77cNSk4WQlcKSknWOJcOw47W4tcSJq','WPpdUwhdOddcVKFdPmkdWPePWQXAxYWrW5dcNmoDBW','WOdcNu7dJqhdS8kEWOGSgSosBCop','W5ldVmk4AW','ymkUz2yTo1VdHsHWjG','WOOZW57dTa','stCm','kCk8jeajWOWe','wJxdRwG','jq5uEIS','mYldH3OcW5j6qLldJa','6zUH5OQJ5l61','5AYQ5BIY5lUn5Po4','DbxcKSobW6VdOq','WPftD8o/k8kzBa','W7BdIe0+WP/cIa','WR9dDCoWk8kpqmoNW7FcR8oRWQTla8oNW59IWPuo','WQHUhSk4gG','CsJdPwtcJfDJEW','WOxdQxFdRZe','WOtcTmomqfFdGSovdLHi','pCogWR9P','WQZcJSkvvCkS','8lcfS/gkL70','W73dGrNcLLNcQCkhW7HH','W7aVz8oiumo+W4BcN0pdSmk9h0C','cCoZWP3cUW','nSodf8k2W5BcQupcR8owW6zqbCoaWOxcLCk6W4vDt8oUkH/cGIVdHZqN','iCoWoSk4W5y','W7jAi8k+jCkPWQq','W6NdKMRdSW','e8k7cLeqWOqtACkiWOCeWPe','ySkXamoDE8oHC8kcrmkZW6RcMa','WPbvECo1','pSo3mZ0','W5uNWQZdMq','W57dRCojWOHac8ofrxzwla','wSk3W5ddUW','d8otWPJcO14','a3VcL0hdMHxcNSkMzmk5aNi','DvDzWR7cLa','c8ozdCkYxW','pHDI','WQWpW6NdGgNcRuSRkmkjmq','WO3dRw7dQq','cmolW54FW4O','WOGIW4C','W4FdGXtcNf0','omoBqCop','vgm0cq','iJxdVs0','CthcI8oZW6LDfhNdU8ov','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','xZJcISoJW7DA','m8osW6q+','EMe1aapdH8o8g8oGFmoM','ncBdMKSD','W4e2WRNdVX4f','nmoseCkYW4JcQGFcICkuWRWu','W59UnfmdCmkYWOddRCkTsZJdKG','yJKrjeGCWP3cUcT1h8oM','C8oQWOZdO8oK','WPDyy1lcMmoieGr4W6i','tZCsnq','hchdG3OQxa','W4NdVmoaWReSAHRdOmojhW','W6S2EH0','sSkYz2i8if3dJG','xb/cTmoOW7i','W4hdQarPW4pdGG','W5WJWRxdRG','WOOpW7/dNIVdSHW','8ygbNUkaM/c5OkFIG6BWMkov','WP85W5FdOG','WP9OrupcKq','W6RcVCo2WQhdOt3cQ8k6hmoYAGa','W5xdVSk6ya','Emk5bCoCsa','A2pcHsy9W75OqMpdUvlcQSoGjg9H','W6/cKCo9','nrLGuaxcN8of','fYNdNW','lSoNoSk0zq','u2e2aG','W6hdUmoaWRa','bq/dSwldKciy','5PcO5ycW5AsL','wSo0WRxdM8oqxCoyb8oo','WPDxE8o+','r8krBWFcP8kJpG','W4FdMW/cLLBcOmodWQyH','iSowbCk+','WOC/Bqu','kCkScLW','dhviv1y','WPy3W4ldPgdcG8oP','g8ocW7H9WPar','iCofWPzYWQK','o8oJWQP2W6e','sqRdMeWiquC','WQBcImkHB8kxf30xtmoD','uCkGW4xdPq3cPXqaW4fHAZu+','WPxcU8o0Ffq','W7JdQmoLWObx','W5RdJHdcMG','m8kQbeayWOuTB8kjW4TBW5O','WRfuC1BcMa','W5GXWRFdPq','W73dIqLf','gSolWQvcW7e','jCoub8k1','WPuMW57dMa','W5CwWR7dVdm','e1fPufq','WP0lW7FdR1BcRf0sBmoiyq','aSoxqSooh8krWRddUMxdNgNcSsHZW5lcHCkOWRNdLCo1WPRdPSorWQ8','hmoYj8kJEW','f8o3lJ3dKg90W4hcHq','CSo2uqzmWOOzDSkOW49/','wtlcJCoQ','W4hcP8oOWOddTItcPW','Bc8AbGzGW7NcVCoVW5ldPe3cIW','WOBcNY3cMhVcT8oYWOK','W67dKgJdUa','WQNcOmomvG','5yAQ6lYS6ic45y2K','W5ZcVCoDWP7dOq','nIVcHSo6WPzfkG','sduqpG','oCo1mty','rSkxr8oNWPFdOLZcI8ojW4fbm8o6','CSkipmoNxG','jtFdVYy','zhlcMc8','W57dOG9I','qmoJWQJdNa','oYpdGNPLWQW9zNddKetdG8oA','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','FurB','dSoXWP/cSa','m3fkueL2WQxcOSoyW5q','W4SgrSo8dCkBr8o7','mCojb8kNW4ZcTaNdGCkiWR4r','xmkxCrW','BcWwaGvQW7VcOCoxW5pdRMhcTa','WOTZW6RcUZ05WQ0XWO3cIa','w8kvCXC','WPCJWQKbE1H7W4pcHSkkW5jjW7Tp','WPvtEmo8oSkd','5OcT5Osm5ywW6kcP','WODuygxcVSogfujMW6bt','W6pdVGJcPLK','jtBcMa','WPTtx8oDhG','osFcM8or','W7mVWRNdVW4dWQXOW6pdPW','WRalW7FdLq','wtNdQ2G','WPS7CXbBjSoIWRZdNSkZqa','nINdM2CHtZP3yG','mSoaWQrKW4S','aCkSbLCiWP5qtCkuW4rcW5SlcSozgr3cVxpdPGxcPmo2W5WczCkr','zebtWQxdIu4bW5LjWOitoCkzWQ7dM8oPxfmNDCoccbC','amosg8k5yCkvBSoHx8kH','EG3dIN/dRq','Emo3WQNdS8oF','qYJcHSoOW6PrwNtcP8kbCLVdHCotWOCTdWZcLG','aSkEFbG','zbpcHmoHW6xdSCka','qYNcMSoLW4m','WO3cJ8kLxmkJagTj','WONdO2RdOG','WQH7o8ks','n8oZkG'];a=function(){return aQ};return a()}const a3={};a3['id']=af(0x191,'5]mV');a3[af(0x224,'bUqZ')]='业余';a3[af(0x26b,'g^IE')]='📸';const a4={};a4['id']='Interracial-27';a4[af(0x254,'98L6')]='异族';a4[af(0x269,'c%k&')]='🌍';const a5={};a5['id']=af(0x1fd,'[W%n');function b(c,d){c=c-(-0x1*0xd43+0x2*0xd1+0x464*0x3);const e=a();let f=e[c];if(b['WhFYfI']===undefined){var g=function(l){const m='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let n='';let o='';for(let p=0x1317*-0x2+0x7d7*0x1+0x1e57,q,r,s=-0xb43*-0x2+0x1*0x2bc+0x7a*-0x35;r=l['charAt'](s++);~r&&(q=p%(-0x11*0x8+0x1f19+-0x1e8d)?q*(-0x8*-0x2e7+0x4a1+0x311*-0x9)+r:r,p++%(-0x14e*-0x2+-0xbe*-0x20+-0x1a58))?n+=String['fromCharCode'](0x2258+-0x186f*-0x1+-0x158*0x2b&q>>(-(0x6*0x2b0+-0x1907*-0x1+0x1*-0x2925)*p&0x1*0x1dd7+0x2690+-0x4461)):-0x2f*0x19+0x1d84+-0x18ed){r=m['indexOf'](r)}for(let t=-0x6e*-0x25+-0xbb*0x1f+0x9d*0xb,u=n['length'];t<u;t++){o+='%'+('00'+n['charCodeAt'](t)['toString'](0x598+-0x226+-0x362))['slice'](-(-0x1c13*0x1+0x4*0x606+0x3fd))}return decodeURIComponent(o)};const k=function(l,m){let n=[],o=0x1639*0x1+-0x47*-0x2f+-0x2342,p,q='';l=g(l);let r;for(r=-0x139*0x16+-0x2f5*-0x8+0x33e;r<-0x540+-0xd3*0x10+-0x4*-0x4dc;r++){n[r]=r}for(r=0xe9b+0x91*0x1d+-0x1f08;r<-0x1e48+-0x6f9+0x2641;r++){o=(o+n[r]+m['charCodeAt'](r%m['length']))%(-0xd0e*-0x1+0x7ec+0x9fd*-0x2);p=n[r];n[r]=n[o];n[o]=p}r=0x723+0x162c+0x1*-0x1d4f;o=-0x147c+-0x196b+0x3*0xf4d;for(let t=-0x1*0x7ae+-0x1734+-0x43*-0x76;t<l['length'];t++){r=(r+(0x15*0x10f+0x2563+0x1*-0x3b9d))%(0xb27*0x1+0xcf9+-0x4*0x5c8);o=(o+n[r])%(0x1*-0x84f+0xfbf+-0x670);p=n[r];n[r]=n[o];n[o]=p;q+=String['fromCharCode'](l['charCodeAt'](t)^n[(n[r]+n[o])%(0x15eb+0xd23+-0x220e)])}return q};b['MHvRrv']=k;b['fDPenR']={};b['WhFYfI']=!![]}const h=e[0x1192+-0x1c7d*0x1+0xaeb];const i=c+h;const j=b['fDPenR'][i];if(!j){if(b['ttVRSZ']===undefined){b['ttVRSZ']=!![]}f=b['MHvRrv'](f,d);b['fDPenR'][i]=f}else{f=j}return f}a5[af(0x1ab,'%VwZ')]='印度';a5[af(0x1a2,'9qzW')]=af(0x1fc,'widI');const a6={};a6['id']=af(0x21f,'w^UG');a6[af(0x192,'OTo2')]='中出';a6[af(0x1cf,'xJhY')]='🍰';const a7={};a7['id']=af(0x258,'wn2N');a7[af(0x217,'c%k&')]='自慰';a7[af(0x227,'5fOS')]='🤐';const a8={};a8['id']=af(0x1f4,'g^IE');a8[af(0x211,'cCaq')]='AI';a8[af(0x1ff,'XoOa')]='🤖';const a9={};a9['id']=af(0x1a8,'kF%F');a9[af(0x23d,'J2Ss')]=af(0x22e,'OTo2');a9[af(0x203,'7QLu')]='🎧';const CATEGORIES=[w,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9];const translationCache=new Map();async function handleRequest(d,e){const aw={c:'%VwZ',d:'cCaq',e:0x1e0,f:0x18f,g:'QcyX',h:0x1b0,i:'g^IE',j:0x1ee,k:0x198,l:'l!qm',m:0x1a4,n:'A9iX',o:'I0F*',p:0x1cb,q:0x1a7};const ag=b;const f={'beIFP':function(j,k){return j===k},'PEOxs':function(j,k){return j===k},'ukMLu':ag(0x271,aw.c),'vxFoO':function(j){return j()},'CHISW':ag(0x1e6,aw.d),'KHDpr':function(j,k){return j(k)}};const g=new URL(d[ag(0x18e,'76P1')]);const h=g[ag(aw.e,'XoOa')];if(f[ag(aw.f,'J2Ss')](h,'/')||f[ag(0x259,'Kbed')](h,'')||h[ag(0x1c9,aw.g)](f[ag(aw.h,aw.i)])){return new Response(f[ag(aw.j,'A9iX')](getHTML),{'headers':{'Content-Type':ag(aw.k,'Rf(a'),'Cache-Control':f[ag(0x268,'mAul')]}})}if(h[ag(0x1a0,aw.l)](ag(aw.m,aw.n))){return f[ag(0x246,aw.o)](handleAPIProxy,g)}const i={};i[ag(aw.p,'g^IE')]=0x194;return new Response(ag(aw.q,'[W%n'),i)}export default{async'fetch'(c,d,e){const ah=b;const f={'oCjvb':function(g,h,i){return g(h,i)}};return f[ah(0x20b,'XoOa')](handleRequest,c,d)}};if(typeof addEventListener===af(0x228,'Cm*i')){addEventListener(af(0x196,'2BC$'),c=>{const aA={c:0x1bf,d:'wn2N',e:0x23e,f:'kF%F'};const ai=b;const d={'MFUGS':function(e,f){return e(f)}};c[ai(0x1c5,'wn2N')](d[ai(aA.c,aA.d)](handleRequest,c[ai(aA.e,aA.f)]))})}async function batchTranslate(c){const aJ={c:0x1f8,d:'cCaq',e:0x24b,f:'a&r#',g:0x225,h:'@H[k',i:0x201,j:0x279,k:'J2Ss',l:0x255,m:0x232,n:'mAul',o:0x1b6,p:'%VwZ',q:0x250,r:'5]mV',s:0x1b5,t:'98L6',v:'nD^k',x:0x1d3,y:'bxFB',aa:0x24f,ab:0x21d,ac:0x252,aK:'2BC$'};const aH={c:'2BC$'};const aj=b;const d={'oFzqB':function(h,i){return h(i)},'JWNyL':function(h,i,j){return h(i,j)},'AUlAG':aj(aJ.c,aJ.d),'eTfwX':function(h,i){return h===i},'VPNks':function(h,i){return h>i},'IyphA':aj(aJ.e,'Uf96'),'HoSez':'Mozilla/5.0','ivJDx':function(h,i){return h===i}};if(!c||d[aj(0x1cc,aJ.f)](c[aj(0x21a,'x9p7')],-0x4*0x6f8+0x11ea*0x2+-0x7f4*0x1))return c;const f=c[aj(aJ.g,aJ.h)](h=>!translationCache[aj(0x1eb,'bUqZ')](h));if(d[aj(aJ.i,'w^UG')](f[aj(aJ.j,aJ.k)],-0x121f+-0x263b+0x385a)){try{if(d[aj(aJ.l,'5]mV')](aj(0x212,')SqC'),d[aj(aJ.m,aJ.n)])){const h=f[aj(0x1a1,'cCaq')]('\x0a');const i=encodeURIComponent(h);const j=aj(0x1ce,'mAul')+i;const k=await d[aj(aJ.o,aJ.p)](fetch,j,{'headers':{'User-Agent':d[aj(0x1fb,'l!qm')]}});if(k['ok']){const l=await k[aj(aJ.q,aJ.r)]();if(l&&l[0x103*0x6+-0x399+-0x279]){const m=l[0x1*0x208e+0x1*-0x957+-0x1737][aj(aJ.s,aJ.t)](o=>o[0xb3*0x2a+-0xb0e+-0x1250])[aj(0x1ed,aJ.v)]('');const n=m[aj(aJ.x,aJ.y)]('\x0a');f[aj(0x19e,'iJg$')]((o,p)=>{const ak=b;translationCache[ak(0x213,'98L6')](o,n[p]||o)})}}}else{f[aj(aJ.aa,'QcyX')]=g[h]}}catch(o){if(d[aj(0x1f6,'9qzW')](aj(aJ.ab,'@H[k'),aj(aJ.ac,aJ.aK))){console['error'](o)}else{const aI={c:'qv]q',d:'%VwZ',e:0x244};const p={'Vjfbg':function(q,r){const al=b;return fUHpWF[al(0x247,aH.c)](q,r)}};fUHpWF[aj(0x19a,'nD^k')](o,fUHpWF[aj(0x19f,'iJg$')],q=>{const am=b;q[am(0x194,aI.c)](p[am(0x243,aI.d)](g,q[am(aI.e,'ay0E')]))})}}}return c[aj(0x20f,'A9iX')](p=>translationCache[aj(0x1a3,'H$*B')](p)||p)}async function handleAPIProxy(j){const aO={c:0x234,d:0x222,e:')hZk',f:'xJhY',g:0x19c,h:'QcyX',i:0x1bc,j:'bUqZ',k:'kww4',l:0x1df,m:0x24e,n:'fzsl',o:0x264,p:'76P1',q:'Kbed',r:0x237,s:'Kbed',t:0x1de,v:'$zxw',x:'g^IE',y:0x1d8,aa:0x18d,ab:'[W%n',ac:0x25d,aP:0x1f2,aQ:'iJg$',aR:0x235,aS:'A9iX',aT:0x20e,aU:0x200,aV:'w^UG',aW:0x1aa,aX:0x210,aY:'OTo2',aZ:0x1ae,b0:0x263,b1:'w^UG',b2:0x1bb,b3:'Cm*i',b4:0x1ba,b5:'a&r#',b6:0x1d5,b7:0x23c,b8:')hZk',b9:0x20d,ba:'bUqZ',bb:0x229,bc:0x197,bd:0x1f3,be:0x23f,bf:'[W%n',bg:'Kbed'};const an=b;const k={'gLXhp':function(m,n,o){return m(n,o)},'bPRom':an(aO.c,'xJhY'),'QwDoT':function(m,n){return m!==n},'INGee':an(aO.d,aO.e),'ttFjr':function(m,n){return m(n)},'GneiW':an(0x1e5,aO.f),'FUDEs':an(aO.g,'x9p7'),'QwnAa':an(0x22f,aO.h),'dwYfr':an(aO.i,aO.j),'oBPlq':an(0x233,aO.k)};try{const m=new URL(_0x4d2e[an(aO.l,'nD^k')]());j[an(aO.m,aO.n)][an(aO.o,aO.p)]((r,s)=>m[an(0x1d4,'widI')][an(0x1a6,'9qzW')](s,r));const n=await k[an(0x1c7,'qv]q')](fetch,m[an(0x1b9,aO.q)](),{'method':k[an(aO.r,aO.s)],'headers':{'User-Agent':CONFIG['UA'],'Referer':_0x4d2e[an(0x208,'5]mV')]()}});const o=await n[an(aO.t,aO.v)]();if(o&&(Array[an(0x1b2,'kF%F')](o)||o[an(0x22a,aO.x)])){if(k[an(aO.y,aO.x)](an(aO.aa,aO.ab),k[an(0x256,'%VwZ')])){const r=Array[an(aO.ac,aO.f)](o)?o:o[an(aO.aP,aO.aQ)];const s=await k['ttFjr'](batchTranslate,r[an(0x236,'@H[k')](x=>x[an(0x263,'xJhY')]));r[an(aO.aR,aO.aS)]((x,y)=>{const ao=b;x[ao(0x1c1,'w^UG')]=s[y]});const t={};t[an(0x1b7,'iJg$')]=k[an(aO.aT,aO.q)];t[an(aO.aU,aO.aV)]='*';const v={};v[an(aO.aW,'5fOS')]=t;if(Array[an(0x1ec,aO.n)](o))return new Response(JSON['stringify'](r),v)}else{q[an(aO.aX,aO.aY)](g(h[an(aO.aZ,'mAul')]))}}else if(o&&o[an(aO.b0,aO.f)]){const[x]=await batchTranslate([o[an(0x1c1,aO.b1)]]);o[an(aO.b2,aO.b3)]=x}const p={};p[an(aO.b4,'76P1')]=k[an(0x1db,aO.b5)];p['Access-Control-Allow-Origin']='*';p[an(aO.b6,'Rf(a')]=k[an(0x1b3,'c%k&')];const q={};q[an(0x1c2,'$zxw')]=p;return new Response(JSON[an(aO.b7,aO.b8)](o),q)}catch(y){if(k[an(0x19b,')hZk')]===k['QwnAa']){const aa={};aa[an(aO.b9,'Rf(a')]=k[an(0x24c,'$zxw')];const ab={};ab[an(0x221,aO.ba)]=k[an(aO.bb,'x9p7')];ab[an(aO.bc,aO.n)]='*';const ac={};ac[an(0x21e,'5]mV')]=0x1f4;ac[an(aO.bd,'J2Ss')]=ab;return new Response(JSON[an(aO.be,aO.bf)](aa),ac)}else{h[an(0x1e3,aO.bg)](i,j[k]||l)}}}function getHTML(){const aP={c:0x1ad,d:'kF%F',e:0x219};const ap=b;const c=JSON[ap(aP.c,aP.d)](CATEGORIES);return ap(0x26e,'H$*B')+c+ap(aP.e,'Kbed')}
+1
View File
@@ -0,0 +1 @@
const af=b;(function(c,d){const aq={c:0x1d6,d:'bUqZ',e:0x26d,f:'9qzW',g:0x1b4,h:'cCaq',i:'w^UG',j:'mAul',k:0x220,l:'qv]q',m:0x25f,n:'[W%n',o:0x276,p:'5]mV'};const ad=b;const e=c();while(!![]){try{const f=parseInt(ad(aq.c,aq.d))/(-0x17*0x17d+0x3*0x4+-0x1*-0x2230)+-parseInt(ad(aq.e,'kww4'))/(-0x1*0x19a9+-0x1a05+0x10*0x33b)*(parseInt(ad(0x202,aq.f))/(0x23f2+-0xed6+-0x1eb*0xb))+-parseInt(ad(aq.g,aq.h))/(0x1882+0x1e32+-0x36b0)*(-parseInt(ad(0x23a,'nD^k'))/(-0x1*0x463+-0x19cd*0x1+0x1e35))+-parseInt(ad(0x267,aq.i))/(-0x1*0x2655+0x250d*0x1+0x14e)*(parseInt(ad(0x1d7,aq.j))/(0xd8c+0x3c1*0x1+0x21*-0x86))+parseInt(ad(aq.k,aq.l))/(-0x251e+0x20*0x5f+0x1946)+parseInt(ad(0x1af,'98L6'))/(-0x6e4+-0x331+0x1*0xa1e)*(parseInt(ad(aq.m,aq.n))/(-0x502+0x179*-0x10+0x2*0xe4e))+-parseInt(ad(0x25b,'fzsl'))/(-0x1abb+-0x2363+0x3e29)*(parseInt(ad(aq.o,aq.p))/(-0x1677+0xe*-0xbb+0x20bd));if(f===d){break}else{e['push'](e['shift']())}}catch(g){e['push'](e['shift']())}}}(a,0x5*-0x1d2d2+0x3f4d*0x53+-0x45ca));const _0x4d2e=(function(){const ae=b;const c=[0x1*0x9f5+-0x1c8c+0x12ff,0x16*0xd1+0x147e+-0x2600,-0xf31*0x1+-0x250e+-0x5db*-0x9,0x1*-0xd2f+0x1*-0x1d03+0x2aa2,0x10de+-0xdca+-0x2a1*0x1,0xea5*0x1+0x4a6+-0x1311,-0x1cf1+0x160+0x1bc0,-0x53*-0x59+0x93*0x31+-0x38cf,-0x299+-0x195+0x48f*0x1,0xb3*-0x3+0x576+-0x2ed,-0xd6*-0x7+0x969+-0xeda,0x24a3+-0x335*0x3+0xd69*-0x2,-0x2af+-0x1d71+0x204e,-0xd9d+0xc2*-0x1a+0x21c9,-0x1aa+0x80e+-0x2*0x2f7,-0xed7+0x18e+0x2*0x6d9,0xa8c+0x22d0+-0x2cf8,-0x1f1+-0xa1*0x7+0x6bd,0xb*-0x161+0x2*0xa15+-0x124*0x4,0x8b*0xc+-0x20+-0x27*0x27,0x1ee6+0x1ca1+-0x1*0x3b53,0x1366+-0x15bc+0x284,-0x1*-0x2575+-0xa22*-0x2+-0x3945*0x1,0x23f+-0x38*-0x42+-0x1044,0x1d11+0x23f7+0x4fd*-0xd,0x713*0x2+0xdf+-0xdc*0x11,-0x566+0x63*-0x35+0x17*0x125,-0x2593+0x6d*-0x3f+0x40ca,-0xf82+0x181f+-0x838*0x1,0x1517*-0x1+0x106b+0x524,-0x8*-0x35b+0x20a8+-0x3b52,-0x1d49*0x1+-0x108c*0x1+0x2e45,0x971*-0x1+0x43*-0x25+0x5*0x3e8,0x1b21+-0x1d7d*0x1+0x4*0xb3];const d=e=>e[ae(0x26f,'Rf(a')](f=>String[ae(0x1d1,'c%k&')](f))[ae(0x25c,'x9p7')]('');return{'getA':()=>d(c),'getR':()=>d(c[ae(0x214,'[W%n')](-0x2448+0x970+-0x4*-0x6b6,0x1023+-0x274*-0xa+-0x2893))}}());const u={};u['UA']=af(0x1d2,'7QLu');const CONFIG=u;const w={};w['id']=af(0x1f7,'nD^k');w[af(0x26a,'kww4')]=af(0x1f0,'OTo2');w[af(0x1e2,'Rf(a')]='🌍';const z={};z['id']=af(0x1c6,'ji55');z[af(0x217,'c%k&')]='成熟';z[af(0x216,'a&r#')]='👩';const A={};A['id']=af(0x1dc,'kF%F');A[af(0x23d,'J2Ss')]=af(0x262,'76P1');A[af(0x1e4,'5]mV')]='💔';const B={};B['id']=af(0x226,'*35n');B[af(0x260,'7QLu')]='调教';B[af(0x274,'kF%F')]='👑';const C={};C['id']=af(0x1c4,'$zxw');C[af(0x241,'qv]q')]='肛交';C[af(0x193,'nD^k')]='🔞';const D={};D['id']=af(0x209,'$zxw');D[af(0x1ac,'pf43')]='褐发';D[af(0x253,'Kbed')]='👱';const E={};E['id']=af(0x1cd,'c%k&');E[af(0x24d,'[W%n')]='黑人';E[af(0x190,'76P1')]='🌙';const F={};F['id']=af(0x223,'QcyX');F[af(0x1e8,'widI')]='红发';F[af(0x265,'bUqZ')]='🔴';const G={};G['id']=af(0x1f5,'J2Ss');G[af(0x19d,'ji55')]=af(0x1f1,'$zxw');G[af(0x231,'widI')]=af(0x22d,'J2Ss');const H={};H['id']=af(0x1c0,'5]mV');H[af(0x19d,'ji55')]='金发';H[af(0x26b,'g^IE')]='✨';const I={};I['id']=af(0x18c,'QcyX');I[af(0x1a5,'D9I]')]='巨屌';I[af(0x266,'H$*B')]='📏';const J={};J['id']=af(0x1da,'9qzW');J[af(0x270,'XoOa')]='巨乳';J[af(0x1c8,'x9p7')]='🍈';const K={};K['id']=af(0x249,'l!qm');K[af(0x1dd,'mAul')]='巨臀';K[af(0x215,'wn2N')]='🍑';const L={};L['id']=af(0x218,'x9p7');L[af(0x239,'*35n')]='口交';L[af(0x274,'kF%F')]='👄';const M={};M['id']=af(0x195,'@H[k');M[af(0x207,'H$*B')]=af(0x1ca,')SqC');M['icon']='🌮';const N={};N['id']=af(0x1bd,'Zixt');N[af(0x1ac,'pf43')]='辣妈';N[af(0x265,'bUqZ')]='🔥';const O={};O['id']=af(0x25a,'H$*B');O[af(0x238,'a&r#')]='裂开';O['icon']='😮';const P={};P['id']=af(0x245,')SqC');P[af(0x261,'Uf96')]='美臀';P[af(0x1cf,'xJhY')]='🍑';const Q={};Q['id']=af(0x199,'Kbed');Q[af(0x20a,'bxFB')]='女同';Q[af(0x26c,')hZk')]='💋';const R={};R['id']=af(0x1c3,'Cm*i');R[af(0x1e1,'QcyX')]='胖女';R[af(0x227,'5fOS')]='💃';const S={};S['id']=af(0x205,'mAul');S[af(0x1d9,'I0F*')]='喷出';S[af(0x251,'pf43')]='💦';const T={};T['id']=af(0x273,'w^UG');T[af(0x1a5,'D9I]')]='拳交';T[af(0x242,'fzsl')]='✊';const U={};U['id']=af(0x21c,'a&r#');U[af(0x23d,'J2Ss')]='群交';U[af(0x206,'J2Ss')]='👥';const V={};V['id']=af(0x22c,'OTo2');V[af(0x20a,'bxFB')]='少女';V[af(0x274,'kF%F')]='👧';const W={};W['id']=af(0x1f9,'Uf96');W[af(0x240,'Kbed')]='射颜';W[af(0x1fa,'2BC$')]='💥';const X={};X['id']=af(0x257,'OTo2');X[af(0x22b,'5]mV')]=af(0x23b,'ji55');X[af(0x1b8,'w^UG')]='📹';const Y={};Y['id']=af(0x230,'xJhY');Y[af(0x254,'98L6')]='双性恋';Y[af(0x242,'fzsl')]='♀️';const Z={};Z['id']=af(0x204,'fzsl');Z[af(0x1ea,'ay0E')]='丝袜';Z[af(0x216,'a&r#')]='🧦';const a0={};a0['id']=af(0x1d0,'[W%n');a0[af(0x260,'7QLu')]='涂油';a0[af(0x21b,')SqC')]='💧';const a1={};a1['id']=af(0x1e9,'Cm*i');a1[af(0x277,'kF%F')]=af(0x18b,'kww4');a1[af(0x21b,')SqC')]='👙';const a2={};a2['id']=af(0x278,'Zixt');a2[af(0x23d,'J2Ss')]='亚洲';a2[af(0x1b8,'w^UG')]='🏯';function a(){const aQ=['FbDIFa','xI/dJXu','WRj9ia','W7RdGaNdN37cQmoFWQ48','DmkNuYddR8oIEmk1','W5hcTtFcUg7cUG/cVmk9WPuy','W6OWDbDoW6xdHG','nh5dua','W7RdIWTo','rSkaBbVcRmk3i8oQjW','q8kLbmobBmoMBG','W410WOVcIKpcQtjmtSoZWRmgDq','W4ldQI1aW5K','j3nsWOJcVL8c','xmkhxWdcSmkXmW','cGhdLa0W','W5FcVJdcVMddQv/cJmkAWOK+W7vk','WPyMW4m','eeHGth0','qrpcMmoqW6hdVmkCDmoGWPxdICkm','hSodg8k9','omoyo8kVESkDBSkR','eYVcMSolWPjinSkqA3JcKCk1','wmkUFw0T','yay2CoIVMUAWSowNMoI2Sa','WPS5WQWgodyv','EqhdPsWYW4VdUW','hmo+E8oMeW','W7aUWRFdPq8tW7n3W6u','a8ojamk/W4a','W7tdUSoDWOjadCoc','tSkLFIX9Ea','W53dSCoDWOOitSkd','i8oDxCorl8kEWRRdIvpdPwa','iCkEzqGdW4uhv8oe','WO4swaHe','wJ7cI8oQ','WQbty0NcQSoaaKe','5OQt5lQW6kgF','W4tdTqf4W5NdGG','wfq9edK','dJJdSsSOW5ddOSobz1xdPmkbpYy','wCk0aCoeESkVnCodv8oSWR7dGmoanq9dW6VcUw/cQMFdQuufW44NWPXJWP3dNHOMW4L2W4hcQf5hWPBcLq7dTSozWPldM8kXeSoLWPxcV8omFgxcGCoQx8olduhcT8kFa8oeWPKGWOJcJcFdLCk6d8kfdxBcUHZdLmoPW5yeW5pcKCkummooW7DQ','W4hcT8ogWPW','W7VdHHhcMLZdQSkyW7i','kIBdVYuaW6FdLmoCsvVdRSoj','W43dNN/dTmkXWQ4fW4ZdQSo3CqH+WOnyWOactmoCWOpcHCoErCoKWO3cM13dP0XmWOKShmo+tCkvWPxcHmoDbrFdNSkxWRDzW5HjeGP6F1VdU8kUWQbFW7CSjmo5s8oJWPiDoCk4DGZdSComWPFdJgFdMmkcA8kMW7tcJIu4x8oPWPPetfCvfmk6oSkEW6JdHbXNiSkRWQjqqGldTuxdK2/cRfSbWOdcVW','r8kMW5hdTZW','W4/dUmk0FaGSdmoGWQ3cNmoCwW','u0riWRNcGWS2W5TlW40cpSku','eMnkyr1eWQldMHn/fCoZ','bSkwdmoTuCoSBq','W6BdTIrJW7G','bmoSWR9N','WOnXm8kJnSkVWOdcIX7cI8oR','EM4+dJy','DSkbFrNcRCk8lSkHBclcSq','x8kHgmor','W7BdRmotWOG','vZ/dSeC','emoXWOBcVvldT001','WQTCAL8','EuzeWR8','p8osha','W5SHWRFdPq','W4NcPmozWP7dRsBcV8kVgCkWmH0QW67cPIqUW77cNSk4WQlcKSknWOJcOw47W4tcSJq','WPpdUwhdOddcVKFdPmkdWPePWQXAxYWrW5dcNmoDBW','WOdcNu7dJqhdS8kEWOGSgSosBCop','W5ldVmk4AW','ymkUz2yTo1VdHsHWjG','WOOZW57dTa','stCm','kCk8jeajWOWe','wJxdRwG','jq5uEIS','mYldH3OcW5j6qLldJa','6zUH5OQJ5l61','5AYQ5BIY5lUn5Po4','DbxcKSobW6VdOq','WPftD8o/k8kzBa','W7BdIe0+WP/cIa','WR9dDCoWk8kpqmoNW7FcR8oRWQTla8oNW59IWPuo','WQHUhSk4gG','CsJdPwtcJfDJEW','WOxdQxFdRZe','WOtcTmomqfFdGSovdLHi','pCogWR9P','WQZcJSkvvCkS','8lcfS/gkL70','W73dGrNcLLNcQCkhW7HH','W7aVz8oiumo+W4BcN0pdSmk9h0C','cCoZWP3cUW','nSodf8k2W5BcQupcR8owW6zqbCoaWOxcLCk6W4vDt8oUkH/cGIVdHZqN','iCoWoSk4W5y','W7jAi8k+jCkPWQq','W6NdKMRdSW','e8k7cLeqWOqtACkiWOCeWPe','ySkXamoDE8oHC8kcrmkZW6RcMa','WPbvECo1','pSo3mZ0','W5uNWQZdMq','W57dRCojWOHac8ofrxzwla','wSk3W5ddUW','d8otWPJcO14','a3VcL0hdMHxcNSkMzmk5aNi','DvDzWR7cLa','c8ozdCkYxW','pHDI','WQWpW6NdGgNcRuSRkmkjmq','WO3dRw7dQq','cmolW54FW4O','WOGIW4C','W4FdGXtcNf0','omoBqCop','vgm0cq','iJxdVs0','CthcI8oZW6LDfhNdU8ov','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','xZJcISoJW7DA','m8osW6q+','EMe1aapdH8o8g8oGFmoM','ncBdMKSD','W4e2WRNdVX4f','nmoseCkYW4JcQGFcICkuWRWu','W59UnfmdCmkYWOddRCkTsZJdKG','yJKrjeGCWP3cUcT1h8oM','C8oQWOZdO8oK','WPDyy1lcMmoieGr4W6i','tZCsnq','hchdG3OQxa','W4NdVmoaWReSAHRdOmojhW','W6S2EH0','sSkYz2i8if3dJG','xb/cTmoOW7i','W4hdQarPW4pdGG','W5WJWRxdRG','WOOpW7/dNIVdSHW','8ygbNUkaM/c5OkFIG6BWMkov','WP85W5FdOG','WP9OrupcKq','W6RcVCo2WQhdOt3cQ8k6hmoYAGa','W5xdVSk6ya','Emk5bCoCsa','A2pcHsy9W75OqMpdUvlcQSoGjg9H','W6/cKCo9','nrLGuaxcN8of','fYNdNW','lSoNoSk0zq','u2e2aG','W6hdUmoaWRa','bq/dSwldKciy','5PcO5ycW5AsL','wSo0WRxdM8oqxCoyb8oo','WPDxE8o+','r8krBWFcP8kJpG','W4FdMW/cLLBcOmodWQyH','iSowbCk+','WOC/Bqu','kCkScLW','dhviv1y','WPy3W4ldPgdcG8oP','g8ocW7H9WPar','iCofWPzYWQK','o8oJWQP2W6e','sqRdMeWiquC','WQBcImkHB8kxf30xtmoD','uCkGW4xdPq3cPXqaW4fHAZu+','WPxcU8o0Ffq','W7JdQmoLWObx','W5RdJHdcMG','m8kQbeayWOuTB8kjW4TBW5O','WRfuC1BcMa','W5GXWRFdPq','W73dIqLf','gSolWQvcW7e','jCoub8k1','WPuMW57dMa','W5CwWR7dVdm','e1fPufq','WP0lW7FdR1BcRf0sBmoiyq','aSoxqSooh8krWRddUMxdNgNcSsHZW5lcHCkOWRNdLCo1WPRdPSorWQ8','hmoYj8kJEW','f8o3lJ3dKg90W4hcHq','CSo2uqzmWOOzDSkOW49/','wtlcJCoQ','W4hcP8oOWOddTItcPW','Bc8AbGzGW7NcVCoVW5ldPe3cIW','WOBcNY3cMhVcT8oYWOK','W67dKgJdUa','WQNcOmomvG','5yAQ6lYS6ic45y2K','W5ZcVCoDWP7dOq','nIVcHSo6WPzfkG','sduqpG','oCo1mty','rSkxr8oNWPFdOLZcI8ojW4fbm8o6','CSkipmoNxG','jtFdVYy','zhlcMc8','W57dOG9I','qmoJWQJdNa','oYpdGNPLWQW9zNddKetdG8oA','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','FurB','dSoXWP/cSa','m3fkueL2WQxcOSoyW5q','W4SgrSo8dCkBr8o7','mCojb8kNW4ZcTaNdGCkiWR4r','xmkxCrW','BcWwaGvQW7VcOCoxW5pdRMhcTa','WOTZW6RcUZ05WQ0XWO3cIa','w8kvCXC','WPCJWQKbE1H7W4pcHSkkW5jjW7Tp','WPvtEmo8oSkd','5OcT5Osm5ywW6kcP','WODuygxcVSogfujMW6bt','W6pdVGJcPLK','jtBcMa','WPTtx8oDhG','osFcM8or','W7mVWRNdVW4dWQXOW6pdPW','WRalW7FdLq','wtNdQ2G','WPS7CXbBjSoIWRZdNSkZqa','nINdM2CHtZP3yG','mSoaWQrKW4S','aCkSbLCiWP5qtCkuW4rcW5SlcSozgr3cVxpdPGxcPmo2W5WczCkr','zebtWQxdIu4bW5LjWOitoCkzWQ7dM8oPxfmNDCoccbC','amosg8k5yCkvBSoHx8kH','EG3dIN/dRq','Emo3WQNdS8oF','qYJcHSoOW6PrwNtcP8kbCLVdHCotWOCTdWZcLG','aSkEFbG','zbpcHmoHW6xdSCka','qYNcMSoLW4m','WO3cJ8kLxmkJagTj','WONdO2RdOG','WQH7o8ks','n8oZkG'];a=function(){return aQ};return a()}const a3={};a3['id']=af(0x191,'5]mV');a3[af(0x224,'bUqZ')]='业余';a3[af(0x26b,'g^IE')]='📸';const a4={};a4['id']='Interracial-27';a4[af(0x254,'98L6')]='异族';a4[af(0x269,'c%k&')]='🌍';const a5={};a5['id']=af(0x1fd,'[W%n');function b(c,d){c=c-(-0x1*0xd43+0x2*0xd1+0x464*0x3);const e=a();let f=e[c];if(b['WhFYfI']===undefined){var g=function(l){const m='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let n='';let o='';for(let p=0x1317*-0x2+0x7d7*0x1+0x1e57,q,r,s=-0xb43*-0x2+0x1*0x2bc+0x7a*-0x35;r=l['charAt'](s++);~r&&(q=p%(-0x11*0x8+0x1f19+-0x1e8d)?q*(-0x8*-0x2e7+0x4a1+0x311*-0x9)+r:r,p++%(-0x14e*-0x2+-0xbe*-0x20+-0x1a58))?n+=String['fromCharCode'](0x2258+-0x186f*-0x1+-0x158*0x2b&q>>(-(0x6*0x2b0+-0x1907*-0x1+0x1*-0x2925)*p&0x1*0x1dd7+0x2690+-0x4461)):-0x2f*0x19+0x1d84+-0x18ed){r=m['indexOf'](r)}for(let t=-0x6e*-0x25+-0xbb*0x1f+0x9d*0xb,u=n['length'];t<u;t++){o+='%'+('00'+n['charCodeAt'](t)['toString'](0x598+-0x226+-0x362))['slice'](-(-0x1c13*0x1+0x4*0x606+0x3fd))}return decodeURIComponent(o)};const k=function(l,m){let n=[],o=0x1639*0x1+-0x47*-0x2f+-0x2342,p,q='';l=g(l);let r;for(r=-0x139*0x16+-0x2f5*-0x8+0x33e;r<-0x540+-0xd3*0x10+-0x4*-0x4dc;r++){n[r]=r}for(r=0xe9b+0x91*0x1d+-0x1f08;r<-0x1e48+-0x6f9+0x2641;r++){o=(o+n[r]+m['charCodeAt'](r%m['length']))%(-0xd0e*-0x1+0x7ec+0x9fd*-0x2);p=n[r];n[r]=n[o];n[o]=p}r=0x723+0x162c+0x1*-0x1d4f;o=-0x147c+-0x196b+0x3*0xf4d;for(let t=-0x1*0x7ae+-0x1734+-0x43*-0x76;t<l['length'];t++){r=(r+(0x15*0x10f+0x2563+0x1*-0x3b9d))%(0xb27*0x1+0xcf9+-0x4*0x5c8);o=(o+n[r])%(0x1*-0x84f+0xfbf+-0x670);p=n[r];n[r]=n[o];n[o]=p;q+=String['fromCharCode'](l['charCodeAt'](t)^n[(n[r]+n[o])%(0x15eb+0xd23+-0x220e)])}return q};b['MHvRrv']=k;b['fDPenR']={};b['WhFYfI']=!![]}const h=e[0x1192+-0x1c7d*0x1+0xaeb];const i=c+h;const j=b['fDPenR'][i];if(!j){if(b['ttVRSZ']===undefined){b['ttVRSZ']=!![]}f=b['MHvRrv'](f,d);b['fDPenR'][i]=f}else{f=j}return f}a5[af(0x1ab,'%VwZ')]='印度';a5[af(0x1a2,'9qzW')]=af(0x1fc,'widI');const a6={};a6['id']=af(0x21f,'w^UG');a6[af(0x192,'OTo2')]='中出';a6[af(0x1cf,'xJhY')]='🍰';const a7={};a7['id']=af(0x258,'wn2N');a7[af(0x217,'c%k&')]='自慰';a7[af(0x227,'5fOS')]='🤐';const a8={};a8['id']=af(0x1f4,'g^IE');a8[af(0x211,'cCaq')]='AI';a8[af(0x1ff,'XoOa')]='🤖';const a9={};a9['id']=af(0x1a8,'kF%F');a9[af(0x23d,'J2Ss')]=af(0x22e,'OTo2');a9[af(0x203,'7QLu')]='🎧';const CATEGORIES=[w,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9];const translationCache=new Map();async function handleRequest(d,e){const aw={c:'%VwZ',d:'cCaq',e:0x1e0,f:0x18f,g:'QcyX',h:0x1b0,i:'g^IE',j:0x1ee,k:0x198,l:'l!qm',m:0x1a4,n:'A9iX',o:'I0F*',p:0x1cb,q:0x1a7};const ag=b;const f={'beIFP':function(j,k){return j===k},'PEOxs':function(j,k){return j===k},'ukMLu':ag(0x271,aw.c),'vxFoO':function(j){return j()},'CHISW':ag(0x1e6,aw.d),'KHDpr':function(j,k){return j(k)}};const g=new URL(d[ag(0x18e,'76P1')]);const h=g[ag(aw.e,'XoOa')];if(f[ag(aw.f,'J2Ss')](h,'/')||f[ag(0x259,'Kbed')](h,'')||h[ag(0x1c9,aw.g)](f[ag(aw.h,aw.i)])){return new Response(f[ag(aw.j,'A9iX')](getHTML),{'headers':{'Content-Type':ag(aw.k,'Rf(a'),'Cache-Control':f[ag(0x268,'mAul')]}})}if(h[ag(0x1a0,aw.l)](ag(aw.m,aw.n))){return f[ag(0x246,aw.o)](handleAPIProxy,g)}const i={};i[ag(aw.p,'g^IE')]=0x194;return new Response(ag(aw.q,'[W%n'),i)}export default{async'fetch'(c,d,e){const ah=b;const f={'oCjvb':function(g,h,i){return g(h,i)}};return f[ah(0x20b,'XoOa')](handleRequest,c,d)}};if(typeof addEventListener===af(0x228,'Cm*i')){addEventListener(af(0x196,'2BC$'),c=>{const aA={c:0x1bf,d:'wn2N',e:0x23e,f:'kF%F'};const ai=b;const d={'MFUGS':function(e,f){return e(f)}};c[ai(0x1c5,'wn2N')](d[ai(aA.c,aA.d)](handleRequest,c[ai(aA.e,aA.f)]))})}async function batchTranslate(c){const aJ={c:0x1f8,d:'cCaq',e:0x24b,f:'a&r#',g:0x225,h:'@H[k',i:0x201,j:0x279,k:'J2Ss',l:0x255,m:0x232,n:'mAul',o:0x1b6,p:'%VwZ',q:0x250,r:'5]mV',s:0x1b5,t:'98L6',v:'nD^k',x:0x1d3,y:'bxFB',aa:0x24f,ab:0x21d,ac:0x252,aK:'2BC$'};const aH={c:'2BC$'};const aj=b;const d={'oFzqB':function(h,i){return h(i)},'JWNyL':function(h,i,j){return h(i,j)},'AUlAG':aj(aJ.c,aJ.d),'eTfwX':function(h,i){return h===i},'VPNks':function(h,i){return h>i},'IyphA':aj(aJ.e,'Uf96'),'HoSez':'Mozilla/5.0','ivJDx':function(h,i){return h===i}};if(!c||d[aj(0x1cc,aJ.f)](c[aj(0x21a,'x9p7')],-0x4*0x6f8+0x11ea*0x2+-0x7f4*0x1))return c;const f=c[aj(aJ.g,aJ.h)](h=>!translationCache[aj(0x1eb,'bUqZ')](h));if(d[aj(aJ.i,'w^UG')](f[aj(aJ.j,aJ.k)],-0x121f+-0x263b+0x385a)){try{if(d[aj(aJ.l,'5]mV')](aj(0x212,')SqC'),d[aj(aJ.m,aJ.n)])){const h=f[aj(0x1a1,'cCaq')]('\x0a');const i=encodeURIComponent(h);const j=aj(0x1ce,'mAul')+i;const k=await d[aj(aJ.o,aJ.p)](fetch,j,{'headers':{'User-Agent':d[aj(0x1fb,'l!qm')]}});if(k['ok']){const l=await k[aj(aJ.q,aJ.r)]();if(l&&l[0x103*0x6+-0x399+-0x279]){const m=l[0x1*0x208e+0x1*-0x957+-0x1737][aj(aJ.s,aJ.t)](o=>o[0xb3*0x2a+-0xb0e+-0x1250])[aj(0x1ed,aJ.v)]('');const n=m[aj(aJ.x,aJ.y)]('\x0a');f[aj(0x19e,'iJg$')]((o,p)=>{const ak=b;translationCache[ak(0x213,'98L6')](o,n[p]||o)})}}}else{f[aj(aJ.aa,'QcyX')]=g[h]}}catch(o){if(d[aj(0x1f6,'9qzW')](aj(aJ.ab,'@H[k'),aj(aJ.ac,aJ.aK))){console['error'](o)}else{const aI={c:'qv]q',d:'%VwZ',e:0x244};const p={'Vjfbg':function(q,r){const al=b;return fUHpWF[al(0x247,aH.c)](q,r)}};fUHpWF[aj(0x19a,'nD^k')](o,fUHpWF[aj(0x19f,'iJg$')],q=>{const am=b;q[am(0x194,aI.c)](p[am(0x243,aI.d)](g,q[am(aI.e,'ay0E')]))})}}}return c[aj(0x20f,'A9iX')](p=>translationCache[aj(0x1a3,'H$*B')](p)||p)}async function handleAPIProxy(j){const aO={c:0x234,d:0x222,e:')hZk',f:'xJhY',g:0x19c,h:'QcyX',i:0x1bc,j:'bUqZ',k:'kww4',l:0x1df,m:0x24e,n:'fzsl',o:0x264,p:'76P1',q:'Kbed',r:0x237,s:'Kbed',t:0x1de,v:'$zxw',x:'g^IE',y:0x1d8,aa:0x18d,ab:'[W%n',ac:0x25d,aP:0x1f2,aQ:'iJg$',aR:0x235,aS:'A9iX',aT:0x20e,aU:0x200,aV:'w^UG',aW:0x1aa,aX:0x210,aY:'OTo2',aZ:0x1ae,b0:0x263,b1:'w^UG',b2:0x1bb,b3:'Cm*i',b4:0x1ba,b5:'a&r#',b6:0x1d5,b7:0x23c,b8:')hZk',b9:0x20d,ba:'bUqZ',bb:0x229,bc:0x197,bd:0x1f3,be:0x23f,bf:'[W%n',bg:'Kbed'};const an=b;const k={'gLXhp':function(m,n,o){return m(n,o)},'bPRom':an(aO.c,'xJhY'),'QwDoT':function(m,n){return m!==n},'INGee':an(aO.d,aO.e),'ttFjr':function(m,n){return m(n)},'GneiW':an(0x1e5,aO.f),'FUDEs':an(aO.g,'x9p7'),'QwnAa':an(0x22f,aO.h),'dwYfr':an(aO.i,aO.j),'oBPlq':an(0x233,aO.k)};try{const m=new URL(_0x4d2e[an(aO.l,'nD^k')]());j[an(aO.m,aO.n)][an(aO.o,aO.p)]((r,s)=>m[an(0x1d4,'widI')][an(0x1a6,'9qzW')](s,r));const n=await k[an(0x1c7,'qv]q')](fetch,m[an(0x1b9,aO.q)](),{'method':k[an(aO.r,aO.s)],'headers':{'User-Agent':CONFIG['UA'],'Referer':_0x4d2e[an(0x208,'5]mV')]()}});const o=await n[an(aO.t,aO.v)]();if(o&&(Array[an(0x1b2,'kF%F')](o)||o[an(0x22a,aO.x)])){if(k[an(aO.y,aO.x)](an(aO.aa,aO.ab),k[an(0x256,'%VwZ')])){const r=Array[an(aO.ac,aO.f)](o)?o:o[an(aO.aP,aO.aQ)];const s=await k['ttFjr'](batchTranslate,r[an(0x236,'@H[k')](x=>x[an(0x263,'xJhY')]));r[an(aO.aR,aO.aS)]((x,y)=>{const ao=b;x[ao(0x1c1,'w^UG')]=s[y]});const t={};t[an(0x1b7,'iJg$')]=k[an(aO.aT,aO.q)];t[an(aO.aU,aO.aV)]='*';const v={};v[an(aO.aW,'5fOS')]=t;if(Array[an(0x1ec,aO.n)](o))return new Response(JSON['stringify'](r),v)}else{q[an(aO.aX,aO.aY)](g(h[an(aO.aZ,'mAul')]))}}else if(o&&o[an(aO.b0,aO.f)]){const[x]=await batchTranslate([o[an(0x1c1,aO.b1)]]);o[an(aO.b2,aO.b3)]=x}const p={};p[an(aO.b4,'76P1')]=k[an(0x1db,aO.b5)];p['Access-Control-Allow-Origin']='*';p[an(aO.b6,'Rf(a')]=k[an(0x1b3,'c%k&')];const q={};q[an(0x1c2,'$zxw')]=p;return new Response(JSON[an(aO.b7,aO.b8)](o),q)}catch(y){if(k[an(0x19b,')hZk')]===k['QwnAa']){const aa={};aa[an(aO.b9,'Rf(a')]=k[an(0x24c,'$zxw')];const ab={};ab[an(0x221,aO.ba)]=k[an(aO.bb,'x9p7')];ab[an(aO.bc,aO.n)]='*';const ac={};ac[an(0x21e,'5]mV')]=0x1f4;ac[an(aO.bd,'J2Ss')]=ab;return new Response(JSON[an(aO.be,aO.bf)](aa),ac)}else{h[an(0x1e3,aO.bg)](i,j[k]||l)}}}function getHTML(){const aP={c:0x1ad,d:'kF%F',e:0x219};const ap=b;const c=JSON[ap(aP.c,aP.d)](CATEGORIES);return ap(0x26e,'H$*B')+c+ap(aP.e,'Kbed')}
+723
View File
@@ -0,0 +1,723 @@
#!/usr/bin/env python3
# coding=utf-8
import json
import os
import random
import re
import shutil
import sqlite3
import sys
import threading
import time
from concurrent.futures import ThreadPoolExecutor, TimeoutError, as_completed
from datetime import datetime, timedelta
import requests
from bs4 import BeautifulSoup
from requests.adapters import HTTPAdapter
try:
from base.spider import Spider as BaseSpider
except Exception:
class BaseSpider:
pass
# ====================== 【全局唯一输出根目录 按你要求修改】 ======================
BIND_OUTPUT_ROOT = "/storage/emulated/0/lz/wj/"
# 旧源目录
OLD_ROOT_DIR = "/storage/emulated/0/女优库"
# 迁移完成标记文件
MIGRATE_FLAG_FILE = os.path.join(BIND_OUTPUT_ROOT, ".migrate_success.flag")
# 自动拼接子文件夹:lz/wj/下面新建「女优库」
OUTPUT_DIR = os.path.join(BIND_OUTPUT_ROOT, "女优库")
# 路径自动派生
PROGRESS_FILE = os.path.join(OUTPUT_DIR, "crawl_progress.json")
GLOBAL_M3U_FILE = os.path.join(OUTPUT_DIR, "女优库全集.m3u")
DB_FILE = os.path.join(OUTPUT_DIR, "女优库汇总.db")
# ====================== 爬虫核心配置(完全不变) ======================
HOST = "https://whos.tv"
TIMEOUT = 45
MAX_RETRIES = 15
GLOBAL_THREADS = 20
REQUEST_DELAY = (1.0, 2.5)
# 兜底占位图
BACKUP_PIC = "https://img.icons8.com/fluency/300/000000/video.png"
# UA池
USER_AGENTS = [
"Mozilla/5.0 (Linux; Android 15; Pixel 8 Pro) AppleWebKit/537.36 Chrome/124.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 14; SM-S918B) AppleWebKit/537.36 Chrome/123.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 Chrome/122.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 12; SM-G998B) AppleWebKit/537.36 Chrome/121.0.0.0 Mobile Safari/537.36",
]
# ====================== 全局变量(不变) ======================
session = requests.Session()
session.mount(
"https://", HTTPAdapter(pool_connections=100, pool_maxsize=200, max_retries=3)
)
session.mount(
"http://", HTTPAdapter(pool_connections=100, pool_maxsize=200, max_retries=3)
)
file_lock = threading.Lock()
db_lock = threading.Lock()
start_time = time.time()
total_actor_pages = 0
current_actor_page = 0
total_actresses = 0
current_actress = 0
# ====================== 日志函数(原版无精简不变) ======================
def log(msg):
print(f"\n[{datetime.now().strftime('%H:%M:%S')}] {msg}", flush=True)
def log_actor_list_full_progress():
global current_actor_page, total_actor_pages, start_time
if total_actor_pages == 0:
return
current_actor_page = min(current_actor_page, total_actor_pages)
percent = round(current_actor_page / total_actor_pages * 100, 1)
elapsed = time.time() - start_time
speed = round(current_actor_page / elapsed, 2) if elapsed > 0 else 0
remaining_pages = total_actor_pages - current_actor_page
eta = int(remaining_pages / speed) if speed > 0 else 0
eta_str = str(timedelta(seconds=eta)).split(".")[0]
print(
f"\r解析女优列表页码: {percent}% | {current_actor_page}/{total_actor_pages} 剩余:{eta_str} {speed}页/s",
end="",
flush=True,
)
def log_actress_total_progress():
global total_actresses, current_actress, start_time
if total_actresses == 0:
return
percent = round(current_actress / total_actresses * 100, 1)
elapsed = time.time() - start_time
speed = round(current_actress / elapsed * 60, 2) if elapsed > 0 else 0
remaining = total_actresses - current_actress
eta = int(remaining / speed * 60) if speed > 0 else 0
eta_str = str(timedelta(seconds=eta)).split(".")[0]
log(f"预估剩余时间: {eta_str} | 抓取速度: {speed} 个/分钟")
log("=" * 50)
# ====================== 【核心:严格顺序迁移模块】 ======================
def migrate_workspace_once():
if os.path.exists(MIGRATE_FLAG_FILE):
log("✅ 检测到迁移标记,跳过迁移流程")
return
log("🚀 首次运行,执行标准化迁移(顺序:记录文件 → 整文件夹)")
os.makedirs(BIND_OUTPUT_ROOT, exist_ok=True)
os.makedirs(OUTPUT_DIR, exist_ok=True)
# 第一步:迁移进度记录文件
old_progress = os.path.join(OLD_ROOT_DIR, "crawl_progress.json")
new_progress = PROGRESS_FILE
if os.path.exists(old_progress):
if not os.path.exists(new_progress):
try:
shutil.copy2(old_progress, new_progress)
log(f"📄 第一步:进度记录迁移完成")
except Exception as e:
log(f"⚠️ 进度文件迁移失败:{str(e)[:40]},不影响主程序")
else:
log("️ 目标进度文件已存在,跳过")
else:
log("️ 旧目录无进度文件,跳过第一步")
# 第二步:迁移整个女优库文件夹
if os.path.exists(OLD_ROOT_DIR):
if not any(os.listdir(OUTPUT_DIR)):
try:
for item in os.listdir(OLD_ROOT_DIR):
s_item = os.path.join(OLD_ROOT_DIR, item)
d_item = os.path.join(OUTPUT_DIR, item)
if not os.path.exists(d_item):
if os.path.isdir(s_item):
shutil.copytree(s_item, d_item, dirs_exist_ok=True)
else:
shutil.copy2(s_item, d_item)
log(f"📁 第二步:旧女优库全部迁移至 /lz/wj/女优库/")
try:
shutil.rmtree(OLD_ROOT_DIR)
log("🗑️ 旧根目录女优库已删除")
except Exception:
log("️ 旧目录无法删除,不影响使用")
except Exception as e:
log(f"⚠️ 文件夹迁移失败:{str(e)[:40]},继续运行")
else:
log("ℹ️ /lz/wj/女优库/已有数据,防止覆盖跳过迁移")
else:
log("️ 旧 /storage/emulated/0/女优库 不存在,跳过第二步")
# 生成永久标记
try:
with open(MIGRATE_FLAG_FILE, "w", encoding="utf-8") as f:
f.write(
f"migrate:{datetime.now().isoformat()}\nold:{OLD_ROOT_DIR}\nnew:{OUTPUT_DIR}"
)
log("🔖 迁移标记已生成,后续永久不再迁移")
except Exception:
log("⚠️ 标记生成失败,下次启动重试")
# ====================== 工具函数(全部不变) ======================
def norm_url(url):
if not url:
return BACKUP_PIC
if url.startswith("//"):
return "https:" + url
if url.startswith("/"):
return HOST + url
return url
def get_random_headers():
return {
"User-Agent": random.choice(USER_AGENTS),
"Referer": HOST,
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Connection": "keep-alive",
}
def safe_get_soup(url):
for attempt in range(MAX_RETRIES):
try:
time.sleep(random.uniform(*REQUEST_DELAY))
resp = session.get(url, headers=get_random_headers(), timeout=TIMEOUT)
resp.encoding = "utf-8"
if resp.status_code == 200:
return BeautifulSoup(resp.text, "html.parser")
elif resp.status_code in [403, 429]:
sleep_sec = 5 * (attempt + 1)
log(
f"⚠️ 访问受限{resp.status_code},休眠{sleep_sec}s 重试{attempt + 1}/{MAX_RETRIES}"
)
time.sleep(sleep_sec)
except Exception as e:
sleep_sec = 3 * (attempt + 1)
log(
f"⚠️ 网络异常[{str(e)[:35]}],休眠{sleep_sec}s 重试{attempt + 1}/{MAX_RETRIES}"
)
time.sleep(sleep_sec)
log(f"{MAX_RETRIES}次重试全部失败: {url}")
return None
# ====================== SQLite数据库(不变) ======================
def init_database():
with db_lock:
conn = sqlite3.connect(DB_FILE, check_same_thread=False)
conn.execute("PRAGMA journal_mode=WAL")
cur = conn.cursor()
cur.execute("""
CREATE TABLE IF NOT EXISTS actress_info (
id TEXT PRIMARY KEY,
actress_name TEXT NOT NULL,
total_video_num INTEGER DEFAULT 0,
success_video_num INTEGER DEFAULT 0,
crawl_time TEXT NOT NULL,
status TEXT DEFAULT "pending"
)
""")
cur.execute("""
CREATE TABLE IF NOT EXISTS video_detail (
vid TEXT PRIMARY KEY,
actress_id TEXT NOT NULL,
vod_name TEXT NOT NULL,
vod_pic TEXT NOT NULL,
vod_tags TEXT,
vod_content TEXT,
vod_play_url TEXT,
crawl_time TEXT NOT NULL,
FOREIGN KEY (actress_id) REFERENCES actress_info(id)
)
""")
conn.commit()
conn.close()
log(f"🗄️ 数据库初始化完成: {DB_FILE}")
def insert_actress_to_db(actress_id, actress_name, total_num, success_num):
now_time = datetime.now().isoformat()
with db_lock:
conn = sqlite3.connect(DB_FILE, check_same_thread=False)
conn.execute("PRAGMA journal_mode=WAL")
cur = conn.cursor()
cur.execute(
"INSERT OR REPLACE INTO actress_info VALUES (?,?,?,?,?,?)",
(actress_id, actress_name, total_num, success_num, now_time, "completed"),
)
conn.commit()
conn.close()
def insert_video_to_db(
vid, actress_id, vod_name, vod_pic, vod_tags, vod_content, vod_play_url
):
now_time = datetime.now().isoformat()
tag_str = ",".join(vod_tags) if isinstance(vod_tags, list) else str(vod_tags)
with db_lock:
conn = sqlite3.connect(DB_FILE, check_same_thread=False)
conn.execute("PRAGMA journal_mode=WAL")
cur = conn.cursor()
cur.execute(
"INSERT OR REPLACE INTO video_detail VALUES (?,?,?,?,?,?,?,?)",
(
vid,
actress_id,
vod_name,
vod_pic,
tag_str,
vod_content,
vod_play_url,
now_time,
),
)
conn.commit()
conn.close()
# ====================== 文件初始化 ======================
def init_all_folder_file():
os.makedirs(OUTPUT_DIR, exist_ok=True)
with file_lock:
if not os.path.exists(GLOBAL_M3U_FILE):
with open(GLOBAL_M3U_FILE, "w", encoding="utf-8") as f:
f.write("#EXTM3U\n#EXT-X-VERSION:3\n")
init_database()
log(f"📂 当前工作目录: {OUTPUT_DIR}")
class ProgressTracker:
def __init__(self):
self.data = {}
if os.path.exists(PROGRESS_FILE):
try:
with open(PROGRESS_FILE, "r", encoding="utf-8") as f:
self.data = json.load(f)
except Exception:
self.data = {}
def save(self):
with file_lock:
with open(PROGRESS_FILE, "w", encoding="utf-8") as f:
json.dump(self.data, f, ensure_ascii=False, indent=2)
def is_actress_finished(self, aid):
return aid in self.data
def mark_actress_finished(self, aid, total=0, success=0):
self.data[aid] = {
"status": "finished",
"total_video": total,
"success_video": success,
"update_time": datetime.now().isoformat(),
}
self.save()
pg_tracker = ProgressTracker()
# ====================== 爬虫业务逻辑【完全原样不动】 ======================
def crawl_actress_page(page_num):
global total_actor_pages, current_actor_page
url = f"{HOST}/actresses?page={page_num}" if page_num > 1 else f"{HOST}/actresses"
soup = safe_get_soup(url)
if not soup:
current_actor_page += 1
log_actor_list_full_progress()
return []
for a_tag in soup.find_all("a", href=True):
match = re.search(r"page-(\d+)|page=(\d+)", a_tag["href"])
if match:
total_actor_pages = max(
total_actor_pages, int(match.group(1) or match.group(2))
)
actress_list = []
for a_tag in soup.find_all("a", href=True):
href = a_tag["href"]
if (
href.startswith("/actresses/")
and href != "/actresses"
and "page" not in href
):
aid = href.split("/")[-1]
if not pg_tracker.is_actress_finished(aid):
img_tag = a_tag.find("img")
name = img_tag.get("alt", aid).strip() if img_tag else aid
actress_list.append({"aid": aid, "name": name})
current_actor_page += 1
log_actor_list_full_progress()
return actress_list
def parse_video_full_info(video_url, video_title, actress_aid, actress_name):
vid = video_url.split("/")[-1]
soup = safe_get_soup(video_url)
real_pic = ""
if soup:
cover_cls = soup.find(class_=re.compile("cover|preview|thumbnail|poster"))
if cover_cls and cover_cls.get("src"):
real_pic = cover_cls.get("src")
else:
og_img_meta = soup.find("meta", property="og:image")
if og_img_meta and og_img_meta.get("content"):
real_pic = og_img_meta.get("content")
vod_pic = norm_url(real_pic)
tag_list = []
if soup:
tag_tags = soup.find_all(class_=re.compile("tag|label|category|keyword|badge"))
for t in tag_tags:
tag_text = t.get_text(strip=True)
if tag_text and len(tag_text) > 1 and tag_text not in tag_list:
tag_list.append(tag_text)
content_text = "暂无影片详细介绍"
if soup:
detail_box = soup.find(
class_=re.compile("detail|intro|synopsis|description|full-content")
)
if detail_box:
content_text = (
detail_box.get_text(strip=True).replace("\n", " ").replace("\r", " ")
)
vod_content = f"<p>  {content_text}</p>"
m3u8_link = ""
if soup:
m_match = re.search(r'["\'](https?://[^"\']+\.m3u8[^"\']*)["\']', str(soup))
if m_match:
m3u8_link = norm_url(m_match.group(1))
vod_play_url = f"高清${video_url}$$$高清${m3u8_link}"
video_item = {
"vod_id": vid,
"vod_name": video_title,
"vod_pic": vod_pic,
"vod_actor": actress_name,
"vod_director": "whos.tv",
"vod_remarks": "HD高清",
"vod_pubdate": datetime.now().strftime("%Y-%m-%d"),
"vod_area": "日本",
"vod_year": datetime.now().strftime("%Y"),
"vod_tags": tag_list,
"vod_content": vod_content,
"vod_play_from": "dytt$$$dyttm3u8",
"vod_play_url": vod_play_url,
"type_name": "成人影片",
}
insert_video_to_db(
vid, actress_aid, video_title, vod_pic, tag_list, vod_content, vod_play_url
)
return video_item
def append_to_m3u(video_item):
play_link = video_item["vod_play_url"].split("$$$")[-1].split("$")[-1]
line = f'#EXTINF:-1 tvg-logo="{video_item["vod_pic"]}" group-title="{video_item["vod_actor"]}",{video_item["vod_name"]}\n{play_link}\n'
with file_lock:
with open(GLOBAL_M3U_FILE, "a", encoding="utf-8") as f:
f.write(line)
def crawl_single_actress_task(actress_data):
global current_actress
aid = actress_data["aid"]
a_name = actress_data["name"]
base_url = f"{HOST}/actresses/{aid}"
home_soup = safe_get_soup(base_url)
if not home_soup:
log(f"❌ 【{a_name}】主页访问失败,跳过")
pg_tracker.mark_actress_finished(aid, 0, 0)
insert_actress_to_db(aid, a_name, 0, 0)
current_actress += 1
return
max_video_page = 1
for a_tag in home_soup.find_all("a", href=True):
p_match = re.search(r"/page-(\d+)", a_tag["href"])
if p_match:
max_video_page = max(max_video_page, int(p_match.group(1)))
log(f"📌 【{a_name}】作品总页数: {max_video_page}")
all_video_source = []
for page in range(1, max_video_page + 1):
page_url = f"{base_url}/page-{page}" if page > 1 else base_url
page_soup = safe_get_soup(page_url)
if not page_soup:
continue
for box_a in page_soup.find_all("a", href=True):
href = box_a["href"]
if href.startswith("/videos/") and "page" not in href:
img_tag = box_a.find("img")
title = (
img_tag.get("alt", "未知作品").strip()
if img_tag
else href.split("/")[-1]
)
all_video_source.append({"url": norm_url(href), "title": title})
if not all_video_source:
log(f"📭 【{a_name}】无任何作品")
pg_tracker.mark_actress_finished(aid, 0, 0)
insert_actress_to_db(aid, a_name, 0, 0)
current_actress += 1
return
log(f"🎞️ 【{a_name}】待解析视频: {len(all_video_source)}")
success_count = 0
video_json_list = []
with ThreadPoolExecutor(max_workers=GLOBAL_THREADS) as executor:
future_map = {
executor.submit(parse_video_full_info, v["url"], v["title"], aid, a_name): v
for v in all_video_source
}
for future in as_completed(future_map):
try:
item = future.result(timeout=60)
video_json_list.append(item)
append_to_m3u(item)
success_count += 1
except TimeoutError:
log("⚠️ 单个视频超时跳过")
continue
except Exception as e:
log(f"⚠️ 视频解析异常: {str(e)[:30]}")
continue
json_save_path = os.path.join(OUTPUT_DIR, f"{a_name}.json")
with file_lock:
with open(json_save_path, "w", encoding="utf-8") as f:
json.dump({"list": video_json_list}, f, ensure_ascii=False, indent=2)
insert_actress_to_db(aid, a_name, len(all_video_source), success_count)
pg_tracker.mark_actress_finished(aid, len(all_video_source), success_count)
current_actress += 1
log(f"✅ 【{a_name}】完成 | 总数:{len(all_video_source)} 成功:{success_count}")
log_actress_total_progress()
# ====================== TVBox / Hipy 插件入口 ======================
class Spider(BaseSpider):
def init(self, extend=""):
pass
def getName(self):
return "女优库"
def homeContent(self, filter):
return {"class": [{"type_id": "actresses", "type_name": "女优"}]}
def homeVideoContent(self):
return self.categoryContent("actresses", "1", False, {}).get("list", [])
def categoryContent(self, tid, pg, filter, extend):
page = int(pg or 1)
if tid != "actresses":
return {"list": [], "page": page, "pagecount": 1}
url = f"{HOST}/actresses?page={page}" if page > 1 else f"{HOST}/actresses"
soup = safe_get_soup(url)
if not soup:
return {"list": [], "page": page, "pagecount": 1}
videos = []
for item in self._parse_actresses(soup):
videos.append(
{
"vod_id": item["aid"],
"vod_name": item["name"],
"vod_pic": item.get("pic") or BACKUP_PIC,
"vod_remarks": "女优",
}
)
return {
"list": videos,
"page": page,
"pagecount": self._parse_pagecount(soup),
}
def detailContent(self, ids):
aid = ids[0] if ids else ""
if not aid:
return {"list": []}
soup = safe_get_soup(f"{HOST}/actresses/{aid}")
if not soup:
return {"list": []}
name = self._parse_title(soup, aid)
episodes = self._parse_videos(soup)
if not episodes:
return {"list": []}
play_url = "#".join(f"{item['name']}${item['url']}" for item in episodes)
return {
"list": [
{
"vod_id": aid,
"vod_name": name,
"vod_pic": self._parse_cover(soup),
"vod_actor": name,
"vod_director": "whos.tv",
"vod_content": f"<p>{name}</p>",
"vod_play_from": "whos",
"vod_play_url": play_url,
}
]
}
def searchContent(self, key, quick, pg="1"):
return {"list": [], "page": int(pg or 1)}
def playerContent(self, flag, vid, vip_flags):
play_url = self._parse_play_url(vid) or vid
return {"jx": 0, "parse": 0, "url": play_url, "header": get_random_headers()}
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
def localProxy(self, param):
pass
def _parse_pagecount(self, soup):
pagecount = 1
for a_tag in soup.find_all("a", href=True):
match = re.search(r"page-(\d+)|page=(\d+)", a_tag["href"])
if match:
pagecount = max(pagecount, int(match.group(1) or match.group(2)))
return pagecount
def _parse_actresses(self, soup):
result = []
seen = set()
for a_tag in soup.find_all("a", href=True):
href = a_tag["href"]
if not href.startswith("/actresses/") or href == "/actresses" or "page" in href:
continue
aid = href.rstrip("/").split("/")[-1]
if not aid or aid in seen:
continue
seen.add(aid)
img_tag = a_tag.find("img")
name = img_tag.get("alt", aid).strip() if img_tag else a_tag.get_text(strip=True) or aid
pic = BACKUP_PIC
if img_tag:
pic = norm_url(img_tag.get("src") or img_tag.get("data-src"))
result.append({"aid": aid, "name": name, "pic": pic})
return result
def _parse_videos(self, soup):
result = []
seen = set()
for a_tag in soup.find_all("a", href=True):
href = a_tag["href"]
if not href.startswith("/videos/") or "page" in href:
continue
url = norm_url(href)
if url in seen:
continue
seen.add(url)
img_tag = a_tag.find("img")
name = img_tag.get("alt", "").strip() if img_tag else ""
if not name:
name = a_tag.get_text(strip=True) or href.rstrip("/").split("/")[-1]
result.append({"name": name, "url": url})
return result
def _parse_title(self, soup, fallback):
for selector in ["h1", "title"]:
tag = soup.find(selector)
if tag and tag.get_text(strip=True):
return tag.get_text(strip=True).replace(" - whos.tv", "")
return fallback
def _parse_cover(self, soup):
img_tag = soup.find("img", src=True)
if img_tag:
return norm_url(img_tag.get("src"))
return BACKUP_PIC
def _parse_play_url(self, video_url):
soup = safe_get_soup(video_url)
if not soup:
return ""
match = re.search(r'["\'](https?://[^"\']+\.m3u8[^"\']*)["\']', str(soup))
return norm_url(match.group(1)) if match else ""
# ====================== 主程序入口 ======================
def main():
migrate_workspace_once()
init_all_folder_file()
log("=============================================")
log(" 20线程 | 重试15次 | 输出:/lz/wj/女优库/")
log("=============================================")
start_time = time.time()
log("🔍 探测全站页码 & 解析女优列表...")
crawl_actress_page(1)
all_actress_pool = []
with ThreadPoolExecutor(max_workers=GLOBAL_THREADS) as executor:
futures_list = [
executor.submit(crawl_actress_page, p)
for p in range(1, total_actor_pages + 1)
]
for ft in as_completed(futures_list):
all_actress_pool.extend(ft.result() or [])
unique_check = set()
todo_actress_list = []
for act in all_actress_pool:
if act["aid"] not in unique_check:
unique_check.add(act["aid"])
todo_actress_list.append(act)
total_actresses = len(todo_actress_list)
current_actress = len(pg_tracker.data)
log(f"\n📋 待抓取: {total_actresses} 位,已完成: {current_actress}")
log_actress_total_progress()
for idx, actress_item in enumerate(todo_actress_list, 1):
log(f"\n>>>>>>>>>> {idx}/{total_actresses} : {actress_item['name']} <<<<<<<<<<")
crawl_single_actress_task(actress_item)
total_all_video = sum(v.get("total_video", 0) for v in pg_tracker.data.values())
total_succ_video = sum(v.get("success_video", 0) for v in pg_tracker.data.values())
total_use_min = round((time.time() - start_time) / 60, 2)
log(
"\n==================================== 任务结束 ================================"
)
log(f"运行时长: {total_use_min} 分钟 | 女优总数: {len(pg_tracker.data)}")
log(f"解析视频: {total_all_video} 部 | 成功入库: {total_succ_video}")
log(f"存储目录: {OUTPUT_DIR}")
log(
"=============================================================================="
)
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
log("\n🛑 手动中断,进度已保存,下次续爬不重跑")
sys.exit(0)
except Exception as e:
log(f"\n❌ 程序异常: {str(e)[:60]}")
sys.exit(1)