前言
废话不多说,看我之前写的文章吧《一个由 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
图片链接映射文件,待替换的图片链接和替换后的图片链接单独占一行,以 |
(空格|空格)分隔。
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。
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("文件写入完毕...")
ReplaceImgExternalLinks.py
通过图片外链映射文件批量替换文章中包含的图片外链(如果您的文章不是发布在阳光沙滩,可只使用这个脚本)。
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 脚本,批量替换图片外链
结语
好啦,本次填坑就到这里,祝大家周末鱼块~
如果对你有帮助的话,欢迎一键三连+关注哦~