Gitee图床挂了,使用 Python 脚本替换图片外链

前言

废话不多说,看我之前写的文章吧《一个由 gitee 当图床引发的惨案》


这篇文章鸽了大家快半年了[捂脸],本来自己是用 kotlin 写的这个脚本的,具体功能如下:

  • 获取某个阳光沙滩用户写的所有文章并将文章内容写入某个文件夹,同时记录文章 id 及标题信息
  • 将文章中的包含 Gitee 图床的所有图片文件上传至阳光沙滩文章图片服务器(阳光沙滩的图片上传的数量每天是有限制的,当时是找康师傅开了绿色通道,大家可以上传到自己的图床)并记录上传前的图片链接和上传后的图片外链链接
  • 读取之前保存的文章列表和图片链接映射文件,通过循环遍历替换图片链接,然后写入新的文章文件中
  • 将新的文章文件通过阳光沙滩的文章更新 api 重新发布

具体的实现思路就是上面讲的了,大家可以使用自己擅长的语言来实现,这里我就挑比较简单的 Python 语言来简单实现一下这个流程啦~

准备工作

前提条件

  • 熟悉通过浏览器控制台查看网站 Cookie

  • 您熟悉一门或多门编程语言(如 Java、Kotlin、Python 等)

  • 您已经安装了 Python 并设置了 Python 的环境变量

  • Pycharm(可选,您可以使用您喜欢的任何支持编辑器)

CodeLab

  • 新建一个工程

  • 在该工程下新建一个 article 文件夹用于代码和配置文件的存放

  • 在 article 文件夹下新建 GetSobArticle.py (获取文章内容)、ReplaceImgExternalLinks.py(替换图片外链)、externalLinksMapping.txt(图片外链映射文件) 文件

  • 引入 browser_cookie3 获取 Chrome 浏览器 Cookies 模块

    打开控制台程序输入 pip install browser_cookie3 并回车,无错误提示代表该模块安装成功。

  • 引入 requests 网络请求模块

    打开控制台程序输入 pip install requests 并回车,无错误提示代表该模块安装成功。

externalLinksMapping.txt

图片链接映射文件,待替换的图片链接和替换后的图片链接单独占一行,以 | (空格|空格)分隔。

1
2
https://images.sunofbeaches.com/content/2022_10_29/1036045909013561344.png | https://images.sunofbeaches.com/content/2021_10_21/900891270908477440.png
https://images.sunofbeaches.com/content/2022_11_04/1038211600806313984.gif | https://images.sunofbeaches.com/content/2021_10_10/896756440335646720.png

GetSobArticle.py

获取阳光沙滩用户的文章

Tips:https://api.sunofbeaches.com/ct/ucenter/article/ 该 api 只能获取当前阳光沙滩登录账号的原始文章内容,所以 articleId 必须是当前账号所发布的文章id。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import browser_cookie3
import requests

print("准备获取文章内容...")

# 阳光沙滩用户的文章id,如:https://www.sunofbeach.net/a/1588532931388956674 中 1588532931388956674 即为文章 id)
articleId = "1588532931388956674"
# 获取 .sunofbeach.net 域下的 Cookies
cookies = browser_cookie3.chrome(domain_name='.sunofbeach.net')
sobToken = ""

# 遍历 cookies,找到名为 sob_token 的 Cookie
for cookie in cookies:
cookieName = cookie.name
cookieValue = cookie.value
if cookieName == "sob_token":
sobToken = cookieValue

print("sob_token is " + sobToken)

# 获取阳光沙滩文章内容原始格式的 api
url = "https://api.sunofbeaches.com/ct/ucenter/article/" + articleId

# 阳光沙滩的 token(免登录)
headers = {'sob_token': sobToken}

print("准备就绪,开始获取文章内容...")

# 获取响应结果
response = requests.get(url=url, headers=headers)

print("服务器已响应,返回结果如下...")

print(response.text)

# 定义获取到的文章文件存放路径
articlePath = "../article/article.md"
# 以写的方式(write)打开文章文件
articleFile = open(articlePath, 'w')

# 转换为 json 格式
resultJson = response.json()

# 拿到 data 的内容
data = resultJson['data']

# 拿到 content 的内容
articleContent = data['content']

print("准备写入文章文件...")

# 写入文章内容到文件中
articleFile.write(articleContent)

print("文件写入完毕...")


通过图片外链映射文件批量替换文章中包含的图片外链(如果您的文章不是发布在阳光沙滩,可只使用这个脚本)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
print("准备读取图片外链映射配置文件...")

# 定义一个图片外链映射文件路径
externalLinksMappingPath = "../article/externalLinksMapping.txt"
# 以读的方式(默认为:read模式)打开图片外链映射文件
externalLinksMappingFile = open(externalLinksMappingPath)
# 按行读取文件内容
mappingList = externalLinksMappingFile.readlines()

print("准备读取文章文件内容...")

# 定义待读取的文章路径
articlePath = "../article/article.md"
# 以读的方式(默认为:read模式)打开文章路径
articleFile = open(articlePath)
# 读取文章文件内容
articleContent = articleFile.read()

print("准备替换图片外链...")

# 遍历图片外链映射集合
for links in mappingList:
# 按照自定义的分隔符拆分 待替换的外链和替换后的外链
linkArr = links.split(" | ")
# 替换外链
articleContent = articleContent.replace(linkArr[0], linkArr[1])

print("图片外链替换完毕,准备写入文件...")

# 定义修改后的文章文件路径
newArticlePath = "../article/newArticle.md"
# 以写的方式(write)打开修改后的文章文件
newArticleFile = open(newArticlePath, 'w')
# 将替换全部外链后的文章内容写入新的文章文件中
newArticleFile.write(articleContent)

print("文件写入完毕...")

食用方式

  • 运行 GetSobArticle.py 脚本(如果有本地文章文件可跳过该操作)

  • 运行 ReplaceImgExternalLinks.py 脚本,批量替换图片外链

结语

好啦,本次填坑就到这里,祝大家周末鱼块~


如果对你有帮助的话,欢迎一键三连+关注哦~


Gitee图床挂了,使用 Python 脚本替换图片外链
https://blog.funkt.cn/2022/11/11/1591318632136368130/
作者
anjiemo
发布于
2022年11月12日
许可协议
未经作者授权,禁止转载