Help
RSS
API
Feed
Maltego
Contact
Domain > px.aya.cc
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-07-20
43.159.98.16
(
ClassC
)
2025-11-21
43.159.99.16
(
ClassC
)
Port 80
HTTP/1.1 200 OKServer: nginxContent-Type: text/html; charsetutf-8Vary: Accept-EncodingAccept-Ranges: bytesLast-Modified: Wed, 23 Jul 2025 01:16:15 GMTCache-Control: no-cacheContent-Length: 31370Connection: keep-aliveDate: Fri, 21 Nov 2025 22:51:06 GMTEO-LOG-UUID: 2588436589676379391EO-Cache-Status: MISS !DOCTYPE html>html langzh-CN>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> title>Pixiv备份工具/title> style> :root { --primary-color: #0096fa; --secondary-color: #f2f8ff; --text-color: #333; --error-color: #ff4d4f; --success-color: #52c41a; --notice-color: #fffbe6; --notice-border: #ffe58f; --tab-border: #e8e8e8; --tab-active: #0096fa; --tab-hover: #e6f7ff; } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif; line-height: 1.6; color: var(--text-color); background-color: #f5f5f5; padding: 20px; } .container { max-width: 600px; margin: 0 auto; background-color: #fff; border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); padding: 30px; } h1 { text-align: center; margin-bottom: 30px; color: var(--primary-color); } .form-group { margin-bottom: 20px; } label { display: block; margin-bottom: 8px; font-weight: 500; } inputtypetext { width: 100%; padding: 10px 15px; border: 1px solid #ddd; border-radius: 4px; font-size: 16px; transition: border-color 0.3s; } inputtypetext:focus, inputtypeemail:focus, textarea:focus { border-color: var(--primary-color); outline: none; box-shadow: 0 0 0 2px rgba(0, 150, 250, 0.2); } inputtypeemail, textarea { width: 100%; padding: 10px 15px; border: 1px solid #ddd; border-radius: 4px; font-size: 16px; transition: border-color 0.3s; font-family: inherit; } textarea { resize: vertical; min-height: 120px; } .radio-group { display: flex; gap: 20px; } .radio-option { display: flex; align-items: center; cursor: pointer; } .radio-option input { margin-right: 8px; } button { background-color: var(--primary-color); color: white; border: none; padding: 12px 20px; font-size: 16px; border-radius: 4px; cursor: pointer; width: 100%; transition: background-color 0.3s; } button:hover { background-color: #0078cc; } button:disabled { background-color: #cccccc; cursor: not-allowed; } .result-container { margin-top: 30px; padding: 15px; border-radius: 4px; background-color: var(--secondary-color); display: none; } .result-container.success { border-left: 4px solid var(--success-color); } .result-container.error { border-left: 4px solid var(--error-color); } .result-title { font-weight: 600; margin-bottom: 10px; } .result-content { font-family: monospace; white-space: pre-wrap; background-color: #fff; padding: 10px; border-radius: 4px; border: 1px solid #eee; } .loading { display: inline-block; width: 20px; height: 20px; border: 3px solid rgba(255, 255, 255, 0.3); border-radius: 50%; border-top-color: #fff; animation: spin 1s ease-in-out infinite; margin-right: 10px; vertical-align: middle; display: none; } @keyframes spin { to { transform: rotate(360deg); } } /* 公告区域样式 */ .announcement-container { margin-bottom: 25px; border: 1px solid var(--notice-border); border-radius: 4px; background-color: var(--notice-color); overflow: hidden; } .announcement-header { padding: 12px 15px; background-color: rgba(255, 229, 143, 0.3); display: flex; justify-content: space-between; align-items: center; cursor: pointer; user-select: none; } .announcement-title { font-weight: 600; display: flex; align-items: center; } .announcement-icon { margin-right: 8px; color: #faad14; } .announcement-toggle { transition: transform 0.3s; } .announcement-toggle.collapsed { transform: rotate(-90deg); } .announcement-content { padding: 15px; border-top: 1px solid var(--notice-border); max-height: 300px; overflow-y: auto; transition: max-height 0.3s ease-out, padding 0.3s ease; overflow: hidden; /* 展开时隐藏滚动条 */ } .announcement-content.collapsed { max-height: 0; padding-top: 0; padding-bottom: 0; border-top: none; overflow: hidden; /* 折叠时隐藏滚动条 */ } .announcement-content p { margin-bottom: 10px; } .announcement-content p:last-child { margin-bottom: 0; } .announcement-date { font-size: 0.85em; color: #999; margin-top: 8px; text-align: right; } /* 选项卡样式 */ .tabs-container { margin-bottom: 25px; } .tabs-nav { display: flex; border-bottom: 1px solid var(--tab-border); margin-bottom: 20px; } .tab-item { padding: 12px 20px; cursor: pointer; border-bottom: 2px solid transparent; transition: all 0.3s; font-weight: 500; text-align: center; flex: 1; user-select: none; } .tab-item:hover { color: var(--primary-color); background-color: var(--tab-hover); } .tab-item.active { color: var(--tab-active); border-bottom-color: var(--tab-active); } .tab-content { display: none; } .tab-content.active { display: block; } .tab-icon { margin-right: 8px; } @media (max-width: 480px) { .container { padding: 20px; } h1 { font-size: 24px; } .radio-group { flex-direction: column; gap: 10px; } } /style>/head>body> div classcontainer> h1>Pixiv作品备份/h1> !-- 公告区域 --> div classannouncement-container idannouncementContainer> div classannouncement-header idannouncementHeader> div classannouncement-title> span classannouncement-icon>📢/span> p idannouncementTitle>公告获取中.../p> /div> div classannouncement-toggle idannouncementToggle>▼/div> /div> div classannouncement-content idannouncementContentTop> div idannouncementContent> p>正在获取公告.../p> p>请稍等.../p> /div> div classannouncement-date idannouncementDate>1900-01-01/div> /div> /div> !-- 选项卡导航 --> div classtabs-container> div classtabs-nav idtabsNav> div classtab-item active data-tabbackup> span classtab-icon>💾/span>备份 /div> div classtab-item data-tabretrieve> span classtab-icon>📥/span>取回 /div> div classtab-item data-tabfeedback> span classtab-icon>📝/span>反馈 /div> /div> !-- 备份选项卡内容 --> div classtab-content active idbackupTab> form idbackupForm> div classform-group> label forartwork_id>作品ID:/label> input typetext idartwork_id nameartwork_id placeholder请输入Pixiv作品ID required> /div> div classform-group> label>作品类型:/label> div classradio-group> label classradio-option> input typeradio nameartwork_type valueillust checked> 插画 (illust) /label> label classradio-option> input typeradio nameartwork_type valueillust_ugoira> 动图 (illust_ugoira) /label> /div> /div> button typesubmit idsubmitBtn> span classloading idloading styledisplay: none;>/span> span idbtnText>提交备份任务/span> /button> /form> /div> !-- 取回选项卡内容 --> div classtab-content idretrieveTab> form idretrieveForm> div classform-group> label forretrieve_id>作品ID:/label> input typetext idretrieve_id nameretrieve_id placeholder请输入作品ID required> /div> div classform-group> label forretrieve_email>取回邮箱:/label> input typeemail idretrieve_email nameretrieve_email placeholder请输入取回邮箱 required> /div> button typesubmit idretrieveBtn> span classloading idretrieveLoading styledisplay: none;>/span> span idretrieveBtnText>获取备份文件/span> /button> /form> /div> !-- 意见反馈提交选项卡内容 --> div classtab-content idfeedbackTab> form idfeedbackForm> div classform-group> label forfeedback_email>您的邮箱:/label> input typeemail idfeedback_email nameemail placeholder请输入您的邮箱地址> /div> div classform-group> label forfeedback_content>反馈内容:/label> textarea idfeedback_content namecontent rows5 placeholder请输入您的意见或建议 required>/textarea> /div> div classform-group> label forcaptchaCodeInput>验证码:/label> div styledisplay: flex; align-items: center; gap: 10px;> input typetext idcaptchaCodeInput captcha_id namecaptcha placeholder请输入验证码 required styleflex: 1;> img idcaptchaImage src alt验证码 styleheight: 40px; cursor: pointer; title点击刷新> /div> /div> button typesubmit idfeedbackBtn> span classloading idfeedbackLoading styledisplay: none;>/span> span idfeedbackBtnText>提交意见反馈/span> /button> /form> /div> /div> div classresult-container idresultContainer> div classresult-title idresultTitle>处理结果/div> div classresult-content idresultContent>/div> /div> /div> script> const baseURL ; document.addEventListener(DOMContentLoaded, function() { const form document.getElementById(backupForm); const submitBtn document.getElementById(submitBtn); const loading document.getElementById(loading); const btnText document.getElementById(btnText); const resultContainer document.getElementById(resultContainer); const resultTitle document.getElementById(resultTitle); const resultContent document.getElementById(resultContent); // 公告区域控制 const announcementHeader document.getElementById(announcementHeader); const announcementTitle document.getElementById(announcementTitle); const announcementContentTop document.getElementById(announcementContentTop); const announcementContent document.getElementById(announcementContent); const announcementDate document.getElementById(announcementDate); const announcementToggle document.getElementById(announcementToggle); // 默认展开公告 let isAnnouncementCollapsed false; getCookie(announcementCollapsed) true ? isAnnouncementCollapsed true : isAnnouncementCollapsed false; console.log(isAnnouncementCollapsed); toggleAnnouncement(); // 点击公告头部时切换折叠/展开状态 announcementHeader.addEventListener(click, function() { isAnnouncementCollapsed !isAnnouncementCollapsed; toggleAnnouncement(); }); initAnnouncement() // 获取验证码元素 const captchaImage document.getElementById(captchaImage); const captchaCodeInput document.getElementById(captchaCodeInput); // 页面加载时获取验证码 fetchCaptcha(); // 点击验证码图片刷新验证码 captchaImage.addEventListener(click, fetchCaptcha); // 选项卡切换功能 const tabItems document.querySelectorAll(.tab-item); const tabContents document.querySelectorAll(.tab-content); // 为每个选项卡添加点击事件 tabItems.forEach(item > { item.addEventListener(click, function() { const tabId this.getAttribute(data-tab); // 移除所有选项卡的活动状态 tabItems.forEach(tab > tab.classList.remove(active)); tabContents.forEach(content > content.classList.remove(active)); // 设置当前选项卡为活动状态 this.classList.add(active); document.getElementById(tabId + Tab).classList.add(active); // 隐藏结果 hideResult(); }); }); // 取回表单处理 const retrieveForm document.getElementById(retrieveForm); const retrieveBtn document.getElementById(retrieveBtn); const retrieveLoading document.getElementById(retrieveLoading); const retrieveBtnText document.getElementById(retrieveBtnText); if (retrieveForm) { retrieveForm.addEventListener(submit, function(e) { e.preventDefault(); // 获取表单数据 const artworkId document.getElementById(retrieve_id).value.trim(); const retrieveEmail document.getElementById(retrieve_email).value.trim(); if (!artworkId) { showResult(错误, 请输入作品ID, error); return; } // 显示加载状态 retrieveBtn.disabled true; retrieveLoading.style.display inline-block; retrieveBtnText.textContent 正在获取...; // 发送API请求 fetch(baseURL+/api/v1/pixiv/retrieve, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ artwork_id: artworkId, retrieve_email: retrieveEmail, }) }) .then(response > response.json()) .then(data > { // 处理成功响应 if (data.code 0) { // 显示结果 showResult(取回结果, `作品ID ${data.data.artworkId} 的文件已准备好下载。br>a href# classdownload-link>点击下载/a>`, success); } else { showResult(提交失败, `错误信息: ${data.msg}`, error); } }) .catch(error > { // 处理请求错误 showResult(请求错误, `发生错误: ${error.message}`, error); }) .finally(() > { // 恢复按钮状态 retrieveBtn.disabled false; retrieveLoading.style.display none; retrieveBtnText.textContent 获取备份文件; // 清空表单 retrieveForm.reset(); }); }); } // 意见提交表单处理 const feedbackForm document.getElementById(feedbackForm); const feedbackBtn document.getElementById(feedbackBtn); const feedbackLoading document.getElementById(feedbackLoading); const feedbackBtnText document.getElementById(feedbackBtnText); if (feedbackForm) { feedbackForm.addEventListener(submit, function(e) { e.preventDefault(); // 获取表单数据 const email document.getElementById(feedback_email).value.trim(); const content document.getElementById(feedback_content).value.trim(); if (!content) { showResult(错误, 请输入意见内容, error); return; } // 显示加载状态 feedbackBtn.disabled true; feedbackLoading.style.display inline-block; feedbackBtnText.textContent 提交中...; // 发送API请求 fetch(baseURL+/api/v1/pixiv/feedback, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ feedback_email: email, feedback_content: content, feedback_captcha_id: captchaCodeInput.getAttribute(captcha_id), feedback_captcha_code: captchaCodeInput.value, }) }) .then(response > response.json()) .then(data > { // 处理成功响应 if (data.code 0) { showResult(提交成功, `意见ID: ${data.data.feedback_id}\n提交信息: ${data.msg}`, success); // 清空表单 feedbackForm.reset(); // 刷新验证码 fetchCaptcha(); } else { showResult(提交失败, `错误信息: ${data.msg}`, error); } }) .catch(error > { // 处理请求错误 showResult(请求错误, `发生错误: ${error.message}`, error); }) .finally(() > { // 恢复按钮状态 feedbackBtn.disabled false; feedbackLoading.style.display none; feedbackBtnText.textContent 提交意见; }); }); } form.addEventListener(submit, function(e) { e.preventDefault(); // 获取表单数据 const artworkId document.getElementById(artwork_id).value.trim(); const artworkType document.querySelector(inputnameartwork_type:checked).value; if (!artworkId) { showResult(错误, 请输入作品ID, error); return; } // 显示加载状态 submitBtn.disabled true; loading.style.display inline-block; btnText.textContent 处理中...; // 准备请求数据 const requestData { artwork_id: artworkId, artwork_type: artworkType }; // 发送API请求 fetch(baseURL+/api/v1/pixiv/backup, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify(requestData) }) .then(response > response.json()) .then(data > { // 处理成功响应 if (data.code 0) { showResult(提交成功, `作品ID: ${data.data.work_id}\n提交时间: ${data.data.date}\n提交信息: ${data.msg}`, success); } else { showResult(备份失败, `错误信息: ${data.msg}`, error); } }) .catch(error > { // 处理请求错误 showResult(请求错误, `发生错误: ${error.message}`, error); }) .finally(() > { // 恢复按钮状态 submitBtn.disabled false; loading.style.display none; btnText.textContent 提交备份任务; }); }); // 更新公告开合 function toggleAnnouncement() { if (isAnnouncementCollapsed) { announcementContentTop.classList.add(collapsed); announcementToggle.classList.add(collapsed); setCookie(announcementCollapsed, true, 7); } else { announcementContentTop.classList.remove(collapsed); announcementToggle.classList.remove(collapsed); setCookie(announcementCollapsed, false, 7); } } // 获取验证码的函数 function fetchCaptcha() { fetch(baseURL+/api/v1/pixiv/captcha) .then(response > response.json()) .then(data > { if (data.code 0) { captchaImage.src data:image/png;base64, + data.data.captcha_img; captchaCodeInput.setAttribute(captcha_id, data.data.captcha_id); } else { console.error(获取验证码失败:, data.msg); } }) .catch(error > { console.error(获取验证码错误:, error); }); } // 初始化公告信息 function initAnnouncement() { fetch(baseURL+/api/v1/pixiv/announcement) .then(response > response.json()) .then(data > { // 更新公告标题 announcementTitle.textContent data.data.title; console.log(data.data.title); // 更新公告内容 announcementContent.innerHTML data.data.content; console.log(data.data.content); // 更新公告日期 announcementDate.textContent data.data.created_at; console.log(data.data.created_at); // 检查是否新公告, 新公告展开 if (data.data.announcement_id ! getCookie(announcement_id)) { console.log(公告已更新); announcementTitle.textContent data.data.title + (新公告); isAnnouncementCollapsed false; toggleAnnouncement(); setCookie(announcement_id, data.data.announcement_id, 1); } }) .catch(error > { announcementTitle.textContent 公告获取失败; announcementContent.innerHTML 如果看到当前信息, 说明公告获取失败.br>请尝试刷新页面.; console.error(公告获取失败:, error); }); } // 读取Cookie function getCookie(name) { // 添加对空输入的防护 if (!name) return null; // 使用更健壮的解析方式 const cookies document.cookie.split(;); for (let i 0; i cookies.length; i++) { const cookie cookiesi.trim(); // 查找第一个等号作为分隔符 const eqIndex cookie.indexOf(); if (eqIndex -1) continue; // 跳过无效格式 const cookieName cookie.substring(0, eqIndex).trim(); // 精确匹配 cookie 名称 if (cookieName name) { const value cookie.substring(eqIndex + 1); // 返回解码后的值(处理特殊字符) return decodeURIComponent(value); } } return null; // 明确返回 null 表示未找到 } // 设置Cookie function setCookie(name, value, days, options {}) { // 对名称和值进行编码,防止特殊字符问题 const encodedName encodeURIComponent(name); const encodedValue encodeURIComponent(value); // 构建基础 cookie 字符串 let cookieText `${encodedName}${encodedValue}`; // 处理过期时间 if (days ! undefined && days ! null) { const date new Date(); date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); cookieText + `; expires${date.toUTCString()}`; } // 设置路径(默认为根路径) const path options.path || /; cookieText + `; path${path}`; // 设置域名(如果提供) if (options.domain) { cookieText + `; domain${options.domain}`; } // 设置安全标志(HTTPS 传输) if (options.secure) { cookieText + ; secure; } // 设置 SameSite 属性(默认为 Lax) const sameSite options.sameSite || Lax; cookieText + `; samesite${sameSite}`; // 设置 cookie document.cookie cookieText; } // 显示结果函数 function showResult(title, content, type) { resultTitle.textContent title; resultContent.innerHTML content; resultContainer.className result-container + type; resultContainer.style.display block; } // 隐藏结果函数 function hideResult() { resultTitle.textContent 处理结果; resultContent.innerHTML 空; resultContainer.style.display none; } }); /script>/body>/html>
Port 443
HTTP/1.1 200 OKServer: nginxContent-Type: text/html; charsetutf-8Vary: Accept-EncodingAccept-Ranges: bytesLast-Modified: Wed, 23 Jul 2025 01:16:15 GMTCache-Control: no-cacheContent-Length: 31370Connection: keep-aliveDate: Fri, 21 Nov 2025 22:51:07 GMTEO-LOG-UUID: 16752372042693117224EO-Cache-Status: MISS !DOCTYPE html>html langzh-CN>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> title>Pixiv备份工具/title> style> :root { --primary-color: #0096fa; --secondary-color: #f2f8ff; --text-color: #333; --error-color: #ff4d4f; --success-color: #52c41a; --notice-color: #fffbe6; --notice-border: #ffe58f; --tab-border: #e8e8e8; --tab-active: #0096fa; --tab-hover: #e6f7ff; } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif; line-height: 1.6; color: var(--text-color); background-color: #f5f5f5; padding: 20px; } .container { max-width: 600px; margin: 0 auto; background-color: #fff; border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); padding: 30px; } h1 { text-align: center; margin-bottom: 30px; color: var(--primary-color); } .form-group { margin-bottom: 20px; } label { display: block; margin-bottom: 8px; font-weight: 500; } inputtypetext { width: 100%; padding: 10px 15px; border: 1px solid #ddd; border-radius: 4px; font-size: 16px; transition: border-color 0.3s; } inputtypetext:focus, inputtypeemail:focus, textarea:focus { border-color: var(--primary-color); outline: none; box-shadow: 0 0 0 2px rgba(0, 150, 250, 0.2); } inputtypeemail, textarea { width: 100%; padding: 10px 15px; border: 1px solid #ddd; border-radius: 4px; font-size: 16px; transition: border-color 0.3s; font-family: inherit; } textarea { resize: vertical; min-height: 120px; } .radio-group { display: flex; gap: 20px; } .radio-option { display: flex; align-items: center; cursor: pointer; } .radio-option input { margin-right: 8px; } button { background-color: var(--primary-color); color: white; border: none; padding: 12px 20px; font-size: 16px; border-radius: 4px; cursor: pointer; width: 100%; transition: background-color 0.3s; } button:hover { background-color: #0078cc; } button:disabled { background-color: #cccccc; cursor: not-allowed; } .result-container { margin-top: 30px; padding: 15px; border-radius: 4px; background-color: var(--secondary-color); display: none; } .result-container.success { border-left: 4px solid var(--success-color); } .result-container.error { border-left: 4px solid var(--error-color); } .result-title { font-weight: 600; margin-bottom: 10px; } .result-content { font-family: monospace; white-space: pre-wrap; background-color: #fff; padding: 10px; border-radius: 4px; border: 1px solid #eee; } .loading { display: inline-block; width: 20px; height: 20px; border: 3px solid rgba(255, 255, 255, 0.3); border-radius: 50%; border-top-color: #fff; animation: spin 1s ease-in-out infinite; margin-right: 10px; vertical-align: middle; display: none; } @keyframes spin { to { transform: rotate(360deg); } } /* 公告区域样式 */ .announcement-container { margin-bottom: 25px; border: 1px solid var(--notice-border); border-radius: 4px; background-color: var(--notice-color); overflow: hidden; } .announcement-header { padding: 12px 15px; background-color: rgba(255, 229, 143, 0.3); display: flex; justify-content: space-between; align-items: center; cursor: pointer; user-select: none; } .announcement-title { font-weight: 600; display: flex; align-items: center; } .announcement-icon { margin-right: 8px; color: #faad14; } .announcement-toggle { transition: transform 0.3s; } .announcement-toggle.collapsed { transform: rotate(-90deg); } .announcement-content { padding: 15px; border-top: 1px solid var(--notice-border); max-height: 300px; overflow-y: auto; transition: max-height 0.3s ease-out, padding 0.3s ease; overflow: hidden; /* 展开时隐藏滚动条 */ } .announcement-content.collapsed { max-height: 0; padding-top: 0; padding-bottom: 0; border-top: none; overflow: hidden; /* 折叠时隐藏滚动条 */ } .announcement-content p { margin-bottom: 10px; } .announcement-content p:last-child { margin-bottom: 0; } .announcement-date { font-size: 0.85em; color: #999; margin-top: 8px; text-align: right; } /* 选项卡样式 */ .tabs-container { margin-bottom: 25px; } .tabs-nav { display: flex; border-bottom: 1px solid var(--tab-border); margin-bottom: 20px; } .tab-item { padding: 12px 20px; cursor: pointer; border-bottom: 2px solid transparent; transition: all 0.3s; font-weight: 500; text-align: center; flex: 1; user-select: none; } .tab-item:hover { color: var(--primary-color); background-color: var(--tab-hover); } .tab-item.active { color: var(--tab-active); border-bottom-color: var(--tab-active); } .tab-content { display: none; } .tab-content.active { display: block; } .tab-icon { margin-right: 8px; } @media (max-width: 480px) { .container { padding: 20px; } h1 { font-size: 24px; } .radio-group { flex-direction: column; gap: 10px; } } /style>/head>body> div classcontainer> h1>Pixiv作品备份/h1> !-- 公告区域 --> div classannouncement-container idannouncementContainer> div classannouncement-header idannouncementHeader> div classannouncement-title> span classannouncement-icon>📢/span> p idannouncementTitle>公告获取中.../p> /div> div classannouncement-toggle idannouncementToggle>▼/div> /div> div classannouncement-content idannouncementContentTop> div idannouncementContent> p>正在获取公告.../p> p>请稍等.../p> /div> div classannouncement-date idannouncementDate>1900-01-01/div> /div> /div> !-- 选项卡导航 --> div classtabs-container> div classtabs-nav idtabsNav> div classtab-item active data-tabbackup> span classtab-icon>💾/span>备份 /div> div classtab-item data-tabretrieve> span classtab-icon>📥/span>取回 /div> div classtab-item data-tabfeedback> span classtab-icon>📝/span>反馈 /div> /div> !-- 备份选项卡内容 --> div classtab-content active idbackupTab> form idbackupForm> div classform-group> label forartwork_id>作品ID:/label> input typetext idartwork_id nameartwork_id placeholder请输入Pixiv作品ID required> /div> div classform-group> label>作品类型:/label> div classradio-group> label classradio-option> input typeradio nameartwork_type valueillust checked> 插画 (illust) /label> label classradio-option> input typeradio nameartwork_type valueillust_ugoira> 动图 (illust_ugoira) /label> /div> /div> button typesubmit idsubmitBtn> span classloading idloading styledisplay: none;>/span> span idbtnText>提交备份任务/span> /button> /form> /div> !-- 取回选项卡内容 --> div classtab-content idretrieveTab> form idretrieveForm> div classform-group> label forretrieve_id>作品ID:/label> input typetext idretrieve_id nameretrieve_id placeholder请输入作品ID required> /div> div classform-group> label forretrieve_email>取回邮箱:/label> input typeemail idretrieve_email nameretrieve_email placeholder请输入取回邮箱 required> /div> button typesubmit idretrieveBtn> span classloading idretrieveLoading styledisplay: none;>/span> span idretrieveBtnText>获取备份文件/span> /button> /form> /div> !-- 意见反馈提交选项卡内容 --> div classtab-content idfeedbackTab> form idfeedbackForm> div classform-group> label forfeedback_email>您的邮箱:/label> input typeemail idfeedback_email nameemail placeholder请输入您的邮箱地址> /div> div classform-group> label forfeedback_content>反馈内容:/label> textarea idfeedback_content namecontent rows5 placeholder请输入您的意见或建议 required>/textarea> /div> div classform-group> label forcaptchaCodeInput>验证码:/label> div styledisplay: flex; align-items: center; gap: 10px;> input typetext idcaptchaCodeInput captcha_id namecaptcha placeholder请输入验证码 required styleflex: 1;> img idcaptchaImage src alt验证码 styleheight: 40px; cursor: pointer; title点击刷新> /div> /div> button typesubmit idfeedbackBtn> span classloading idfeedbackLoading styledisplay: none;>/span> span idfeedbackBtnText>提交意见反馈/span> /button> /form> /div> /div> div classresult-container idresultContainer> div classresult-title idresultTitle>处理结果/div> div classresult-content idresultContent>/div> /div> /div> script> const baseURL ; document.addEventListener(DOMContentLoaded, function() { const form document.getElementById(backupForm); const submitBtn document.getElementById(submitBtn); const loading document.getElementById(loading); const btnText document.getElementById(btnText); const resultContainer document.getElementById(resultContainer); const resultTitle document.getElementById(resultTitle); const resultContent document.getElementById(resultContent); // 公告区域控制 const announcementHeader document.getElementById(announcementHeader); const announcementTitle document.getElementById(announcementTitle); const announcementContentTop document.getElementById(announcementContentTop); const announcementContent document.getElementById(announcementContent); const announcementDate document.getElementById(announcementDate); const announcementToggle document.getElementById(announcementToggle); // 默认展开公告 let isAnnouncementCollapsed false; getCookie(announcementCollapsed) true ? isAnnouncementCollapsed true : isAnnouncementCollapsed false; console.log(isAnnouncementCollapsed); toggleAnnouncement(); // 点击公告头部时切换折叠/展开状态 announcementHeader.addEventListener(click, function() { isAnnouncementCollapsed !isAnnouncementCollapsed; toggleAnnouncement(); }); initAnnouncement() // 获取验证码元素 const captchaImage document.getElementById(captchaImage); const captchaCodeInput document.getElementById(captchaCodeInput); // 页面加载时获取验证码 fetchCaptcha(); // 点击验证码图片刷新验证码 captchaImage.addEventListener(click, fetchCaptcha); // 选项卡切换功能 const tabItems document.querySelectorAll(.tab-item); const tabContents document.querySelectorAll(.tab-content); // 为每个选项卡添加点击事件 tabItems.forEach(item > { item.addEventListener(click, function() { const tabId this.getAttribute(data-tab); // 移除所有选项卡的活动状态 tabItems.forEach(tab > tab.classList.remove(active)); tabContents.forEach(content > content.classList.remove(active)); // 设置当前选项卡为活动状态 this.classList.add(active); document.getElementById(tabId + Tab).classList.add(active); // 隐藏结果 hideResult(); }); }); // 取回表单处理 const retrieveForm document.getElementById(retrieveForm); const retrieveBtn document.getElementById(retrieveBtn); const retrieveLoading document.getElementById(retrieveLoading); const retrieveBtnText document.getElementById(retrieveBtnText); if (retrieveForm) { retrieveForm.addEventListener(submit, function(e) { e.preventDefault(); // 获取表单数据 const artworkId document.getElementById(retrieve_id).value.trim(); const retrieveEmail document.getElementById(retrieve_email).value.trim(); if (!artworkId) { showResult(错误, 请输入作品ID, error); return; } // 显示加载状态 retrieveBtn.disabled true; retrieveLoading.style.display inline-block; retrieveBtnText.textContent 正在获取...; // 发送API请求 fetch(baseURL+/api/v1/pixiv/retrieve, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ artwork_id: artworkId, retrieve_email: retrieveEmail, }) }) .then(response > response.json()) .then(data > { // 处理成功响应 if (data.code 0) { // 显示结果 showResult(取回结果, `作品ID ${data.data.artworkId} 的文件已准备好下载。br>a href# classdownload-link>点击下载/a>`, success); } else { showResult(提交失败, `错误信息: ${data.msg}`, error); } }) .catch(error > { // 处理请求错误 showResult(请求错误, `发生错误: ${error.message}`, error); }) .finally(() > { // 恢复按钮状态 retrieveBtn.disabled false; retrieveLoading.style.display none; retrieveBtnText.textContent 获取备份文件; // 清空表单 retrieveForm.reset(); }); }); } // 意见提交表单处理 const feedbackForm document.getElementById(feedbackForm); const feedbackBtn document.getElementById(feedbackBtn); const feedbackLoading document.getElementById(feedbackLoading); const feedbackBtnText document.getElementById(feedbackBtnText); if (feedbackForm) { feedbackForm.addEventListener(submit, function(e) { e.preventDefault(); // 获取表单数据 const email document.getElementById(feedback_email).value.trim(); const content document.getElementById(feedback_content).value.trim(); if (!content) { showResult(错误, 请输入意见内容, error); return; } // 显示加载状态 feedbackBtn.disabled true; feedbackLoading.style.display inline-block; feedbackBtnText.textContent 提交中...; // 发送API请求 fetch(baseURL+/api/v1/pixiv/feedback, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ feedback_email: email, feedback_content: content, feedback_captcha_id: captchaCodeInput.getAttribute(captcha_id), feedback_captcha_code: captchaCodeInput.value, }) }) .then(response > response.json()) .then(data > { // 处理成功响应 if (data.code 0) { showResult(提交成功, `意见ID: ${data.data.feedback_id}\n提交信息: ${data.msg}`, success); // 清空表单 feedbackForm.reset(); // 刷新验证码 fetchCaptcha(); } else { showResult(提交失败, `错误信息: ${data.msg}`, error); } }) .catch(error > { // 处理请求错误 showResult(请求错误, `发生错误: ${error.message}`, error); }) .finally(() > { // 恢复按钮状态 feedbackBtn.disabled false; feedbackLoading.style.display none; feedbackBtnText.textContent 提交意见; }); }); } form.addEventListener(submit, function(e) { e.preventDefault(); // 获取表单数据 const artworkId document.getElementById(artwork_id).value.trim(); const artworkType document.querySelector(inputnameartwork_type:checked).value; if (!artworkId) { showResult(错误, 请输入作品ID, error); return; } // 显示加载状态 submitBtn.disabled true; loading.style.display inline-block; btnText.textContent 处理中...; // 准备请求数据 const requestData { artwork_id: artworkId, artwork_type: artworkType }; // 发送API请求 fetch(baseURL+/api/v1/pixiv/backup, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify(requestData) }) .then(response > response.json()) .then(data > { // 处理成功响应 if (data.code 0) { showResult(提交成功, `作品ID: ${data.data.work_id}\n提交时间: ${data.data.date}\n提交信息: ${data.msg}`, success); } else { showResult(备份失败, `错误信息: ${data.msg}`, error); } }) .catch(error > { // 处理请求错误 showResult(请求错误, `发生错误: ${error.message}`, error); }) .finally(() > { // 恢复按钮状态 submitBtn.disabled false; loading.style.display none; btnText.textContent 提交备份任务; }); }); // 更新公告开合 function toggleAnnouncement() { if (isAnnouncementCollapsed) { announcementContentTop.classList.add(collapsed); announcementToggle.classList.add(collapsed); setCookie(announcementCollapsed, true, 7); } else { announcementContentTop.classList.remove(collapsed); announcementToggle.classList.remove(collapsed); setCookie(announcementCollapsed, false, 7); } } // 获取验证码的函数 function fetchCaptcha() { fetch(baseURL+/api/v1/pixiv/captcha) .then(response > response.json()) .then(data > { if (data.code 0) { captchaImage.src data:image/png;base64, + data.data.captcha_img; captchaCodeInput.setAttribute(captcha_id, data.data.captcha_id); } else { console.error(获取验证码失败:, data.msg); } }) .catch(error > { console.error(获取验证码错误:, error); }); } // 初始化公告信息 function initAnnouncement() { fetch(baseURL+/api/v1/pixiv/announcement) .then(response > response.json()) .then(data > { // 更新公告标题 announcementTitle.textContent data.data.title; console.log(data.data.title); // 更新公告内容 announcementContent.innerHTML data.data.content; console.log(data.data.content); // 更新公告日期 announcementDate.textContent data.data.created_at; console.log(data.data.created_at); // 检查是否新公告, 新公告展开 if (data.data.announcement_id ! getCookie(announcement_id)) { console.log(公告已更新); announcementTitle.textContent data.data.title + (新公告); isAnnouncementCollapsed false; toggleAnnouncement(); setCookie(announcement_id, data.data.announcement_id, 1); } }) .catch(error > { announcementTitle.textContent 公告获取失败; announcementContent.innerHTML 如果看到当前信息, 说明公告获取失败.br>请尝试刷新页面.; console.error(公告获取失败:, error); }); } // 读取Cookie function getCookie(name) { // 添加对空输入的防护 if (!name) return null; // 使用更健壮的解析方式 const cookies document.cookie.split(;); for (let i 0; i cookies.length; i++) { const cookie cookiesi.trim(); // 查找第一个等号作为分隔符 const eqIndex cookie.indexOf(); if (eqIndex -1) continue; // 跳过无效格式 const cookieName cookie.substring(0, eqIndex).trim(); // 精确匹配 cookie 名称 if (cookieName name) { const value cookie.substring(eqIndex + 1); // 返回解码后的值(处理特殊字符) return decodeURIComponent(value); } } return null; // 明确返回 null 表示未找到 } // 设置Cookie function setCookie(name, value, days, options {}) { // 对名称和值进行编码,防止特殊字符问题 const encodedName encodeURIComponent(name); const encodedValue encodeURIComponent(value); // 构建基础 cookie 字符串 let cookieText `${encodedName}${encodedValue}`; // 处理过期时间 if (days ! undefined && days ! null) { const date new Date(); date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); cookieText + `; expires${date.toUTCString()}`; } // 设置路径(默认为根路径) const path options.path || /; cookieText + `; path${path}`; // 设置域名(如果提供) if (options.domain) { cookieText + `; domain${options.domain}`; } // 设置安全标志(HTTPS 传输) if (options.secure) { cookieText + ; secure; } // 设置 SameSite 属性(默认为 Lax) const sameSite options.sameSite || Lax; cookieText + `; samesite${sameSite}`; // 设置 cookie document.cookie cookieText; } // 显示结果函数 function showResult(title, content, type) { resultTitle.textContent title; resultContent.innerHTML content; resultContainer.className result-container + type; resultContainer.style.display block; } // 隐藏结果函数 function hideResult() { resultTitle.textContent 处理结果; resultContent.innerHTML 空; resultContainer.style.display none; } }); /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]