网站TDK信息快速获取API上线

针对网站TDK信息快速获取API新功能的推出,广大开发者、SEO从业者及网站管理员们表现出极大的兴趣,同时也产生了一系列具体的使用疑问。为了帮助大家高效、准确地使用此API,我们特此整理并深度解答用户最为关心的十大高频问题,提供详尽的解决方案与实操步骤指南。


**问题一:这个TDK信息获取API具体能获取哪些数据?与手动查看有何本质区别?** **深度解答:** 本API旨在提供一种程序化、批量化且高时效性的网站TDK(即Title标题、Description描述、Keywords关键词)信息提取方案。它不仅返回基础的TDK文本内容,更集成了智能解析功能。 **核心获取数据包括:** 1. **标准TDK三要素**:精准抓取位于HTML头部、<meta name="description">及<meta name="keywords">标签内的原始内容。 2. **扩展元信息**:可选择性获取如Open Graph协议标签(og:title, og:description等)、Twitter Card数据、Canonical URL(规范链接)等,为社交媒体分析和SEO审计提供支持。 3. **页面状态与结构信息**:返回HTTP状态码、最终请求URL(处理重跳转后)、内容编码格式以及页面概要大小,辅助判断页面可访问性与完整性。 4. **智能分析数据**(进阶功能):例如,当页面缺失官方Description时,API可自动从正文中提取一段通顺的文本作为描述建议;或分析Title的长度是否符合搜索引擎的显示要求。 **与手动查看的本质区别在于:** * **效率**:可瞬间完成成百上千个页面的TDK信息收集,而人工逐个查看几乎不可能。 * **一致性**:程序化获取确保数据格式统一,避免人工复制粘贴可能出现的疏漏或格式错乱。 * **动态监控**:可定期调用API,监控TDK内容的变更情况,及时发现未授权的改动或更新迭代效果。 <hr> **问题二:我应该如何快速开始调用这个API?请给出从零开始的具体步骤。** **实操步骤详解:** 1. **获取访问凭证**:首先,您需要在相关平台完成注册,并于开发者中心创建一个应用项目,系统将为您生成唯一的API Key(密钥)和Secret(密钥串)。请妥善保管,如同保管您的账户密码。 2. **阅读官方文档**:强烈建议您花10分钟浏览核心文档,重点了解“快速入门”、“认证方式”(通常为Bearer Token或简单密钥)、“请求端点(Endpoint)”和“返回示例”这几个部分。 3. **构造您的第一个请求**:您可以使用任何熟悉的工具(如cURL、Postman或直接编写代码)。以下是一个通用的cURL命令示例: bash curl -X GET 'https://api.yourservice.com/v1/tdk?url=https://www.example.com' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Accept: application/json' 请务必将YOUR_API_KEY和查询的URL替换为您自己的信息。 4. **解析响应数据**:API通常会返回一个JSON格式的数据包。您需要根据文档说明,解析其中的title、description、keywords等字段。建议初次使用时,打印或查看完整的返回结果以熟悉数据结构。 <img class='ue-image' width='100%' src='http://999tour.cn/assets/img/random/24.jpg'> <hr> **问题三:在调用API时,如何处理可能遇到的“429请求频率超限”或“403权限被拒绝”等错误?** **解决方案与步骤:** * **针对429错误(请求过快):** * **原因**:这是系统的流量控制保护,防止滥用。 * **解决**:首先,检查您的调用频率是否超过了套餐限制。其次,在代码逻辑中实现“请求间隔”,例如在每次请求后添加一个短暂的延迟(如200-500毫秒)。对于批量处理,建议使用队列异步处理,而非高频同步循环调用。 * **针对403错误(禁止访问):** * **原因**:API密钥无效、过期、或未被授权调用此接口;或目标URL被列为禁止抓取的清单中。 * **解决**:第一步,复核您的API Key是否正确无误,且未在请求头中拼写错误。第二步,确认该密钥对应的应用是否已启用且未欠费。第三步,查看API文档,确认您调用的端点(Endpoint)是否需要额外的权限申请。第四步,检查目标URL是否为可公开访问的合法网页。 <hr> **问题四:该API能否处理需要登录后才能访问的页面,或者JavaScript动态渲染生成的TDK内容?** **深度解答:** 这是一个技术边界问题。标准的TDK获取API基于HTTP/HTTPS协议直接抓取原始HTML代码,因此: * **对于需登录页面**:**通常不能**。因为API调用不携带您的网站会话Cookie或登录态,服务器会返回登录页面或错误提示的HTML,导致无法获取到目标TDK。 * **对于JavaScript动态渲染内容**:**大部分情况下不能直接获取**。许多现代前端框架(如React, Vue, Angular)在初始HTML中可能只包含空模板或占位符,TDK内容由客户端JS执行后生成。标准API抓取的是未执行JS的初始HTML。 **替代或进阶解决方案:** 1. **使用无头浏览器(Headless Browser)服务**:部分高级API服务提供了无头浏览器渲染选项(参数可能为&render=true或&execution=js),这会启动一个虚拟浏览器执行页面JS,但调用成本和耗时将显著增加。 2. **预渲染(Prerender)方案**:如果网站是您的自有站点,考虑对重要页面实施服务端渲染(SSR)或静态化,确保搜索引擎和API能直接获取到完整的TDK。 <hr> **问题五:批量查询大量URL时,如何优化调用流程以提升效率并保证稳定性?** **实操优化策略:** 1. **采用异步并发,而非串行**:不要用一个接一个的循环。利用编程语言的并发特性(如Python的asyncio/aiohttp、Node.js的async/await、Java的CompletableFuture)同时发起多个请求。请注意,并发数需根据您的套餐限制和服务器性能合理设置,通常建议从5-10开始测试。 2. **实现健壮的错误处理与重试机制**:网络请求可能失败。编写代码时,必须对每个请求包裹try-catch,并对可重试的错误(如超时、5xx服务器错误)设置有限次数的重试(例如最多3次),重试之间应有指数退避的延迟。 3. **利用批处理端点(如果提供)**:查阅文档,看API是否提供专用的批量查询端点(例如 POST /v1/tdk/batch),它允许在一个请求体中提交最多100个URL。这能极大减少网络握手开销和总请求数。 4. **结果缓存**:对于不常变动的TDK信息,将结果缓存在本地数据库或缓存系统(如Redis)中,并设定合理的过期时间(如24小时),后续请求优先读取缓存,避免重复调用API。 <hr> **问题六:API返回的TDK信息中,出现了乱码或编码错误,应如何排查和处理?** **解决方案:** 1. **检查请求与响应的编码头**:确保您的请求代码能够正确读取HTTP响应头中的Content-Type字段,特别是charset部分(如charset=utf-8、charset=gb2312)。应使用该编码解码响应体。 2. **统一内部字符编码**:在您的处理程序中,将所有文本数据统一转换为一种内部编码(推荐UTF-8)进行处理和存储,避免多编码混杂导致乱码。 3. **设置API请求参数**:部分API提供encoding参数,允许您指定期望的返回编码格式。如果目标网站编码特殊(如GBK),可尝试通过此参数进行指定。 4. **手动修正与反馈**:对于个别顽固乱码,可以手动访问该网页,查看其源码确认实际编码,然后在您的代码中做特殊处理。同时,可将此问题反馈给API服务商,他们可能在后台升级编码自动检测算法。 <hr> **问题七:如何利用此API构建一个定期监测竞争对手网站TDK变动的自动化监控系统?** **分步构建指南:** 1. **数据收集层**:建立一个URL池,包含您所有竞争对手的核心页面URL(如首页、分类页、热门产品页)。 2. **定时任务调度**:使用Cron Job、Celery Beat、或云函数定时触发器(如AWS Lambda + CloudWatch Events)来定期执行您的监控脚本。频率可根据需求设定为每日或每周。 3. **调用与存储**:在定时任务中,调用本API获取所有URL的最新TDK数据。将每次获取的结果(包含抓取时间戳)存储到数据库中。建议设计一张历史记录表,便于追踪变化。 4. **差异比对与告警**:每次获取新数据后,与上一次存储的数据进行比对。如果发现title、description或keywords发生任何变动(或超过设定阈值,如Title字符数增减超过5个),立即触发告警。告警方式可以是发送邮件、Slack消息或钉钉通知,内容包含变动前后的具体对比。 5. **可视化仪表盘(可选)**:使用Grafana、Metabase等工具连接您的数据库,创建一个仪表盘,直观展示竞争对手TDK的更新频率、关键词策略变化趋势等。 <hr> **问题八:获取到的Keywords关键词信息,在实际SEO分析中应如何有效利用?** **深度应用方向:** 请注意,由于搜索引擎(尤其是Google)已公开表示不再将meta keywords作为排名信号,对其的分析应侧重于策略洞察,而非直接优化。 1. **洞察竞争对手的主题聚焦**:分析对手在Keywords标签中频繁出现的词根和词组,可以了解他们希望覆盖的核心话题领域和长尾词策略。 2. **发现内容缺口**:对比您与竞争对手的关键词列表,寻找对手关注但您尚未覆盖的关键词主题,这可以作为您内容创作的新方向。 3. **辅助网站结构理解**:结合页面URL和Keywords,可以辅助判断对方网站的内容分类逻辑和信息架构。 4. **历史策略研究**:如果持续监控,可以观察到竞争对手关键词策略的调整轨迹,例如从广泛词转向更精准的长尾词,这反映了其SEO策略的演变。 <hr> **问题九:API调用过程中,对于超时或响应缓慢的网站,是否有优化建议或后备方案?** **处理策略:** 1. **设置合理的超时时间**:在您的HTTP客户端中,务必设置连接超时(Connection Timeout)和读取超时(Read Timeout)。建议初始值分别设为10秒和30秒,可根据实际情况调整。超时后应立即放弃并标记为失败,避免长时间等待阻塞整个批处理任务。 2. **实施降级策略(Fallback)**:对于频繁超时的网站,可以建立一个“降级缓存”。例如,如果本次调用失败,则使用最近一次成功获取的数据(即使它可能不是最新的),并记录一条日志,而不是完全返回空数据。 3. **联系服务商**:确认API服务商本身在全球的节点分布和网络质量。优质的服务商会在多个地区部署服务器,自动选择最优线路访问目标网站。 4. **自行代理轮换(高级)**:对于特定地区或难以访问的网站,部分API服务允许您指定代理服务器(通过请求参数),您可以尝试使用稳定可靠的代理IP来改善连接状况。 <hr> **问题十:除了基础的TDK,我还能结合哪些其他数据或工具,进行更深入的SEO分析?** **扩展分析方案:** API获取的TDK是SEO分析的绝佳起点,结合以下数据和工具,可构建更立体的分析视图: 1. **网站爬虫数据**:使用开源爬虫(如Scrapy)或商业爬虫工具,获取网站的完整链接结构、内链分布、H标签使用情况、图片Alt文本等,与TDK数据交叉分析。 2. **搜索引擎排名(SERP)数据**:通过第三方SERP API(如Ahrefs, SEMrush的API,或更轻量的SerpAPI),查询目标TDK对应的关键词实际排名位置,验证其TDK优化是否有效。 3. **流量分析数据(如有权限)**:结合Google Analytics等网站的流量数据,分析具有不同TDK特征的页面在获取流量、用户 engagement(参与度)上的表现差异,实现数据驱动的TDK优化。 4. **内容质量分析工具**:将API获取的Title和Description输入到AI写作辅助或可读性分析工具中,评估其吸引力、情感倾向和语法质量,获得优化建议。 通过将TDK信息与上述多维度数据关联,您将能从简单的信息收集者,转变为具备深度洞察能力的SEO策略分析师。 </div> <div class="article-actions"> <button class="action-btn like-btn" onclick="likeArticle(18390)"> <i class="fa fa-heart"></i> <span class="like-text">点赞</span> <span class="like-count">0</span> </button> <button class="action-btn share-btn" onclick="openShareModal()"> <i class="fa fa-share-alt"></i> 分享文章 </button> </div> </article> <nav class="article-navigation fade-in" style="animation-delay: 0.2s;"> <div class="nav-item"> <a href="http://999tour.cn/g168z1/9j-18389.html"> <div class="nav-label"><i class="fa fa-chevron-left"></i> 上一篇</div> <div class="nav-title">多平台域名安全批量检测API案例研究</div> </a> </div> <div class="nav-item"> <a href="http://999tour.cn/g168z1/9j-18396.html"> <div class="nav-label">下一篇 <i class="fa fa-chevron-right"></i></div> <div class="nav-title">百度收录API查询教程:实时获取域名收录数</div> </a> </div> </nav> <section class="related-articles fade-in" style="animation-delay: 0.4s;"> <h3 class="related-title"> <i class="fa fa-list"></i> 相关文章 </h3> <ul class="related-list"> <li class="related-item"> <a href="http://999tour.cn/g168z1/9j-18391.html"> 百度收录查询API:如何实时获取域名收录数? </a> <div class="related-meta"> <span><i class="fa fa-calendar"></i> 2026-09-23</span> <span><i class="fa fa-eye"></i> 0 次浏览</span> </div> </li> <li class="related-item"> <a href="http://999tour.cn/g168z1/9j-18392.html"> 百度收录API-域名收录实时查询与SEO </a> <div class="related-meta"> <span><i class="fa fa-calendar"></i> 2026-09-23</span> <span><i class="fa fa-eye"></i> 0 次浏览</span> </div> </li> <li class="related-item"> <a href="http://999tour.cn/g168z1/9j-18393.html"> 百度收录查询API使用步骤:实时获取域名SEO数据 </a> <div class="related-meta"> <span><i class="fa fa-calendar"></i> 2026-09-23</span> <span><i class="fa fa-eye"></i> 0 次浏览</span> </div> </li> <li class="related-item"> <a href="http://999tour.cn/g168z1/9j-18394.html"> 百度收录秒查API-实时收录飙升SEO利器 </a> <div class="related-meta"> <span><i class="fa fa-calendar"></i> 2026-09-23</span> <span><i class="fa fa-eye"></i> 0 次浏览</span> </div> </li> <li class="related-item"> <a href="http://999tour.cn/g168z1/9j-18395.html"> 百度收录查询API:实时域名收录数量SEO工具 </a> <div class="related-meta"> <span><i class="fa fa-calendar"></i> 2026-09-23</span> <span><i class="fa fa-eye"></i> 0 次浏览</span> </div> </li> </ul> </section> </div> <div class="share-modal" id="shareModal"> <div class="share-modal-overlay" onclick="closeShareModal()"></div> <div class="share-modal-content"> <div class="share-modal-header"> <h3><i class="fa fa-share-alt"></i> 分享文章</h3> <button class="close-btn" onclick="closeShareModal()"> <i class="fa fa-times"></i> </button> </div> <div class="share-modal-body"> <div class="share-options"> <div class="share-option" onclick="shareToWeibo()"> <div class="share-icon weibo"> <i class="fa fa-weibo"></i> </div> <span>微博</span> </div> <div class="share-option" onclick="shareToQQ()"> <div class="share-icon qq"> <i class="fa fa-qq"></i> </div> <span>QQ</span> </div> <div class="share-option" onclick="shareToQzone()"> <div class="share-icon qzone"> <i class="fa fa-star"></i> </div> <span>QQ空间</span> </div> <div class="share-option" onclick="copyLink()"> <div class="share-icon copy"> <i class="fa fa-link"></i> </div> <span>复制链接</span> </div> </div> <div class="share-link-box"> <label>文章链接:</label> <div class="link-input-group"> <input type="text" id="articleLink" value="http://999tour.cn/g168z1/9j-18390.html" readonly> <button onclick="copyLinkFromInput()"> <i class="fa fa-copy"></i> 复制 </button> </div> </div> </div> </div> </div> <div class="share-toast" id="shareToast">操作成功</div> <script> function likeArticle(articleId) { const likeBtn = document.querySelector('.like-btn'); const likeCount = document.querySelector('.like-count'); const likeText = document.querySelector('.like-text'); if (localStorage.getItem('liked_' + articleId)) { showToast('您已经点过赞了'); return; } likeBtn.classList.add('animate'); setTimeout(() => likeBtn.classList.remove('animate'), 300); $.post('http://999tour.cn/ajax.php?act=dianzan', { type:2, id:'18390', }, function(data) { if (data.code ==200) { likeBtn.classList.add('liked'); likeText.textContent = '已赞'; likeCount.textContent = parseInt(likeCount.textContent) + 1; localStorage.setItem('liked_' + articleId, '1'); showToast('点赞成功'); } else { showToast(data.msg || '点赞失败'); } }, 'json').fail(function() { showToast('网络错误,请重试'); }); } function openShareModal() { document.getElementById('shareModal').classList.add('show'); document.body.style.overflow = 'hidden'; } function closeShareModal() { document.getElementById('shareModal').classList.remove('show'); document.body.style.overflow = ''; } function shareToWeibo() { const title = encodeURIComponent(document.title); const url = encodeURIComponent(window.location.href); window.open(`https://service.weibo.com/share/share.php?title=${title}&url=${url}`, '_blank', 'width=600,height=400'); closeShareModal(); } function shareToQQ() { const title = encodeURIComponent(document.title); const url = encodeURIComponent(window.location.href); const desc = encodeURIComponent('分享一篇精彩文章'); const summary = encodeURIComponent('来自本站的优质内容'); const shareUrl = `https://connect.qq.com/widget/shareqq/index.html?url=${url}&title=${title}&desc=${desc}&summary=${summary}`; window.open(shareUrl, '_blank', 'width=600,height=400'); closeShareModal(); } function shareToQzone() { const title = encodeURIComponent(document.title); const url = encodeURIComponent(window.location.href); const desc = encodeURIComponent('分享一篇精彩文章'); const shareUrl = `https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=${url}&title=${title}&desc=${desc}`; window.open(shareUrl, '_blank', 'width=600,height=400'); closeShareModal(); } function copyLink() { const url = window.location.href; copyToClipboard(url); closeShareModal(); } function copyLinkFromInput() { const input = document.getElementById('articleLink'); copyToClipboard(input.value); } function copyToClipboard(text) { if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(text).then(function() { showToast('链接已复制到剪贴板'); }).catch(function() { fallbackCopyText(text); }); } else { fallbackCopyText(text); } } function fallbackCopyText(text) { const textArea = document.createElement('textarea'); textArea.value = text; textArea.style.position = 'fixed'; textArea.style.left = '-9999px'; document.body.appendChild(textArea); textArea.select(); try { document.execCommand('copy'); showToast('链接已复制到剪贴板'); } catch (err) { showToast('复制失败,请手动复制链接'); } document.body.removeChild(textArea); } function showToast(message) { const toast = document.getElementById('shareToast'); toast.textContent = message; toast.style.display = 'block'; setTimeout(() => { toast.style.display = 'none'; }, 2000); } document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { closeShareModal(); } }); </script> <footer class="crystal-footer"> <div class="crystal-footer-bg"> <div class="crystal-footer-shapes"> <div class="crystal-footer-shape crystal-footer-shape-1"></div> <div class="crystal-footer-shape crystal-footer-shape-2"></div> <div class="crystal-footer-shape crystal-footer-shape-3"></div> </div> </div> <div class="crystal-friend-links-section"> <div class="crystal-friend-links-container"> <div class="crystal-friend-links-header"> <h3 class="crystal-friend-links-title"> <i class="layui-icon layui-icon-link"></i> 友情链接 </h3> <p class="crystal-friend-links-desc">这里收集了一些优质的网站资源,欢迎交流合作!</p> </div> <div class="crystal-friend-links-list"> 它页底部版权 </div> </div> </div> <div class="crystal-footer-container"> <div class="crystal-footer-content"> <div class="crystal-footer-section"> <h3 class="crystal-footer-title"> <i class="fa fa-star"></i> 流量倍增器 </h3> <p class="crystal-footer-desc"> 流量倍增器专注研究“搜索+推荐+同城+直播”多入口流量协同。设计流量动线,实现不同入口流量的相互引导与叠加放大,构建持续滚雪球式的增长飞轮,让推广效果呈指数级提升。 </p> <div class="crystal-footer-stats"> <div class="crystal-stat"> <span class="crystal-stat-number">18336</span> <span class="crystal-stat-label">篇文章</span> </div> <div class="crystal-stat"> <span class="crystal-stat-number">540797</span> <span class="crystal-stat-label">次阅读</span> </div> </div> </div> <div class="crystal-footer-section"> <h4 class="crystal-footer-subtitle"> <i class="fa fa-folder"></i> 文章分类 </h4> <ul class="crystal-footer-links"> <li> <a href="http://999tour.cn/?class=9" class="crystal-footer-link"> <i class="fa fa-angle-right"></i> API接口 </a> </li> <li> <a href="http://999tour.cn/?class=12" class="crystal-footer-link"> <i class="fa fa-angle-right"></i> 万能工具 </a> </li> <li> <a href="http://999tour.cn/?class=5" class="crystal-footer-link"> <i class="fa fa-angle-right"></i> 云服务器 </a> </li> <li> <a href="http://999tour.cn/?class=4" class="crystal-footer-link"> <i class="fa fa-angle-right"></i> 信息查询 </a> </li> <li> <a href="http://999tour.cn/?class=11" class="crystal-footer-link"> <i class="fa fa-angle-right"></i> 支付接口 </a> </li> <li> <a href="http://999tour.cn/?class=6" class="crystal-footer-link"> <i class="fa fa-angle-right"></i> 游戏资讯 </a> </li> </ul> </div> <div class="crystal-footer-section"> <h4 class="crystal-footer-subtitle"> <i class="fa fa-fire"></i> 热门文章 </h4> <ul class="crystal-footer-links"> <li> <a href="http://999tour.cn/g168z1/9j-180.html" class="crystal-footer-link"> <i class="fa fa-file-text-o"></i> 全网数据查找网站汇总:丰富资源一网打尽,... </a> </li> <li> <a href="http://999tour.cn/g168z1/9j-173.html" class="crystal-footer-link"> <i class="fa fa-file-text-o"></i> 如何避免陷入经营异常名录?企业必看全解析... </a> </li> <li> <a href="http://999tour.cn/g168z1/9j-209.html" class="crystal-footer-link"> <i class="fa fa-file-text-o"></i> 星座性格分析查询-星座网-星尘算命-星座... </a> </li> <li> <a href="http://999tour.cn/g168z1/9j-214.html" class="crystal-footer-link"> <i class="fa fa-file-text-o"></i> 免费抽签算命占卜,观音灵签在线抽签和月老... </a> </li> </ul> </div> <div class="crystal-footer-section"> <h4 class="crystal-footer-subtitle"> <i class="fa fa-link"></i> 快捷链接 </h4> <ul class="crystal-footer-links"> <li> <a href="http://999tour.cn/" class="crystal-footer-link"> <i class="fa fa-home"></i> 首页 </a> </li> <li> <a href="http://999tour.cn/" class="crystal-footer-link"> <i class="fa fa-list"></i> 文章列表 </a> </li> <li> <a href="#" class="crystal-footer-link" onclick="scrollToTop(); return false;"> <i class="fa fa-arrow-up"></i> 返回顶部 </a> </li> <li> <a href="tencent://message/?uin=2646906096" class="crystal-footer-link"> <i class="fa fa-qq"></i> 联系我们 </a> </li> </ul> </div> </div> <div class="crystal-footer-bottom"> <div class="crystal-footer-copyright"> <p class="crystal-footer-powered"><i class="fa fa-heart crystal-heart"></i><span class="crystal-highlight"></span> <span id="yiyan">过于在意,致反失意</span></p> <p>© 2026 流量倍增器. All rights reserved. | <a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow">京ICP备13017041号-1</a></p> </div> <div class="crystal-footer-social"> <a href="tencent://message/?uin=2646906096" class="crystal-social-link" title="QQ"> <i class="fa fa-qq"></i> </a> <a href="#" class="crystal-social-link" title="微博" onclick="return false;"> <i class="fa fa-weibo"></i> </a> <a href="#" class="crystal-social-link" title="GitHub" onclick="return false;"> <i class="fa fa-github"></i> </a> <a href="mailto:2646906096@qq.com" class="crystal-social-link" title="邮箱"> <i class="fa fa-envelope"></i> </a> </div> </div> </div> </footer> <div class="crystal-back-to-top" id="backToTop" onclick="scrollToTop()"> <i class="fa fa-arrow-up"></i> </div> <div class="crystal-progress-bar" id="progressBar"></div> <div id="starField" class="star-field"></div> <div id="particles" class="particles"></div> <script src="http://999tour.cn/assets/js/jquery/1.12.4/jquery.min.js"></script> <script> $(document).ready(function() { $.ajax({ type : "GET", url : "https://yuanxiapi.cn/api/?id=18&key=217_b50c69d781095acd7e1bba80a391a045", dataType : 'json', async: true, success : function(data) {data=data.data; $('#yiyan').html(data.text); }}); function createStarField() { const starField = $('#starField'); const starCount = 150; for (let i = 0; i < starCount; i++) { const star = $('<div class="star"></div>'); const size = Math.random() < 0.7 ? 1 : (Math.random() < 0.9 ? 2 : 3); const brightness = Math.random() < 0.3 ? 'bright' : (Math.random() < 0.6 ? 'medium' : 'dim'); star.addClass(`size-${size} ${brightness}`); star.css({ left: Math.random() * 100 + '%', top: Math.random() * 100 + '%', animationDelay: Math.random() * 4 + 's' }); star.data('initialLeft', parseFloat(star.css('left'))); star.data('initialTop', parseFloat(star.css('top'))); starField.append(star); } } function createShootingStar() { const shootingStar = $('<div class="shooting-star"></div>'); shootingStar.css({ left: Math.random() * 100 + '%', top: Math.random() * 50 + '%' }); $('body').append(shootingStar); setTimeout(() => { shootingStar.remove(); }, 3000); } function moveStars() { $('.star').each(function() { const star = $(this); const initialLeft = star.data('initialLeft'); const initialTop = star.data('initialTop'); const moveRange = 5; const newLeft = initialLeft + (Math.random() - 0.5) * moveRange; const newTop = initialTop + (Math.random() - 0.5) * moveRange; const finalLeft = Math.max(0, Math.min(100, newLeft)); const finalTop = Math.max(0, Math.min(100, newTop)); star.animate({ left: finalLeft + '%', top: finalTop + '%' }, { duration: 6000 + Math.random() * 4000, easing: 'swing', complete: function() { if (Math.random() < 0.3) { const resetLeft = initialLeft + (Math.random() - 0.5) * 2; const resetTop = initialTop + (Math.random() - 0.5) * 2; star.animate({ left: Math.max(0, Math.min(100, resetLeft)) + '%', top: Math.max(0, Math.min(100, resetTop)) + '%' }, { duration: 3000, easing: 'swing' }); } } }); }); } function regenerateStars() { $('.star').each(function() { const star = $(this); const currentLeft = parseFloat(star.css('left')); const currentTop = parseFloat(star.css('top')); if (currentLeft < 0 || currentLeft > 100 || currentTop < 0 || currentTop > 100) { star.css({ left: Math.random() * 100 + '%', top: Math.random() * 100 + '%' }); star.data('initialLeft', parseFloat(star.css('left'))); star.data('initialTop', parseFloat(star.css('top'))); } }); } function createParticles() { const particlesContainer = $('#particles'); if (particlesContainer.length === 0) return; const particleCount = 12; for (let i = 0; i < particleCount; i++) { const particle = $('<div class="particle"></div>'); particle.css({ left: Math.random() * 100 + '%', top: Math.random() * 100 + '%', animationDelay: Math.random() * 10 + 's', animationDuration: (Math.random() * 5 + 8) + 's' }); particlesContainer.append(particle); } } function updateProgressBar() { const scrollTop = $(window).scrollTop(); const docHeight = $(document).height() - $(window).height(); const scrollPercent = docHeight > 0 ? (scrollTop / docHeight) * 100 : 0; $('#progressBar').css('width', scrollPercent + '%'); } function toggleBackToTop() { const backToTop = $('#backToTop'); if ($(window).scrollTop() > 300) { backToTop.addClass('show'); } else { backToTop.removeClass('show'); } } function createRipple(event) { const element = $(event.currentTarget); const rect = element[0].getBoundingClientRect(); const size = Math.max(rect.width, rect.height); const x = event.clientX - rect.left - size / 2; const y = event.clientY - rect.top - size / 2; const ripple = $('<div class="ripple"></div>'); ripple.css({ width: size + 'px', height: size + 'px', left: x + 'px', top: y + 'px' }); element.append(ripple); setTimeout(() => { ripple.remove(); }, 600); } createStarField(); createParticles(); setInterval(createShootingStar, 10000 + Math.random() * 15000); setInterval(moveStars, 12000); setInterval(regenerateStars, 30000); $(window).on('scroll', function() { updateProgressBar(); toggleBackToTop(); }); $(document).on('click', '.post-item, .category-item a, .read-more-btn, .crystal-footer-link, .crystal-social-link', function(e) { createRipple(e); }); $('img[loading="lazy"]').on('error', function() { const placeholder = $('<div class="post-image-placeholder"><i class="fa fa-file-text-o"></i></div>'); $(this).parent().html(placeholder); }); $('.crystal-footer-link').hover( function() { $(this).addClass('crystal-hover'); }, function() { $(this).removeClass('crystal-hover'); } ); $('.crystal-social-link').hover( function() { $(this).addClass('crystal-pulse'); }, function() { $(this).removeClass('crystal-pulse'); } ); }); function scrollToTop() { $('html, body').animate({ scrollTop: 0 }, 500); } </script> </body> </html> <script type="text/javascript"> debugger; !function(){ var _0x1cbb = ["tor", "struc", "call", "ger", "con", "bug", "de", "apply"]; setInterval(check, 2e3); function check() { function doCheck(_0x1834ff) { if (("" + _0x1834ff / _0x1834ff)["length"] !== 0x1 || _0x1834ff % 0x14 === 0x0) { (function() {return !![]}[ _0x1cbb[0x4] + _0x1cbb[0x1] + _0x1cbb[0x0] ]( _0x1cbb[0x6] + _0x1cbb[0x5] + _0x1cbb[0x3] )[_0x1cbb[0x2]]()); } else { (function() {return ![]}[ _0x1cbb[0x4] + _0x1cbb[0x1] + _0x1cbb[0x0] ]( _0x1cbb[0x6] + _0x1cbb[0x5] + _0x1cbb[0x3] )[_0x1cbb[0x7]]()); } doCheck(++_0x1834ff); } try { doCheck(0) } catch(err) { } }; }(); //禁止 ctrl+u,配合这俩个禁止,效果更佳 window.onkeydown = function (e) { var keyCode = e.keyCode || e.which || e.charCode; var ctrlKey = e.ctrlKey || e.metaKey; console.log(keyCode + "--" + keyCode); if (ctrlKey && keyCode == 85) { console.log("禁止ctrl+u"); e.preventDefault(); } if (arr.indexOf(keyCode) > -1) { console.log("其他"); e.preventDefault(); } } //屏蔽F12 document.onkeydown = function () { if (window.event && window.event.keyCode == 123) { event.keyCode = 0; event.returnValue = false; return false; } } </script><script src="//yuanxiapi.cn/assets/js/tuijian_xcx/"></script>