简单!实用!易懂!:Java如何批量导出微信收藏夹链接-->转换成Markdown

文章目录

    • 前言
    • 参考方案
      • 方案1:Python
      • 方案2:Python
    • 我的方案
      • 手动前置操作
      • 代码处理

在这里插入图片描述

前言

不知道是否有很多小伙伴跟我一样,有个问题非常愁,对于收藏党来说,收藏了=学会了!然后导致微信收藏夹的东西越来越多了,现在想要把这些内容整理出来导到电脑上,我在全网搜索了太多太多相关的内容,却发现好像没有一个比较实用的工具。

image-20240316110539725

如果手动一个个导的话非常麻烦,操作步骤如下:
1、打开微信收藏,点开标签
2、提取链接:使用鼠标右键点击链接,然后选择“复制地址”
3、导出链接:将复制的链接地址粘贴到一个文本文件中,每个链接一行。

http://mp.weixin.qq.com/s?__biz=MjM5MjAxNDM4MA==&mid=2666802429&idx=1&sn=11ffbcbb32e8956bf3d52086b7288cc0&chksm=bc99d366a8bc341683438c979d747a8e2582ac2683139e2199f3f2380ee1d0efd785f3893e6a&scene=126&sessionid=1710664419#rd

4、为每个链接进行命名:从微信复制出来的链接,没有名字只有单纯的URL链接,你都不知道这个链接是什么,很不友好,所以还得打开链接,复制标题,类似这样的格式

近日择机发射!:http://mp.weixin.qq.com/s?__biz=MjM5MjAxNDM4MA==&mid=2666802429&idx=1&sn=11ffbcbb32e8956bf3d52086b7288cc0&chksm=bc99d366a8bc341683438c979d747a8e2582ac2683139e2199f3f2380ee1d0efd785f3893e6a&scene=126&sessionid=1710664419#rd

如果几百条收藏链接,这样操作得有几千步操作,手工完成得多浪费时间!!!

参考方案

方案1:Python

此方案需要你学过一点python,且好像这种并没有提取标题,我这里并未实际尝试过
可参考链接:分享一个批量提取微信收藏链接到TXT文件的方法

image-20240317165905216

方案2:Python

Python轻松下载或整理删除微信收藏

此方案也是采用Python,且看最终的效果不错,有标题和对应的链接,比较符合我的预期,但是我不懂Python咋办??我是Java程序员,我想看看有没有别的方式!

image-20240317170409555

我的方案

手动前置操作

1、先将所有要导出的推文批量多选,并分享给好友或者文件传输助手;

主要批量多选如果在手机没法批量一次性全选的方式,但是电脑可以一键拉取!!!

https://apple-web.oss-cn-hangzhou.aliyuncs.com/img/202403171805430.jpg

电脑可以一键拉取全选!!!这样就可以不用一个个像手机一样手动勾选了,说实话,这点微信做的是真的拉胯,居然多选没有做全选的功能!!!

2、选中发送到文件助手
image-20240317171331269

3、然后在聊天界面多选并使用邮箱发送;这点我又要吐槽一下了:

  • 电脑版本可以一键拉取聊天记录,但是居然没有发送邮件的功能,

  • 手机版本有发送邮件的功能,但是并没有一次性全选的功能,我这里又只能一个个去勾选了。。。

image-20240317180803424

4、打开邮箱,复制内容保存文本为测试链接.txt
image-20240317172203093

代码处理

上面我们把内容保存了为测试链接.txt,里面内容如下所示,
注意一点: 我这里多放了一种不是链接的内容,是因为有时候我在微信收藏的时候,可能收藏的不是一个连接,只是一段文本,代码兼容处理这种情况,收藏的如果是链接的单独处理,非链接的保留原来格式

image-20240317173151257

我的目的就是将txt里面的内容进行处理,需要符合以下条件:

  • 如果是[title:url]这种格式的,就转换成Markdown格式输出,输出到测试链接-md.md
  • 如果是非上面的格式,也就是纯文本这种,就保持原样输出,输出到测试链接-other.txt
  • 同时上面的文件输出时,每个收藏都需要有序号标注

接下来就是代码处理了:

下面代码我们从一个文本输入文件 (E:\code\测试链接.txt) 中读取内容,根据特定的分隔模式切分内容(我们会发现微信导出来的收藏内容,每个都是 微信名字 时间点,也就是需要针对这块进行分割内容,分割的话可以用正则表达式),并根据内容的格式将其转换为Markdown格式或者原始的文本格式,最后将转换后的结果输出到两个不同的文件中(一个是Markdown格式的文件 E:\code\测试链接-md.md,另一个是原始文本格式的文件 E:\code\测试链接-other.txt)。

// 用于处理文本内容转换
public class Content2MdAndTxtForPattern {
  
    // 定义一个正则表达式模式,用于匹配类似 "TA 21:54 " 这样的分隔符,\s+代表一个或多个空格。
    public static final Pattern DELIMITER_PATTERN = Pattern.compile("TA\\s+\\d{2}:\\d{2}\\s+");

    public static void main(String[] args) {
        // 文件名前缀
        String fileName = "测试链接";
        // 定义输入文件的路径
        String inputFilePath = "E:\\code\\" + fileName + ".txt";
        // 定义Markdown格式输出文件的路径
        String outputBPath = "E:\\code\\" + fileName + "-md.md";
        // 定义原始文本格式输出文件的路径
        String outputCPath = "E:\\code\\" + fileName + "-other.txt";

        try {
            // 读取输入文件的全部内容到字符串中
            String content = new String(Files.readAllBytes(Paths.get(inputFilePath)));
            // 使用定义的分隔模式分割文件内容
            String[] sections = DELIMITER_PATTERN.split(content);
            // 初始化Markdown输出文件的序号
            int countB = 1;
            // 初始化原始文本输出文件的序号
            int countC = 1;
            
            try (BufferedWriter writerB = Files.newBufferedWriter(Paths.get(outputBPath));
                 BufferedWriter writerC = Files.newBufferedWriter(Paths.get(outputCPath))) {

                // 遍历分割后的所有部分,从索引1开始,因为分割后的第一个部分(索引0)是不需要的内容
                for (int i = 1; i < sections.length; i++) {
                    // 去除内容前后的空白字符
                    String section = sections[i].trim();
                    // 定义一个新的正则表达式模式,用于匹配带链接的文本
                    Pattern pattern = Pattern.compile("\\[([^\\]]+):\\s*(http[^\\]]+)\\]");
                    // 创建matcher去匹配当前部分内容
                    Matcher matcher = pattern.matcher(section);

                    // 如果匹配到带链接的文本格式
                    if (matcher.find()) {
                        // 提取标题和URL
                        String title = matcher.group(1).trim();
                        String url = matcher.group(2).trim();
                        // 将提取出来的标题和URL转换为Markdown格式,写入到对应的文件中
                        writerB.write(countB++ + ". [" + title + "](" + url + ")\n");
                    } else {
                        // 如果不是链接格式,原样写入到另一个文件中
                        writerC.write(countC++ + ". " + section + "\n");
                    }
                }
            }

            // 文件处理完毕后打印提示信息
            System.out.println("内容已解析到文件:" + outputBPath + " 和 " + outputCPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

最终效果如下:

1、Markdown文件内容如下

image-20240317180312204

2、txt纯文本打开内容如下

image-20240317180417149

参考文章:

https://blog.csdn.net/qq_32832803/article/details/122508085
https://blog.csdn.net/fitAllEnv/article/details/134000975
https://blog.csdn.net/u010751000/article/details/106515427
https://blog.csdn.net/m0_59235245/article/details/124973234

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LLM加速】注意力优化(基于位置/内容的稀疏注意力 | flashattention)

note &#xff08;1&#xff09;近似注意力&#xff1a; Routing Transformer采用K-means 聚类方法&#xff0c;针对Query和Key进行聚类&#xff0c;类中心向量集合为 { μ i } i 1 k \left\{\boldsymbol{\mu}_i\right\}_{i1}^k {μi​}i1k​ &#xff0c;其中k 是类中心的…

@RequestParam、@PathVariable、@RequestBody

1、中文翻译 RequestParam-请求参数、PathVariable-路径变量、RequestBody请求体 2、作用&#xff1a; Controller中获取前端传递的参数 3、从注解本身角度分析 3.1、PathVariable&#xff1a;路径变量 通过 PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形…

【组合回溯】Leetcode 131. 分割回文串

【组合回溯】Leetcode 131. 分割回文串 解法 切割组合回溯 ---------------&#x1f388;&#x1f388;131. 分割回文串 题目链接&#x1f388;&#x1f388;------------------- 解法 切割组合回溯 全局变量&#xff1a;result存储所有path的集合&#xff0c;path用来记录切…

文件系统 与 软硬链接

目录 一、文件系统 认识磁盘 磁盘存储的逻辑抽象结构 块组的内容 inode Table Data blocks inode Bitmap Block Bitmap Group Descriptor Table Super Block 理解目录 二、软硬链接 软链接​ 硬链接 硬链接数 一、文件系统 之前的博客主题叫做"进程打开文…

Redisinsight默认端口改成5540了!网上的8001都是错误的

Redisinsight 打开白屏解决方法 最近发现一个很讨厌的bug&#xff0c;就是redisinsight运行之后&#xff0c;不行了&#xff0c;在网上找到的所有资料里面&#xff0c;redis insight都是运行在8001端口&#xff0c;但是我现在发现&#xff0c;变成了5540 所以对应的docker-com…

Node.js与webpack(三)

上一节&#xff1a;Node.js与Webpack笔记&#xff08;二&#xff09;-CSDN博客 从0来一遍&#xff08;webpack项目&#xff09; 将之前的webpack 的纯开发配置&#xff0c;重新创建空白项目&#xff0c;重新做一遍&#xff0c;捋一遍思路防止加入生产模式时候弄混 1.创建文件夹…

SVM-支持向量机实验分析(软硬间隔,线性核,高斯核)

目录 一、前言 二、实验 0. 导入包 1. 支持向量机带来的效果 2. 软硬间隔 3. 非线性支持向量机 4. 核函数变换 线性核 高斯核 对比不同的gamma值对结果的影响 一、前言 学习本文之前要具有SVM支持向量机的理论知识&#xff0c;可以参考支持向量机&#xff08;Support Vector …

epoll怎么就高效了?

目录 摘要 1 举个栗子 2 从 epoll_create 开始 3 epoll_ctl&#xff0c;插入待监听的描述符 3.1 故事围绕 ep_item 展开 3.2 在 socket 等待队列上设置 epoll 回调 3.3 关系变得复杂 4 epoll_wait 等你 4.1 等待就绪事件 4.2 共享内存&#xff1f; 5 来了来了&#xf…

第 126 场 LeetCode 双周赛题解

A 求出加密整数的和 模拟 class Solution { public:int sumOfEncryptedInt(vector<int> &nums) {int res 0;for (auto x: nums) {string s to_string(x);char ch *max_element(s.begin(), s.end());for (auto &c: s)c ch;res stoi(s);}return res;} };B 执行…

Java学习笔记(15)

JDK7前时间相关类 Date时间类 Simpledateformat Format 格式化 Parse 解析 默认格式 指定格式 EE&#xff1a;表示周几 Parse&#xff1a;把字符串时间转成date对象 注意&#xff1a;创建对象的格式要和字符串的格式一样 Calendar日历类 不能创建对象 Getinstance 获取当…

8款手机宝藏APP,每款都非常强大实用!

1. 综合AI工具箱——HuluAI 综合AI工具https://h5.cxyhub.com/?invitationhmeEo7 HuluAI是一款聚合式全能AI工具&#xff0c;完美接入官方正版GPT4.0和Midjourney绘画&#xff01;。除此之外&#xff0c;还拥有文心一言语言大模型和DallE3绘图功能。经过长时间的稳定运行&am…

【数据结构】深入理解AVL树:实现和应用

AVL树是一种自平衡的二叉搜索树&#xff0c;它能够保持良好的平衡性质&#xff0c;使得在最坏情况下的时间复杂度也能保持在对数级别。本文将深入介绍AVL树的原理、实现和应用&#xff0c;并通过示例代码演示其基本操作。 文章目录 什么是AVL树&#xff1f;AVL树的实现在AVL树…

Linux - 安装 Jenkins(详细教程)

目录 前言一、简介二、安装前准备三、下载与安装四、配置镜像地址五、启动与关闭六、常用插件的安装 前言 虽然说网上有很多关于 Jenkins 安装的教程&#xff0c;但是大部分都不够详细&#xff0c;或者是需要搭配 docker 或者 k8s 等进行安装&#xff0c;对于新手小白而已&…

2024人工智能四大趋势→

2023年&#xff0c;世人见证了ChatGPT在全球范围的大火。以生成式人工智能为代表的新一代人工智能问世&#xff0c;改变了人工智能&#xff08;AI&#xff09;技术与应用的发展轨迹&#xff0c;加速了人与AI的互动进程&#xff0c;是人工智能发展史上的新里程碑。2024年&#x…

职场中的“跨界思维”:如何拓宽你的职业发展道路?

在当今职场&#xff0c;单一技能的竞争已经越来越激烈&#xff0c;具备跨界思维的人才越来越受到企业的青睐。本文将探讨职场中的“跨界思维”&#xff0c;帮助您拓宽职业发展道路&#xff0c;提升自身竞争力。 一、什么是跨界思维&#xff1f; 跨界思维&#xff0c;顾名思义&a…

【重新定义matlab强大系列十八】Matlab深度学习长短期记忆 (LSTM) 网络生成文本

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

Etcd 介绍与使用(入门篇)

etcd 介绍 etcd 简介 etc &#xff08;基于 Go 语言实现&#xff0c;&#xff09;在 Linux 系统中是配置文件目录名&#xff1b;etcd 就是配置服务&#xff1b; etcd 诞生于 CoreOS 公司&#xff0c;最初用于解决集群管理系统中 os 升级时的分布式并发控制、配置文件的存储与分…

Bean的作用域、Bean的自动装配、注解自动装配 (Spring学习笔记五)

1、Bean 的作用域 官网上显示有六种 1、Bean的作用域默认的是singleton&#xff08;单例模式的实现&#xff09; 也可以显示的设置&#xff08;单例模式的实现&#xff09; <!--用scope可以设置Bean的作用域--><bean id"user2" class"com.li.pojo.Us…

Elasticsearch从入门到精通-05ES匹配查询

Elasticsearch从入门到精通-05ES匹配查询 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是程序员行走的鱼 &#x1f4d6; 本篇主要介绍和大家一块学习一下ES各种场景下的匹配查询,有助于我们在项目中进行综合使用 前提 创建索引并指定ik分词器: PUT /es_db {"…

[ Linux ] vim的使用(附:命令模式的常见命令列表)

1.下载安装 这里是在通过yum进行下载安装 yum install -y vim 2.了解 vim是一款编辑器&#xff0c;它具有多模式的特点 主要有&#xff1a;插入模式&#xff0c;命令模式&#xff0c;底行模式 3.使用 打开 vim 文件名 命令模式的常见命令列表 插入模式 按「 i 」切换…