解析rss链接数据,来长期把某博客数据订阅到自己的网站

目的

在这里插入图片描述
当我们打开这个订阅链接,会看到我们的文章信息以xml的形式呈现到浏览器页面中,怎么直接在我们自己的网站中,将这个链接的数据转为我们熟悉的json数据,然后渲染到自己的网站中呢

技术栈

  • react hooks
  • typescript
  • webpack

核心思想

  1. 通过axios请求这个订阅链接,拿到xml文本;
  2. 将xml文本转为XMLDocument格式;
  3. 将xmlDocument格式解析为json数据;(最后一步,网上找了一个解决方案,不过博主已经上传到自己的个人资源中,以便于大家方便使用)。

代码

按照上面三步骤,会依次贴上代码
api/index.ts

/** 简单写了一下请求拦截器和响应拦截器,就导出来了 大家可以直接axios就行的 */
import request from '../utils/request';
import { CSDN_RSS_URL } from '../constants';/** 把常量从外面引进来,统一管理思想 */
export const getRssList = () => request({url: CSDN_RSS_URL,method: 'get'
});

别人的请求,我们直接访问会跨域,所以本地开发要代理,当然我们部署的时候,让运维帮忙配置代理转发,或者交给后端去处理(后端直接不跨域)
webpack.dev.config.js

// 开发环境的反向代理配置 devserver这个配置项中
proxy: {'/qq_36579455': {target: 'https://rss.csdn.net',changeOrigin: true,}
}

xml文本转为XMLDocument格式
utils/index.ts

// 这里导入的文件,就是上面博主说的,大家直接在我的主页去下载就可以啦
import XMLToJson from './XMLToJson';/*** 解析xml 字符串为 dom 对象* @param xml * @returns */
export function xmlToDom(xml: string): XMLDocument {let xmlDom: any;if (window.DOMParser) {const parser = new DOMParser();xmlDom = parser.parseFromString(xml, 'text/xml');} else if ((window as any).ActiveXObject) { // 兼容ie6或者更老的const xmlDom = new (window as any).ActiveXObject('Microsoft.XMLDOM');xmlDom.async = false;xmlDom.loadXML(xml);}return xmlDom;
}export function xmlToJson(xml: XMLDocument): IRss | null {const obj = XMLToJson.parseXML(xml) as IRss;if (obj.rss && obj.rss.length) {return obj;} else {return null;}
}

为了方便,博主直接给大家贴出使用代码

随便一个新的组件

const [feeds, setFeeds] = useState([] as IRssItem[]);const getRss = async () => {try {const xml = await getRssList();const xmlDom = xmlToDom(xml as unknown as string);const tempJson = xmlToJson(xmlDom);tempJson && setFeeds(tempJson.rss[0].channel[0].item);} catch (err: any) {console.log(err.message, "get rss error");}};useEffect(() => {getRss();}, []); // 如果有eslint提示  加上这个注释就行// eslint-disable-next-line react-hooks/exhaustive-deps

不知名的types.ts

export interface IRssText {_text: string;
}export interface IRssItem {title: IRssText[];link: IRssText[];description: IRssText[];pubDate: IRssText[];author: IRssText[];category: any[];guid: IRssText[];
}

给大家看看博主的效果,页面简陋,这个就不喷了哈!
在这里插入图片描述

写在最后

觉得博主有帮到大家,就给他点个免费的赞吧,创作不易,大家多多支持!【看着简单,不过在做的过程当中,很多知识需要整合】

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【C++掌中宝】深入理解函数重载:概念、规则与应用

文章目录 引言1. 什么是函数重载?2. 为什么需要函数重载?3. 编译器如何解决命名冲突?4. 为什么返回类型不参与重载?5. 重载函数的调用匹配规则6. 编译器如何解析重载函数的调用?7. 重载的限制与注意事项8. 总结结语 引…

柯桥小语种学习之语言交流 | 德语餐厅用语

01 一、入座与点餐 1. Guten Tag! Ein Tisch fr zwei Personen, bitte.(你好!请给我们一张两人桌。) 2. Knnen wir hier sitzen?(我们可以坐这里吗?) 3. Die Speisekarte, bitte.(请给我菜…

在Windows系统上安装的 zlib C++ 库

在Windows系统上安装的 zstd C 库 项目地址步骤步骤一步骤二步骤三如果生成过程中遇到如下错误: 效果 项目地址 https://github.com/madler/zlib 可以发现这个项目有CMakeLists.txt文件,那就比较好搞了 步骤 步骤一 git clone gitgithub.com:madler/zlib.git步骤二 cd zli…

丢失照片/消息/文件,当发现没有备份 Android 手机数据时急救方法

当人们发现他们没有备份 Android 手机数据时,通常为时已晚。但是,我们都不想永久丢失珍贵的照片, 消息和其他文件。这就是为什么您应该检查 遵循 5 大免费 Android 数据恢复工具和最佳替代品 他们。 排名前五的免费 Android 数据恢复软件 1.奇…

黑芝麻A1000-Ubuntu20.04(九)yolov5从训练到板端运行过程详解

宿主机:台式电脑 Ubuntu20.04 开发板:A1000(烧录版本SDK v2.3.1.2) 模型转换容器:bsnn-tools-container-stk-4.2.0 编译容器:a1000b-sdk-fad-2.3.1.2 yolov5使用工程:黑芝麻根据https://github.…

PHP探索校园新生态校园帮小程序系统小程序源码

探索校园新生态 —— 校园帮小程序系统,让生活更精彩! 🌱【开篇:走进未来校园,遇见新生态】🌱 你是否厌倦了传统校园的繁琐与单调?是否渴望在校园里也能享受到便捷、智能的生活体验&#xff1…

3d可视化图片:通过原图和深度图实现

1、depthy 在线体验demo: https://depthy.stamina.pl/#/ 也可以docker安装上面服务: docker run --rm -t -i -p 9000:9000 ndahlquist/depthy http://localhost:90001)首先传原图 2)再传对应深度图 3)效果 </ifra

网络事件管理

网络事件管理是运行组织 IT 网络不可或缺的一部分&#xff0c;网络事件管理的最终目标很简单&#xff1a;在发生中断时尽快恢复服务或功能。但是为了高效和一致地进行&#xff0c;IT 运营团队需要时刻保持警惕&#xff0c;不断了解网络事件&#xff0c;并且必须系统地遵循一套程…

opencv4.5.5 GPU版本编译

一、安装环境 1、opencv4.5.5 下载地址&#xff1a;https://github.com/opencv/opencv/archive/refs/tags/4.5.5.ziphttps://gitee.com/mirrors/opencv/tree/4.5.0 2、opencv-contrib4.5.5 下载地址&#xff1a;https://github.com/opencv/opencv_contrib/archive/refs/tags/4…

ToB项目身份认证AD集成(二):一分钟搞定window server 2003部署AD域服务并支持ssl加密(多图保姆教程+证书脚本)

在ToB的应用开发中&#xff0c;往往需要集成AD域控实现身份认证&#xff0c;同时也算是近期工作的总结&#xff0c;之前已介绍了基础的AD、Ldap&#xff0c;本文主要介绍如何大家一个本地的测试环境。 相关系列&#xff1a; ToB项目身份认证AD集成&#xff08;一&#xff09;&a…

【JavaSE】-- 类和对象(1)

文章目录 1. 面向对象的初步认知1.1 什么是面向对象1.2 面向对象与面向过程 2. 类的定义和使用2.1 简单认识类2.2 类的定义格式 3. 类的实例化3.1 什么是实例化3.2 类和对象的说明 4. this引用4.1 为什么要有this引用4.2 什么是this引用4.3 this引用的特性 5. 对象的构造及初始…

增强GPT4v的Grounding能力,video-level

开源链接&#xff1a; appletea233/AL-Ref-SAM2: AL-Ref-SAM 2: Unleashing the Temporal-Spatial Reasoning Capacity of GPT for Training-Free Audio and Language Referenced Video Object Segmentation (github.com) In this project, we propose an Audio-Language-Refe…

Spring Boot中实现一个递归获取省市区行政区划代码

Spring Boot中实现一个递归获取省市区行政区划代码 写于20240924 10:23 在Spring Boot中实现一个递归获取省市区行政区划代码的功能&#xff0c;可以按照以下步骤进行。我们将使用Spring Data JPA来与数据库交互&#xff0c;并构建一个递归的方法来获取层级数据。 首先这里数据…

11周年 | 初心不改,焕新前行,奔赴下一个10年!

2024年8月13日&#xff0c;爱加密正式迎来了11岁生日&#xff0c;在爱加密肩负着崇高使命踏浪而行的10年间&#xff0c;蓝绿色的品牌标识一直伴于左右。随着时代的变迁以及市场需求的不断变化&#xff0c;企业同样也需要在品牌上做出创新递进&#xff0c;从而更加适应市场竞争的…

数据科学的秘密武器:defaultdict——Python字典的自动化填充神器,让数据结构更灵活

目录 什么是defaultdict 引入动机 创建与初始化 工作原理 自定义默认值函数 注意事项 使用案例 使用场景 1: 计数 使用场景 2: 分组数据 使用场景 3: 嵌套字典结构 进阶案例使用 进阶案例 1: 使用 defaultdict 实现词频统计并排序 进阶案例 2: 使用 defaultdict 实…

OpenCSG推出StarShip SecScan:AI驱动的软件安全革新

OpenCSG 导读 如今&#xff0c;IT 技术迅速发展&#xff0c;软件安全不仅是企业稳健运营的基础&#xff0c;更是整个社会经济体系安全的保障。加强软件安全&#xff0c;尤其是在开发阶段识别和修补漏洞&#xff0c;是企业必须重视的问题。国际数据公司&#xff08;IDC&#xf…

MyBatis 入门教程-搭建入门工程

Maven作为一个优秀的项目构建和管理工具,在日常的开发中被大多数开发者使用,后续的项目也是基于Maven来构建。 创建一个Maven项目 利用IDEA创建项目工具来创建一个Maven项目 添加MyBatis的依赖 这里可以从Maven仓库地址中进行查看, https://mvnrepository.com/ 从这里可…

反汇编—switch

x64和x86分析类似 标号1的位置要计算出&#xff1a;减去(debug) / 加上(release)第一个case要等于0&#xff0c;因为第一个case在跳转表数组的0下标位置 通过1和2&#xff0c;可以知道它们应该是连续case&#xff0c;还要判断是否缺项&#xff0c;进入跳转表看 可以看到原本应…

经济型伺服电缸EMB系列

经济型伺服电缸系列特点 小型电缸&#xff0c;推力范围:5kg-1500kg 精巧设计 所有部件模块化组合&#xff0c;标准化&#xff0c;经济化 轧制滚珠丝杠&#xff0c;高效率&#xff0c;高速度 匹配经济型步进伺服电机驱动器一体化&#xff0c;可总线 can&#xff0c;erthercat等&…

NAS求变,“0成本、低门槛”的鲁大师能否脱颖而出?

互联网科技的高速发展&#xff0c;推动了全球信息爆炸的进程。如何高效地存储和使用这些海量数据成了困扰企业、乃至个人的一大难题。从U盘、到移动硬盘、再到各种网云盘、以及愈发大众化的NAS……存储解决方案也随着个人及家庭数据存储需求的不断增长而发展着。如今&#xff0…