【加密社】如何创建自己的币圈工具站

需要准备的工作

1.域名

2.服务器

周末的时候主要弄了快讯这方面的代码

我这里用的是星球日报的api,也可以订阅他们的rss,这部分在github上是开源的

https://github.com/ODAILY

我这里用的是WordPress+onenav主题,然后用小工具在主页展示,

具体代码如下,小工具里自定义代码输入短代码[qklnews]

// 定义短代码以展示快讯消息
function qklnews_shortcode() {// 调用fetch_qklnews_data函数获取快讯消息$data = fetch_qklnews_data();if (!$data || !isset($data['newslist']) || empty($data['newslist'])) {return '<div style="font-family: Arial, sans-serif; color: red;">无法加载快讯,请稍后重试。</div>';}// 准备HTML结构ob_start(); // 开启输出缓冲?><div id="qklnews-container" class="qklnews-container"><!-- 内联CSS --><style>.qklnews-container {font-family: Arial, sans-serif;margin-bottom: 20px;padding-left: 10px; /* 整体内容向右偏移 */position: relative;text-align: center; /* 居中对齐容器内容 */}.timeline {position: absolute;left: 9px; /* 时间轴向左移动 10px */top: 20px; /* 时间线起点与第一条数据的圆点对齐 */width: 2px;background-color: #ddd;height: calc(100% - 40px); /* 时间线高度为新闻项总高度减去上下间距 */}.timeline-dot {position: absolute;left: -5px; /* 圆点向左移动 10px */top: 10px; /* 每个圆点的位置基于新闻项 */width: 10px;height: 10px;background-color: #999;border-radius: 50%;}.news-list {list-style-type: none;padding: 0;margin-top: 20px; /* 第一条数据与时间轴顶部的距离 */text-align: left; /* 新闻项内容左对齐 */}.news-item {margin-bottom: 20px;position: relative;padding-left: 20px;margin-right: 20px; /* 每条数据右侧留出距离 */}.title {font-size: 14px; /* 主内容字号 */color: #333;text-decoration: none;display: block;margin-bottom: 5px;}.details {display: flex;justify-content: space-between;align-items: center;font-size: 14px; /* 快讯和日期字号 */color: #999;}.subtitle {background-color: #f5f5f5;padding: 2px 5px;border-radius: 3px;margin-right: 10px;}.date {margin-left: auto;}.view-more-btn {display: inline-block;margin-top: 20px;padding: 8px 16px; /* 按钮更小 */font-size: 14px; /* 字体更小 */color: #fff;background-color: #a98622;text-decoration: none;border-radius: 5px;text-align: center;transition: background-color 0.3s ease;}.view-more-btn:hover {background-color: #005177;}</style><!-- 时间轴 --><div class="timeline"></div><ul class="news-list"><?php // 限制只显示前 6 条新闻$limited_news = array_slice($data['newslist'], 0, 6);foreach ($limited_news as $item): ?><li class="news-item"><!-- 时间轴圆点 --><div class="timeline-dot"></div><a href="<?php echo esc_url($item['news_url']); ?>" target="_blank" class="title"><?php echo esc_html($item['title']); ?></a><div class="details"><span class="subtitle">快讯</span><span class="date"><?php // 显示日期和时间(年-月-日 时:分)echo esc_html(date('Y年m月d日 H:i', strtotime($item['published_at'])));?></span></div></li><?php endforeach; ?></ul><!-- 查看更多按钮 --><a href="https://bqbot.cn/7x24%e5%bf%ab%e8%ae%af" target="_blank" class="view-more-btn">查看更多</a></div><?phpreturn ob_get_clean(); // 返回生成的HTML
}
add_shortcode('qklnews', 'qklnews_shortcode'); // 注册短代码 [qklnews]// 让文本小工具支持短代码
add_filter('widget_text', 'do_shortcode');

这里需要注意的是,快讯中带图片的部分,是cdn服务器上的静态资源,他会限制别的网站直接去访问,比如你如果是直接把接口返回的imgurl嵌入到你的img标签中,他会报403

这里需要使用图片代理

function custom_image_proxy() {if (isset($_GET['custom_proxy']) && isset($_GET['url'])) {$image_url = urldecode($_GET['url']); // 解码URL// 确保只转发到允许的域名$allowed_domains = ['https://piccdn.0daily.com'];$parsed_url = parse_url($image_url);$scheme_and_host = $parsed_url['scheme'] . '://' . $parsed_url['host'];if (!in_array($scheme_and_host, $allowed_domains)) {status_header(403);echo "Forbidden";exit;}// 模拟浏览器请求头$response = wp_remote_get($image_url, ['headers' => ['User-Agent'      => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36','Referer'         => 'https://www.odaily.news/', // 设置正确的 Referer'Accept'          => 'image/webp,image/apng,image/*,*/*;q=0.8','Accept-Encoding' => 'gzip, deflate, br','Accept-Language' => 'en-US,en;q=0.9',],'decompress' => true, // 自动解压缩 Gzip 数据]);// 检查请求是否成功if (is_wp_error($response)) {error_log('WP HTTP Error: ' . $response->get_error_message());status_header(500);echo "Internal Server Error";exit;}$status_code = wp_remote_retrieve_response_code($response);if ($status_code != 200) {error_log("Response Status Code: $status_code");status_header($status_code);echo "Error fetching image";exit;}// 获取并输出图片内容ob_clean(); // 清除之前的输出缓冲区flush();    // 刷新系统输出缓冲// 设置正确的 Content-Type$content_type = wp_remote_retrieve_header($response, 'content-type');header("Content-Type: $content_type");// 输出图片数据echo wp_remote_retrieve_body($response);exit;}
}
add_action('template_redirect', 'custom_image_proxy');

具体演示数据可以看到 币圈工具站 | 币圈导航

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker学习笔记(十一)宿主机无法链接宿主机问题处理

故障排查优先级排序 服务状态 → 2. 端口监听 → 3. 防火墙 → 4. 权限配置 → 5. 网络路由 &#xff08;按此顺序可覆盖95%的常见问题‌15&#xff09; mysql镜像启动命令&#xff1a; docker run -p 3306:3306 --restartalways --name mysqlv8 -e MYSQL_ROOT_PASSWORDCd…

力扣:回溯算法

组合I class Solution {List<List<Integer>> result new ArrayList(); // 所有结果集List<Integer> list new ArrayList(); // 当前结果集public List<List<Integer>> combine(int n, int k) {dfs(n, k, 1);return result;}public void dfs(i…

华为HCIE鸿蒙应用开发认证靠谱吗?

在万物互联时代&#xff0c;智能终端设备的多样性与协同需求催生了操作系统的革新。华为HarmonyOS&#xff08;鸿蒙系统&#xff09;凭借其分布式架构与全场景能力&#xff0c;正成为打破设备边界、重塑用户体验的核心技术底座。HCIE鸿蒙应用开发认证作为华为认证体系的顶级资质…

23种设计模式-原型(Prototype)设计模式

原型设计模式 &#x1f6a9;什么是原型设计模式&#xff1f;&#x1f6a9;原型设计模式的特点&#x1f6a9;原型设计模式的结构&#x1f6a9;原型设计模式的优缺点&#x1f6a9;原型设计模式的Java实现&#x1f6a9;代码总结&#x1f6a9;总结 &#x1f6a9;什么是原型设计模式…

Oracle-rman restore遭遇RMAN-03002与ORA-19563

文章目录 在原DB上检查是否有重复的文件名&#xff1a;查看rman恢复的日志修正重名部分重新执行rman恢复结论&#xff1a; 在 RMAN 恢复过程中&#xff0c;遇到RMAN-03002连同ORA-19563:错误。 操作是将 Oracle 10.0.5的数据库备份从 RMAN備份恢复到另一台测试主机的同一个目录…

运维网络排查工具介绍与使用

作为一名运维工程师&#xff0c;日常工作中最令人头疼的莫过于各种网络故障。在过去一年半的运维生涯中&#xff0c;我积累了丰富的网络故障排查经验&#xff0c;今天就来和大家分享一下如何运用抓包工具&#xff08;Wireshark、tcpdump&#xff09;和网络排查工具&#xff08;…

解决vscode终端和本地终端python版本不一致的问题

&#x1f33f; 问题描述 本地终端&#xff1a; vscode终端&#xff1a; 别被这个给骗了&#xff0c;继续往下看&#xff1a; 难怪我导入一些包的时候老提示找不到&#xff0c;在本地终端就不会这样&#xff0c;于是我严重怀疑vscode中的python版本和终端不一样&#xff0c…

Sublime全局搜索快捷键Ctrl+Shift+F不能使用解决

问题描述&#xff1a; 在安装好Sublime后&#xff0c;我们使用快捷键进行全局搜索&#xff0c;发现没有反应&#xff0c;但是中文输入变成了繁体。 解决方案&#xff1a; 如截图&#xff0c;在关闭简繁切换的快捷键或者换成其他的就行

海康HTTP监听报警事件数据

http监听接收报警事件数据 海康获取设备报警事件数据两种方式&#xff1a; 1、sdk 布防监听报警事件数据,服务端布防。&#xff08;前面文章有示例&#xff09; 2、http监听接收报警事件数据&#xff0c;设备直接推送。 http监听接收报警事件数据&#xff0c;服务端可以使用n…

Python----计算机视觉处理(Opencv:图像边缘检测:非极大值抑制,双阈值筛选)

一、 高斯滤波 边缘检测本身属于锐化操作&#xff0c;对噪点比较敏感&#xff0c;所以需要进行平滑处理。这里使用的是一个5*5的高斯 核对图像进行消除噪声。 二、计算图像的梯度和方向 三、非极大值抑制 在得到每个边缘的方向之后&#xff0c;其实把它们连起来边缘检测就算完了…

Maven工具学习使用(四)——仓库

仓库分类 对于Mavne来说,仓库只分为两类:本地仓库和远程仓库。当Maven根据坐标查询寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven就会去远程仓库查找,发现需要的构件之后…

Axure PR 9.0(发音:Ack-sure)原型图工具入门教程:链接交互

文章目录 引言Axure‌ RP 9I Axure RP9入门介绍元件库对两个元件进行连接页面:导航视图、概要母版交互II 链接交互从A页面跳转到B页面返回之前的页面see also引言 【 产品原型图】核心价值和实际应用场景:可视化需求,统一团队理解 https://blog.csdn.net/z929118967/articl…

docker远程debug

1. 修改 Java 启动命令 在 Docker 容器中启动 Java 程序时&#xff0c;需要添加 JVM 调试参数&#xff0c;jdk8以上版本 java -agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005 -jar your-app.jar jdk8及以下版本&#xff1a; java -Xdebug -Xrunjdwp:tra…

K8S学习之基础五十四:jenkins新建测试流水线

jenkins新建测试流水线 新建任务 node(testak) {stage(第1步:从gitee上下载源代码) {git url: "https://gitee.com/akang007/jenkins-sample"script {build_tag sh(returnStdout: true, script: git rev-parse --short HEAD).trim()}}stage(第2步&#xff1a;基…

SylixOS 中 select 原理及使用分析

1、select接口简介 1.1 select接口使用用例 select 是操作系统多路 I/O 复用技术实现的方式之一。 select 函数允许程序监视多个文件描述符&#xff0c;等待所监视的一个或者多个文件描述符变为“准备好”的状态。所谓的”准备好“状态是指&#xff1a;文件描述符不再是阻塞状…

Spring WebFlux之ServerWebExchange

ServerWebExchange 是 Spring WebFlux 中的一个核心接口&#xff0c;用于表示服务器端处理的 HTTP 请求和响应。它封装了请求和响应的所有信息&#xff0c;并提供了相应的方法来操作这些信息。ServerWebExchange 在响应式编程模型中扮演着关键角色&#xff0c;支持非阻塞、异步…

Flutter 常见错误和坑

1. 状态管理问题 StatefulWidget 生命周期误用 // 错误&#xff1a;在 build 方法中修改状态 override Widget build(BuildContext context) {setState(() { counter; }); // 会导致无限重建循环return Text($counter); }// 正确&#xff1a;在事件处理中修改状态 Widget bui…

C++智能指针万字详细讲解(包含智能指针的模拟实现)

在笔试&#xff0c;面试中智能指针经常出现&#xff0c;如果你对智能指针的作用&#xff0c;原理&#xff0c;用法不了解&#xff0c;那么可以看看这篇博客讲解&#xff0c;此外本博客还简单模拟实现了各种指针&#xff0c;在本篇的最后还应对面试题对智能指针的知识点进行了拓…

【Go】Go语言结构体笔记

整体介绍 虽然 Go 语言不是传统意义上的面向对象语言&#xff0c;但它提供了结构体&#xff08;struct&#xff09;来组织数据&#xff0c;并且可以为结构体绑定方法&#xff0c;从而达到面向对象的部分效果。 关键知识点包括&#xff1a; 结构体定义与实例化 定义结构体时使用…

Three.js 快速入门教程【十八】射线拾取模型——鼠标点击屏幕选中模型或物体

系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…