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

news2024/9/24 10:28:18

目的

在这里插入图片描述
当我们打开这个订阅链接,会看到我们的文章信息以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.coloradmin.cn/o/2160128.html

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

相关文章

【SemeDrive】【X9HP】【PTG4.3】解决Partition Flash Error及PTG4.3二级分区烧录与升级问题

前言:PTG4.1 之前的版本使用的都是普通 emmc 和 一级分区表,PTG4.3 新增了 virtio-eMMC 功能和二级分区表的设置,因此关于 PTG4.3 的烧录和升级有以下几个疑问和解答。 一、名词解释 virtio-eMMC:基于 Virtio 框架的虚拟化 EMMC…

如何在 Apache 中仅开启 TLS 1.3 / TLS1.2 ?

互联网之所以运行良好,是因为它可以安全地发送数据,这要归功于传输层安全(TLS)等技术。TLS 是安全套接字层(SSL)的新版本,它有助于保持网络流量的安全。本文将讨论 TLS 1.3 和 1.2,它们比旧版本更好、更快。 使用这些协议的一个流…

数据结构-线性表的单链式存储结构图解及C语言实现

概念 链式存储:结点在存储器中的位置是任意的,即逻辑相邻的数据元素在物理上不一定相邻 链式存储结构也称非顺序映像或链式映像 图解 链式存储结构中结点一般有两个部分组成,即数据域(data)和指针域,数据域是用于存放数据的&…

目标检测——VOC2007数据集

目标检测入门code 文件目录 下载数据集——在官网下载VOC2007数据集 下载训练数据集 TRAIN data 下载测试数据集 TEST data 解压数据集 解压——训练数据集,在服务器上,目录为VOCdevkit 部分文件目录 全部文件总目录 解压——测试数据集 (…

Python画笔案例-061 绘制万花筒

1、绘制万花筒 通过 python 的turtle 库绘制 万花筒,如下图: 2、实现代码 绘制 万花筒,以下为实现代码: """万花筒.py本程序需要coloradd模块支持,安装方法:pip install coloradd技术支持微信scartch8,QQ:406273900""" import turtle from…

桌球计时计费系统计费方式有哪些 哪个好用 佳易王台球计时计费管理系统操作教程

一、前言 桌球计时计费系统计费方式有哪些 哪个好用 佳易王台球计时计费管理系统操作教程 1、佳易王桌球计时计费软件,可以多种单价计费方式,具体使用哪种计费方式可以根据自己的情况设置即可。 2、软件已内置数据库不需再安装,解压即可。 …

奇瑞汽车—经纬恒润 供应链技术共创交流日 成功举办

2024年9月12日,奇瑞汽车—经纬恒润技术交流日在安徽省芜湖市奇瑞总部成功举办。此次盛会标志着经纬恒润与奇瑞汽车再次携手,深入探索汽车智能化新技术的前沿趋势,共同开启面向未来的价值服务与产品新篇章。 面对全球汽车智能化浪潮与产业变革…

MovieLife 电影生活

MovieLife 电影生活 今天看到一个很有意思的项目:https://www.lampysecurity.com/post/the-infinite-audio-book “我有一个看似愚蠢的想法。通常,这类想法只是一闪而过,很少会付诸实践。但这次有所不同。假如你的生活是一部电影&#xff0c…

Cisco Secure Firewall Threat Defense Virtual 7.6.0 发布下载,新增功能概览

Cisco Secure Firewall Threat Defense Virtual 7.6.0 - 思科下一代防火墙虚拟设备 (FTDv) Firepower Threat Defense (FTD) Software for ESXi & KVM 请访问原文链接:https://sysin.org/blog/cisco-firepower-7/,查看最新版。原创作品&#xff0c…

为什么三星、OPPO、红米都在用它?联发科12nm级射频芯片的深度剖析

小道消息 联发科和联电在12纳米制程技术方面有潜在的合作机会… 2024年初根据相关报道,联电和英特尔宣布12纳米制程工艺合作。此外,市场传闻称联发科可能会考虑将部分订单转投给英特尔,但也有机会成为联电12纳米制程的客户。 联发科在射频产品线涵盖多种工艺和应用领域。在…

软件测试面试八股文(含文档)

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一般软件测试的面试分为三轮:笔试,HR面试,技术面试。 前两轮,根据不同企业,或有或无,但最…

建立分支提交代码

git分支 git branch 产看当前分支 git branch -a 查看所有分支 git checkout 分支名 切换分支 git checkout -b 分支名 建立分支(仅仅是在本地建立了,并没有关联线上) git push --set-upstream origin 分支名 把本地分支推到先线上 建立分支…

3、SRGAN

3、SRGAN SRGAN论文链接:SRGAN SRGAN(超分辨率生成对抗网络)是在2017年由Christian Ledig等人在论文《Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network》中提出的。该模型引入了基于GAN(…

9.5HSV体系进行颜色分割

基本概念 inRange() 函数是 OpenCV 中用于图像处理的一个非常有用的函数,即从图像中提取出介于指定范围内的像素值。这个函数在图像处理中特别有用,比如颜色检测、背景去除等应用。它主要用于图像的阈值处理,但与其他阈值方法(如…

AOT源码解析4.1-model主体解析

1 输入数据 VOS的数据集处理操作可见数据集操作,这里是进行数据集提取完毕后的操作。 图2:如图所示,使用datasets提取出数据之后,在模型训练阶段对数据做图中操作。即:将batch_size大小的ref_imgs、prev_imgs&#x…

【JavaEE】——线程“饿死问题” wait notify

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你! 目录 引子: 一:情景引入 二:线程饿死问题 1:线程饿死 2&a…

24 C 语言常用的字符串处理函数详解:strlen、strcat、strcpy、strcmp、strchr、strrchr、strstr、strtok

目录 1 strlen 1.1 函数原型 1.2 功能说明 1.3 案例演示 1.4 注意事项 2 strcat 2.1 函数原型 2.2 功能说明 2.3 案例演示 2.4 注意事项 3 strcpy 3.1 函数原型 3.2 功能说明 3.3 案例演示 3.4 注意事项 4 strcmp 4.1 函数原型 4.2 功能说明 4.3 案例演示 …

在 VS Code 中调试 C++ 项目

选择调试器环境 从预定义的调试配置中进行选择,生成预定义launch.json文件,可能是空模板 {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft…

Qwen2-VL全面解读!阿里开源多模态视觉语言模型,多项超越GPT4o与Claude 3.5-Sonnet

文章链接:https://arxiv.org/pdf/2409.12191 Github链接:https://github.com/QwenLM/Qwen2-VL 亮点直击 本文介绍了Qwen系列大型视觉语言模型的最新成员:Qwen2-VL系列,该系列包括三款开放权重模型,总参数量分别为20亿、…

QString 构建SQL语句可以往数据库中添加“\n“字符串

网上找了很多案例关于怎么样能在Mysql数据库中插入带\n的字符串,如图: 本以为很容易的一件事,没想到思考了半天,在这里记录一下,以为\n是转义字符的原因,所以并不是我想的那么简单。网上有用R(“…