diff --git a/README.md b/README.md index f171841..0183507 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # AvHub - R18 Resource Search & Management Tool - **AvHub** is a web platform dedicated to the retrieval and management of adult video resources. + **AvHub** is a web platform dedicated to the retrieval and management of `R18` video resources. Cloudflare Page: https://avhub.pages.dev/ diff --git a/README_CN.md b/README_CN.md index aa464b5..c831402 100644 --- a/README_CN.md +++ b/README_CN.md @@ -4,7 +4,7 @@ # AvHub - R18 资源搜索和管理工具 -**AvHub** 是一个致力于检索和管理成人视频资源的 Web 平台 +**AvHub** 是一个致力于检索和管理R18视频资源的 Web 平台 Cloudflare Page: https://avhub.pages.dev/ diff --git a/data/video_urls.txt b/data/video_urls.txt index 381ac83..ccb9733 100644 --- a/data/video_urls.txt +++ b/data/video_urls.txt @@ -1,10 +1,21 @@ -https://videos1.bysshxd.com/20230726/Pg0dW2NlmPpg1/index.m3u8 -https://videos1.bysshxd.com/20230728/NJrY0K4386kRo/index.m3u8 -https://videos1.bysshxd.com/20230727/MJQA2oYdmVvJj/index.m3u8 -https://videos1.bysshxd.com/20230728/PRx1jzovobvJb/index.m3u8 -https://videos1.bysshxd.com/20230728/LJB97V6r9PnRy/index.m3u8 -https://videos1.bysshxd.com/20230728/QR1kwvNwlM7gB/index.m3u8 -https://videos1.bysshxd.com/20230726/qGWQNZYPWBEJl/index.m3u8 -https://videos1.bysshxd.com/20230728/Qg8zwYbrwaVRw/index.m3u8 -https://videos1.bysshxd.com/20230728/1GwbVQ52xaLgr/index.m3u8 -https://videos1.bysshxd.com/20230802/5G2kw3KpaY2R2/index.m3u8 +https://txmov2.a.yximgs.com/upic/2019/12/23/16/BMjAxOTEyMjMxNjIxMjRfMTY1NzYyM18yMDgzNzk0MjY3N18yXzM=_b_B772861850137ede4beb9f0db63947fd0.mp4 +https://txmov2.a.yximgs.com/upic/2021/03/03/09/BMjAyMTAzMDMwOTA3MjJfNzk3MTYxOTQ0XzQ1MzI5MTQzNzcxXzJfMw==_b_B5ad79ad25f92f4a0a5ccdc78c865b529.mp4 +https://txmov2.a.yximgs.com/upic/2021/06/01/11/BMjAyMTA2MDExMTIyMDhfMjM2MzkyOTY3Nl81MDYxMzYzMjI0OV8yXzM=_b_B3470a2101a1ef6a00f9a78f7cd53699a.mp4 +https://txmov2.a.yximgs.com/upic/2021/01/07/11/BMjAyMTAxMDcxMTA4MThfNTg0MDAzNDRfNDE5OTY1MTA4MTFfMV8z_b_Bf7776e64e305bb63af8f4b8b83738bb1.mp4 +https://txmov2.a.yximgs.com/upic/2021/05/10/14/BMjAyMTA1MTAxNDM3MjhfMjIwNzE1NzAyOV80OTM2MDU5ODkwOF8xXzM=_b_B6acc6d0a13a3c3049475276f1274f32e.mp4 +https://txmov2.a.yximgs.com/upic/2021/04/08/16/BMjAyMTA0MDgxNjMzMzZfMTczMzQ4NzI4XzQ3NDUwOTM0NTEyXzFfMw==_b_Baecc8006dcf6156fb2a30324ed4b6ad0.mp4 +https://txmov2.a.yximgs.com/upic/2020/12/22/22/BMjAyMDEyMjIyMjEzMjNfNDgzOTAzNDkwXzQxMTM5NDk2OTIwXzFfMw==_b_B208e031925d3d84a3efcbad8055d61de.mp4 +https://txmov2.a.yximgs.com/upic/2021/03/06/19/BMjAyMTAzMDYxOTQ3MzBfMjExMjA0ODM0NF80NTUyNTkwNjQ0Ml8xXzM=_b_B24246215b636e289e16d700a536c1d94.mp4 +https://txmov2.a.yximgs.com/upic/2021/01/19/21/BMjAyMTAxMTkyMTQzNDlfMjE2ODQ4NDg3OV80MjY1MjExNjQ2NF8xXzM=_b_B3b62c08576c5cc5085029c4461e7eb9f.mp4 +https://txmov2.a.yximgs.com/upic/2021/08/18/17/BMjAyMTA4MTgxNzQ5NTNfMTAyOTk4MzU5MF81NTQ5ODY2NjI4OF8xXzM=_b_B8b5ac30fb6af386e0bc3551b42f0be47.mp4 +https://txmov2.a.yximgs.com/upic/2021/02/19/12/BMjAyMTAyMTkxMjE0NDZfNjIwMjYyNjU5XzQ0NjIxMjcwNTE1XzJfMw==_b_Bd4d7f58485663ae9a6fa79982f33400b.mp4 +https://txmov2.a.yximgs.com/upic/2021/02/07/21/BMjAyMTAyMDcyMTI3MzFfNDgzOTAzNDkwXzQzNzc3Njc0NjI4XzFfMw==_b_B5684f39cd336ea1f31edb8ff627895c7.mp4 +https://txmov2.a.yximgs.com/upic/2021/01/06/11/BMjAyMTAxMDYxMTA5MTZfNTg0MDAzNDRfNDE5NTI0MjAzMTRfMV8z_b_B0c8b6240d2fa5d04d709e0129d78f4f4.mp4 +https://txmov2.a.yximgs.com/upic/2020/08/07/17/BMjAyMDA4MDcxNzU2MjFfMTU0NzU2MzQxOF8zMzg4MjYxMTQwN18xXzM=_b_B3c9fc2b83cd8f07f4a8b542067af12fd.mp4 +https://txmov2.a.yximgs.com/upic/2023/09/25/19/BMjAyMzA5MjUxOTQ4MzZfMTMxMjAyNjEyNV8xMTM1NjQwMjUyMDNfMl8z_b_Bead1ae1f9b7792318d5d72405de73054.mp4 +https://txmov2.a.yximgs.com/upic/2020/09/11/14/BMjAyMDA5MTExNDI2MTBfMTY1NzYyM18zNTg0MzA4ODU2Ml8xXzM=_b_B81923420dd954e420c42fc5091313ada.mp4 +https://txmov2.a.yximgs.com/upic/2021/09/19/12/BMjAyMTA5MTkxMjU5NDlfMTMxMjAyNjEyNV81NzQyMTczNjEzNF8yXzM=_b_B3fb1f7e46f9b877c48f23e4547a63c62.mp4 +https://txmov2.a.yximgs.com/upic/2020/01/11/00/BMjAyMDAxMTEwMDAwMzZfMTY1NzYyM18yMTU3OTQxNDA3NF8yXzM=_b_B89b021c5baddda1b9f3ce9e7817c7fb9.mp4 +https://txmov2.a.yximgs.com/upic/2019/12/09/13/BMjAxOTEyMDkxMzU2MDNfMTY1NzYyM18yMDMzMzgzMDQ1NV8yXzM=_b_B89c84e64347127a907a5db9a54730d83.mp4 +https://txmov2.a.yximgs.com/upic/2021/05/01/20/BMjAyMTA1MDEyMDM3MjVfMTAyOTk4MzU5MF80ODc5NjY2NTM5M18xXzM=_b_Ba6790e3db535269ab0a371b02076c0e1.mp4 +https://txmov2.a.yximgs.com/upic/2021/03/23/18/BMjAyMTAzMjMxODA1MDRfMTU0NzU2MzQxOF80NjUwMjA0NDgwOF8xXzM=_b_B2f8dbee0688f4556f28c79af69d4de2f.mp4 diff --git a/web/imgs/icon-192x192.png b/web/imgs/icon-192x192.png new file mode 100644 index 0000000..d6a18f4 Binary files /dev/null and b/web/imgs/icon-192x192.png differ diff --git a/web/imgs/icon-512x512.png b/web/imgs/icon-512x512.png new file mode 100644 index 0000000..27d858a Binary files /dev/null and b/web/imgs/icon-512x512.png differ diff --git a/web/index.html b/web/index.html index 79891bc..8c56fc8 100644 --- a/web/index.html +++ b/web/index.html @@ -8,6 +8,12 @@ + + + + + + @@ -193,11 +199,11 @@ - + \ No newline at end of file diff --git a/web/manifest.json b/web/manifest.json new file mode 100644 index 0000000..9bef4c3 --- /dev/null +++ b/web/manifest.json @@ -0,0 +1,23 @@ +{ + "name": "AvHub", + "short_name": "AvHub", + "description": "R18 Resource Search & Manager", + "start_url": "/", + "display": "standalone", + "background_color": "#141518", + "theme_color": "#000000", + "icons": [ + { + "src": "imgs/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "imgs/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ] +} \ No newline at end of file diff --git a/web/script.js b/web/script.js index c58adfe..7726d0e 100644 --- a/web/script.js +++ b/web/script.js @@ -35,7 +35,7 @@ function switchTab(tabName) { // 添加 API 配置 const API_CONFIG = { - BASE_URL: 'https://api.wwlww.org/v1', + BASE_URL: '/api/v1', ENDPOINTS: { SEARCH: '/avcode', COLLECTIONS: '/hacg', @@ -1517,3 +1517,16 @@ function showThemeMenu(button) { }; document.addEventListener('keydown', handleEscape); } + +// 注册 Service Worker +if ('serviceWorker' in navigator) { + window.addEventListener('load', () => { + navigator.serviceWorker.register('/sw.js') + .then(registration => { + console.log('ServiceWorker registration successful'); + }) + .catch(err => { + console.log('ServiceWorker registration failed: ', err); + }); + }); +} diff --git a/web/sw.js b/web/sw.js new file mode 100644 index 0000000..f2f1557 --- /dev/null +++ b/web/sw.js @@ -0,0 +1,71 @@ +const CACHE_NAME = 'avhub-cache-v1'; +const urlsToCache = [ + '/', + '/index.html', + '/style.css', + '/script.js', + '/manifest.json', + '/imgs/favicon.ico', + '/imgs/icon-192x192.png', + '/imgs/icon-512x512.png', + 'https://testingcf.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css', + 'https://testingcf.jsdelivr.net/npm/hls.js@1.4.12/dist/hls.min.js' +]; + +// 安装 Service Worker +self.addEventListener('install', event => { + event.waitUntil( + caches.open(CACHE_NAME) + .then(cache => cache.addAll(urlsToCache)) + ); +}); + +// 激活 Service Worker +self.addEventListener('activate', event => { + event.waitUntil( + caches.keys().then(cacheNames => { + return Promise.all( + cacheNames.map(cacheName => { + if (cacheName !== CACHE_NAME) { + return caches.delete(cacheName); + } + }) + ); + }) + ); +}); + +// 处理请求 +self.addEventListener('fetch', event => { + event.respondWith( + caches.match(event.request) + .then(response => { + // 如果在缓存中找到响应,则返回缓存的响应 + if (response) { + return response; + } + + // 克隆请求,因为请求是一个流,只能使用一次 + const fetchRequest = event.request.clone(); + + // 发起网络请求 + return fetch(fetchRequest).then(response => { + // 检查是否收到有效的响应 + if (!response || response.status !== 200 || response.type !== 'basic') { + return response; + } + + // 克隆响应,因为响应是一个流,只能使用一次 + const responseToCache = response.clone(); + + // 将响应添加到缓存 + caches.open(CACHE_NAME) + .then(cache => { + cache.put(event.request, responseToCache); + }); + + return response; + }); + }) + ); +}); \ No newline at end of file