Étudiante brillante, PUA coréenne, lycéenne, étudiante aux longues jambes, sexe en plein air, voiture, toilettes publiques, fellation sur un toit, fétichisme des pieds, PUA pleinement dévoilée.","lastmod":"2026-07-11","duration":"02:25:32","url":"/play/19154132.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYzYzZjYzMTJiOGM3NGRmN2M1NWQ3YjRmNjg4ZGVmZjkuanBn.cache","vod_id":19066627,"title":"[Professeur, jouons à un jeu interdit !] Ma femme et moi traversons une période difficile. En tant que professeur principal, je suis courtisé par un élève. (Futaba Walnut HMN-233-C)","lastmod":"2025-03-29","duration":"01:58:46","url":"/play/19066627.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA2MjAvYjNiYTdjODJkZjYzNjQ3ODJiYmYyOGI3Nzc1YWY4YzYuanBn.cache","vod_id":19079425,"title":"Belle et aguicheuse, on voit tout de suite qu'elle a eu recours à la chirurgie esthétique.","lastmod":"2025-06-20","duration":"27:57","url":"/play/19079425.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvN2QwMDEwZjAyMTMxMjQ3MWNjMTI2NTkxMWYzM2NjODYuanBn.cache","vod_id":19012534,"title":"Une femme au foyer aux formes généreuses apprend à nager et se laisse absorber par la pénétration douce mais vigoureuse de son entraîneur, atteignant l'orgasme !","lastmod":"2025-03-28","duration":"01:58:36","url":"/play/19012534.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEwMDEvYWViYWRjMjMxMjUyMjdiYjg2N2U4YTNkZjBhNjgzNjMuanBn.cache","vod_id":19098427,"title":"Des rumeurs circulent selon lesquelles une idole étudiante travaillerait comme escort girl avec un fan plus âgé, tous deux vivant au jour le jour. (JUKF123)","lastmod":"2025-09-30","duration":"02:55:15","url":"/play/19098427.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZTlmYmVmYjJiOGQ4ZjA5ZThlOWQ3NmE1Zjg4MDYyNzYuanBn.cache","vod_id":19017794,"title":"Un étudiant qui vendait des préservatifs à action retardée en faisant du porte-à-porte est devenu le cobaye d'une belle jeune fille, qui a été agressée sexuellement jusqu'à ce que ses jambes soient prises de crampes.","lastmod":"2025-03-29","duration":"01:02:41","url":"/play/19017794.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYmVhYmYwNjY5NWIxZWVlODA0NDMwNGZjMzYyMjAwNDQuanBn.cache","vod_id":18962378,"title":"8. Lorsque je travaillais dans un izakaya (pub japonais), cette étudiante effrontée et diabolique, Miyajima Mei, m'a séduit avec les gros mots qu'elle venait d'apprendre. J'ai subi du harcèlement sexuel pendant mon travail, et même après avoir épuisé mon sperme, elle m'a forcé à éjaculer à plusieurs reprises. Miyajima Mei","lastmod":"2025-03-28","duration":"02:18:57","url":"/play/18962378.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNjA3MDgvMzA4ODBkMTAxMGVjMDU4ZDdhZjA5MjM3YjE5YmM1NGQuanBn.cache","vod_id":19153999,"title":"Un expert vous apprend à utiliser une plateforme de rencontres vietnamienne. Quelques centaines de dollars suffisent pour rencontrer deux superbes jeunes femmes. La qualité des escortes est au rendez-vous.","lastmod":"2026-07-11","duration":"01:59:03","url":"/play/19153999.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA5MTMvMjI4ZDM4ZTlkZGFhN2RmNmM1MjkzMjQ1MzgxYjFlZDQuanBn.cache","vod_id":19095193,"title":"MIAB437〈La Chute du Couple Lys〉Innocent J●Un couple lesbien tombe dans un urinoir rempli de sperme, jusqu'à ce que l'étudiant insatiable","lastmod":"2025-09-12","duration":"03:04:05","url":"/play/19095193.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvNTdkMTM4NGMzYTM1YTA1ZmIyM2M1ZDRkODAzMDk2MGYuanBn.cache","vod_id":19118971,"title":"Des seins généreux et naissants sont caressés et léchés. Une étudiante aux formes généreuses se livre à quatre heures de sexe obscène et érotique. Actrice inconnue SUJI-286","lastmod":"2026-01-17","duration":"03:59:58","url":"/play/19118971.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvZmRlYWY3N2MwNjBlOGMwNGU4MThiZmJlNzJlNmFkNGQuanBn.cache","vod_id":18989535,"title":"J'ai récemment fait la rencontre d'une femme voluptueuse et sexy en minijupe via un site de réservation d'hôtel et j'ai eu des relations sexuelles avec elle.","lastmod":"2025-03-28","duration":"49:13","url":"/play/18989535.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvZWIwZGE1ZTkwMzA0ZDQzMTI3MjhlMzcyYzk1YTAxZTIuanBn.cache","vod_id":19136351,"title":"Une étudiante, victime de harcèlement, a été droguée et rendue inconsciente par son voisin. Son domicile a été cambriolé et elle a été violée en l'absence de ses parents. MTALL-088-C","lastmod":"2026-04-11","duration":"02:28:01","url":"/play/19136351.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNmJhNjgyNzk2YzA4ODJjYjUzOTg3NTE0MGNlMzkyYzMuanBn.cache","vod_id":18997010,"title":"HND-927 Première réincarnation complète et éjaculation d'une étudiante - Tojo Natsu","lastmod":"2025-03-28","duration":"01:47:38","url":"/play/18997010.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYWVhNjQ4OTVmN2Q3NjA5NGQ4NzgyNGZiOTlmY2UyYzYuanBn.cache","vod_id":19029902,"title":"7. Une femme qui montre son visage n'est pas autorisée à entrer dans le « miroir magique » avec des amies proches. Deux étudiantes participent à un « jeu d'évasion sur le thème de la perte de virginité ».","lastmod":"2025-03-29","duration":"04:04:50","url":"/play/19029902.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMTUvZTIxMjI4YjdhMTI4NjEzNjg4ZDdiNDk5ZGYyZDE3OWUuanBn.cache","vod_id":19113551,"title":"Il a séduit une jeune masseuse de pieds et a organisé une rencontre avec elle dans un hôtel pour deux rapports sexuels.","lastmod":"2025-12-22","duration":"50:45","url":"/play/19113551.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvMDFiNmYzOGJmZmE1NTNjOGU1MTA0YmI3YWRmOWU0M2IuanBn.cache","vod_id":18977019,"title":"SKMJ-079 Une étudiante amateur pratique une fellation sur un garçon vierge ! Une jeune fille qui adore embrasser donne un baiser profond à un garçon qui n’a jamais embrassé auparavant, avec succion, insertion et mouvements de langue.","lastmod":"2025-03-28","duration":"03:58:04","url":"/play/18977019.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvN2UzNWVjOTIyNjg5MzgzNDNjNzMyNGIxYzE4ODBmZTMuanBn.cache","vod_id":18976307,"title":"FNEO-047 Rencontre avec une amatrice à Sendai, la ville des arbres ! Flirt sérieux avec une belle étudiante de Tohoku !","lastmod":"2025-03-28","duration":"03:49:28","url":"/play/18976307.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTA4MjkvMDgzYTMzMjFjZDM4YjFiZDM2NjE3ZWI2ZmQwYjVlNTMuanBn.cache","vod_id":19092408,"title":"Un jeune couple a éjaculé accidentellement lors de leurs rapports sexuels quotidiens ; les léchages étaient doux, tandis que les chevauchées étaient débridées.","lastmod":"2025-08-28","duration":"06:56","url":"/play/19092408.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvYzU4ZmVhNzFjODBkY2I5ZDk0ODQ0MDE1MTZlYzViYjIuanBn.cache","vod_id":19005215,"title":"Cette beauté aux longues jambes lèche et s'accroche, se fait baiser sa chatte tendre à fond et jouit sur son visage 1","lastmod":"2025-03-28","duration":"07:39","url":"/play/19005215.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTEyMjMvODM2YTk5NzY2YjBkNjkxYjcxY2Q4MGQ1MWRlNzFhN2QuanBn.cache","vod_id":19141333,"title":"Un homme nommé Diao Ge (屌哥) a dépensé 3 000 yuans pour les services d'une escort girl, puis a eu une relation sexuelle avec une mannequin occasionnelle rencontrée sur Taobao. La rencontre a commencé par des préliminaires sur le canapé, puis s'est poursuivie dans différentes positions sur le lit.","lastmod":"2026-05-05","duration":"01:15:05","url":"/play/19141333.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly92aWRlby5kYWdlLnRvcC9zdG9yYWdlL3VwbG9hZHMvMjAyNTAzMzEvNTkyZGIyMGU3OTQxM2FlMzM5OTkxMGUzZWQyY2ZlNTEuanBn.cache","vod_id":19029203,"title":"[Le rêve d'une vierge devenu réalité] Sexe de groupe à 5 avec éjaculations sans fin et squirting massif [Poitrine bonnet F, douce et lascive !]","lastmod":"2025-03-29","duration":"02:35:40","url":"/play/19029203.html"},{"img":"https://cache.sgvafs.com/base/aHR0cHM6Ly9zYnp5dHBpbWc0LmNvbTozNTE5L3VwbG9hZC92b2QvMjAyNjAyMjMtMS9lMjU0MGEwNjY3NzBiMWJlMmQ0ODFlMWJjYTQ4MDRhMi5qcGc=.cache","vod_id":19126435,"title":"L'enseignant, aux antipodes l'un de l'autre, a croisé son propre professeur par hasard dans un hôtel pendant les vacances d'été. Cette nuit-là, j'ai couché avec le professeur Zhao.","lastmod":"2026-02-23","duration":"36:55","url":"/play/19126435.html"}]},
videoTitle: 'Une étudiante à temps partiel de 18 ans, ressemblant à Zhao Min, a été abordée dans un hôtel. Elle était serrée, humide, douce et obéissante.',
language: 'fr',
dataKey: '01',
loadingPlayer: true,
showShare: false,
pageUrl: '',
// RecommendedMovies 组件状态
isSingleColumn: false,
pageSize: 8,
currentPage: 1,
// 计算属性(使用 getter)
get layoutIconClass() {
return this.isSingleColumn ? 'icon-view-list' : 'icon-grid';
},
get layoutClass() {
return [
'row',
'g-3',
'row-cols-1',
this.isSingleColumn ? '' : 'row-cols-2',
'row-cols-lg-4'
].filter(Boolean).join(' ');
},
// 方法
onAppMounted() {
// 设置页面 URL
this.pageUrl = window.location.href;
// 保存观看历史
this.saveWatchHistory();
// 更新标签统计
if (this.videoData.tag && this.videoData.tag.length > 0) {
this.updateTagStats(this.videoData.tag);
}
// 发送点击统计
this.hitVideoId(this.videoData.id);
// 从 Cookie 读取布局偏好
const layoutCookie = this.getCookie('list_layout');
if (layoutCookie === 'single') {
this.isSingleColumn = true;
}
// 监听 iframe 加载完成,隐藏骨架屏
// 使用 setTimeout 确保 DOM 已完全渲染
setTimeout(() => {
const iframe = document.getElementById('v2-player');
const skeleton = document.getElementById('player-skeleton');
if (iframe && skeleton) {
// 定义隐藏骨架屏的函数
const hideSkeleton = () => {
skeleton.style.transition = 'opacity 0.3s ease';
skeleton.style.opacity = '0';
setTimeout(() => {
skeleton.style.display = 'none';
}, 300);
};
// 检查 iframe 是否已经加载完成
if (iframe.contentDocument || iframe.contentWindow) {
try {
// 如果 iframe 已加载,直接隐藏骨架屏
if (iframe.contentWindow.document.readyState === 'complete') {
setTimeout(hideSkeleton, 500);
return;
}
} catch (e) {
console.log('[Video] 跨域 iframe,无法检查状态:', e.message);
// 跨域情况下无法访问 contentWindow,继续监听 load 事件
}
}
// 监听 load 事件
iframe.addEventListener('load', () => {
console.log('[Video] iframe load 事件触发');
setTimeout(hideSkeleton, 500);
});
// 添加超时保护,确保骨架屏最终会被隐藏
setTimeout(() => {
if (skeleton.style.display !== 'none') {
console.log('[Video] 超时保护触发,强制隐藏骨架屏');
hideSkeleton();
}
}, 5000); // 5秒后强制隐藏
} else {
console.error('[Video] 未找到 iframe 或 skeleton 元素');
}
}, 0);
},
// 随机跳转
async jumpToRandomVideo() {
try {
const response = await fetch(`/api/qun/randomid?t=${Date.now()}`, {
headers: {
'x-data-key': this.dataKey,
'x-api-key': 'dagexxx.com'
}
});
const data = await response.json();
if (data?.status === 1 && data?.data?.id) {
window.location.href = `/${this.language}/play/${data.data.id}.html`;
} else {
console.error('获取随机视频失败:', data?.message || '未知错误');
}
} catch (err) {
console.error('获取随机视频失败:', err);
}
},
// 复制分享链接
copyShareLink() {
const input = this.$refs.shareInput;
if (input) {
input.select();
input.setSelectionRange(0, 99999); // For mobile devices
// 尝试使用现代 API
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(this.pageUrl).then(() => {
alert('Lien copié !');
}).catch(() => {
// 降级到旧方法
document.execCommand('copy');
alert('Lien copié !');
});
} else {
// 降级到旧方法
document.execCommand('copy');
alert('Lien copié !');
}
}
},
// 切换布局
toggleLayout() {
this.isSingleColumn = !this.isSingleColumn;
this.setCookie('list_layout', this.isSingleColumn ? 'single' : 'multi', 30);
},
// 加载更多
loadMore() {
this.currentPage++;
},
// 保存观看历史
saveWatchHistory() {
try {
const storageKey = 'watchHistory';
let history = JSON.parse(localStorage.getItem(storageKey) || '[]');
// 解码 HTML 实体编码的标题
const decodeHtmlEntities = (text) => {
const textarea = document.createElement('textarea');
textarea.innerHTML = text;
return textarea.value;
};
const video = {
id: this.videoData.id,
title: decodeHtmlEntities(this.videoData.title),
image: this.videoData.images || this.videoData.preview,
duration: this.videoData.duration || ''
};
// 过滤掉已存在的相同 ID 视频
history = history.filter(item => item.id !== video.id);
// 添加新记录到最前面
history.unshift(video);
// 限制最多保存 100 条
if (history.length > 100) {
history = history.slice(0, 100);
}
localStorage.setItem(storageKey, JSON.stringify(history));
} catch (e) {
console.error('Failed to save watch history:', e);
}
},
// 更新标签统计
updateTagStats(tags = []) {
// HTML 实体解码函数
const decodeHtmlEntities = (text) => {
const textarea = document.createElement('textarea');
textarea.innerHTML = text;
return textarea.value;
};
const storageKey = this.dataKey + 'tagWatchStats';
const lastWatchedKey = this.dataKey + 'tagLastWatched';
const raw = localStorage.getItem(storageKey);
const stats = raw ? JSON.parse(raw) : {};
// 解码标签并统计
const decodedTags = tags.map(tag => decodeHtmlEntities(tag));
decodedTags.forEach(tag => {
stats[tag] = (stats[tag] || 0) + 1;
});
localStorage.setItem(storageKey, JSON.stringify(stats));
localStorage.setItem(lastWatchedKey, JSON.stringify(decodedTags));
},
// 点击统计
hitVideoId(id) {
fetch(`/api/qun/hit?type=play&id=${id}`, {
method: 'GET',
headers: {
'x-data-key': this.dataKey,
'x-api-key': 'dagexxx.com'
}
}).catch(err => {
console.error('点击统计失败:', err);
});
},
// Cookie 工具方法
getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
},
setCookie(name, value, days) {
const expires = new Date(Date.now() + days * 864e5).toUTCString();
document.cookie = `${name}=${value}; expires=${expires}; path=/`;
}
};
}