将文件夹的 markdown 文件中的所有图片上传到 b 站图床

本贴最后更新于 189 天前,其中的信息可能已经时移俗易

优点:

自带 CDN,大厂基本不会被删(但还是建议本地保留一份),加载速度极快

缺点:

网上发布会有跨域问题

下载:https://github.com/xlzy520/typora-plugin-bilibili/releases 中的 main.exe 程序到本地

创建 python 脚本 MarkdownPicTOBilibiliPic.py

import os
import re
import subprocess

def get_md_files(folder_path):
    """获取指定文件夹下所有.md文件的路径"""
    md_files = []
    for root, _, files in os.walk(folder_path):
        for file in files:
            if file.endswith(".md"):
                md_files.append(os.path.join(root, file))
    return md_files

def extract_image_urls(md_file_path):
    """从.md文件中提取所有图片的相对链接"""
    pattern = r'!\[.*?\]\((.*?)\)'  # 匹配 ![标识](url)
    urls = []
    with open(md_file_path, 'r', encoding='utf-8') as file:
        content = file.read()
        urls = re.findall(pattern, content)
    return urls, content

def get_absolute_path(md_file_path, relative_url):
    """根据.md文件路径和相对图片链接生成图片的绝对路径"""
    md_dir = os.path.dirname(md_file_path)
    absolute_path = os.path.normpath(os.path.join(md_dir, relative_url))
    return absolute_path

def replace_urls_in_content(content, old_new_url_map):
    """将文件内容中的旧URL替换为新URL"""
    for old_url, new_url in old_new_url_map.items():
        content = content.replace(old_url, new_url)
    return content

def process_md_files(folder_path, main_exe_path, token, csrf):
    """核心功能实现"""
    md_files = get_md_files(folder_path)
    print(f"找到 {len(md_files)} 个.md文件:")
    for md_file in md_files:
        print(f"- {md_file}")
    
    for md_file_path in md_files:
        print(f"\n处理文件: {md_file_path}")
        # 提取图片相对URL和文件内容
        urls, content = extract_image_urls(md_file_path)
        print(f"找到 {len(urls)} 个图片链接。")

        # URL映射:{相对URL: 新URL}
        old_new_url_map = {}
        
        for relative_url in urls:
            # 获取图片的绝对路径
            absolute_path = get_absolute_path(md_file_path, relative_url)
            print(f"相对路径: {relative_url} -> 绝对路径: {absolute_path}")

            # 调用main.exe,获取新的图片URL
            command = f'"{main_exe_path}" token={token} csrf={csrf} "{absolute_path}"'
            print(f"执行命令: {command}")
            
            try:
                result = subprocess.run(command, capture_output=True, text=True, shell=True)
                new_url = result.stdout.strip()  # 假设返回的URL在stdout中
                if new_url:
                    old_new_url_map[relative_url] = new_url
                    print(f"新图片URL: {new_url}")
                else:
                    print(f"未能获取新URL,跳过: {relative_url}")
            except Exception as e:
                print(f"执行命令时出错: {e}")

        # 替换内容中的旧URL为新URL
        updated_content = replace_urls_in_content(content, old_new_url_map)

        # 将更新后的内容写回.md文件
        with open(md_file_path, 'w', encoding='utf-8') as file:
            file.write(updated_content)
        print(f"文件更新完成:{md_file_path}")

if __name__ == "__main__":
    # 文件夹路径(需要遍历.md文件的目录)
    folder_path = r"C:/Users/t295/Downloads/ (1)"
    
    # main.exe路径
    main_exe_path = r"C:/Users/t295/Downloads/main.exe"
    
    # Token和csrf参数
    token = "f45d0aad%2C175房东0f24%2A11CjD57FWOhgdLG43LXCsczMMWPfE14HdoiJ1adu47okRjUqXl-9bDZGX8nvxbml8LIgESVkxMbEJzSzE0eldYakVwaUxKeThnbll5bFBFV1JLcTF4R0RxcnBuSjVRTDNOcDB1NXVhMG0tMFpvRVJkMXdCRncxckFHMnB6ZGJYRGxnMUNBZ0ZuU0p3IIEC"
    csrf = "7c703b2f1f27f52反对f5c17409850f"

    process_md_files(folder_path, main_exe_path, token, csrf)

修改内容:

# markdown文件夹路径(需要遍历.md文件的目录)
    folder_path = r"C:/Users/t295/Downloads/markdown文件夹/"
# main.exe路径
main_exe_path = r"C:/Users/t295/Downloads/main.exe"

# Token和csrf参数
token = "f45d0aad%2C170f24%WOhgdLG43LXCsczMMWPfE14HdoiJ1adu47okRjUqXl-9bDZGX8nvxbml8LIgESVkxMbEJzSzE0eldYakVwaUxKeThnbll5bFBFV1JLcTF4R0RxcnBuSjVRTDNOcDB1NXVhMG0tMFpvRVJkMXdCRncxckFHMnB6ZGJYRGxnMUNBZ0ZuU0p3IIEC"
csrf = "7c703b2f1f27ff59850f"

注意其中的 cmd 命令将路径进行替换

同时将 token 和 csrf 进行替换,具体位置在 b 站中登录后,在应用程序(F12⇒ 应用程序)中查看 cookie 了,两个值分别对应:推荐使用浏览器插件 Cookie-Editor,更加方便:

  1. SESSDATA⇒token
  2. bili_jct⇒csrf

最后运行脚本即可,最后随机打开一个查看效果:

250108_105055.png

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    346 引用 • 760 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1432 回帖 • 1 关注
  • CodeMirror
    2 引用 • 17 回帖 • 174 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 682 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖 • 2 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    85 引用 • 324 回帖
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    42 引用 • 130 回帖 • 253 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    134 引用 • 1127 回帖 • 108 关注
  • Access
    1 引用 • 3 回帖 • 1 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 368 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 4 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 1 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    186 引用 • 1021 回帖
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 179 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 563 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 3 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 1 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 445 关注
  • danl
    180 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 643 关注
  • 印象笔记
    3 引用 • 16 回帖 • 2 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    89 引用 • 1251 回帖 • 393 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 118 关注