写博客的同学都知道,图床的稳定性是命根子,本文介绍面对图床时,我所踩的坑以及自动化处理方案。
一、踩坑
昨天忙碌了一天下班,准备回家刷刷自己博客,结果发现之前上传到新浪的图床全部打不开了。一律404! WTF!
比如这个链接:[https://live.staticflickr.com/65535/52643973982_0133c94d85_o.jpg]
求助了万能网友,说让我改成 tvax1 前缀就能访问,试了一下果然可以。。。 Thanks god.
二、解决方案
听到我如上的描述,你可能会觉得使用微博做图床很危险,我自我感觉也是如此。
不过经过我的一番调研后,结论是:免费的、快捷访问、匿名上传可能只有微博图床一家了。
所以我也不打算切换图床了,我的方案是:
- 继续使用微博图床
- 定时使用脚本将图床内容同步到本地
三、脚本
将文件名中的空格移除掉
import os
path = ‘/Users/blibli/Desktop/hexo-blog-alex/source/_posts/‘
遍历目录 A 下的所有文件
for file in os.listdir(path):
# 构建完整的文件路径 file_path = os.path.join(path, file) # 如果文件名以 .md 结尾,则对文件名进行处理 if file.endswith('.md'): # 去除文件名中的空格 new_file_name = file.replace(' ', '') # 使用 os.rename 函数修改文件名 os.rename(file_path, os.path.join(path, new_file_name))
将博客文章里url链接的图片下载出来
import os
import re
import shutil
import urllib.requestpath = ‘/Users/blibli/Desktop/hexo-blog-alex/source/_posts/‘
download_path = ‘/Users/blibli/Desktop/hexo-blog-alex/source/image/‘遍历文件夹内的所有 .md 文件
for file_name in os.listdir(path):
add_path = file_name.replace('.md', '') file_name = path + file_name if file_name.endswith('.md'): # 读取文件内容 with open(file_name, 'r') as f: file_content = f.read() # 使用正则表达式提取所有以 "https://tvax1.sinaimg.cn/" 开头的链接 image_urls = re.findall(r'https://tvax1.sinaimg.cn/[^\s]*', file_content) print(image_urls) # 下载图片并将其复制到指定文件夹 for url in image_urls: url = url[:-1] response = urllib.request.urlopen(url) image_path = download_path + add_path + '/' if not os.path.exists(image_path): os.makedirs(image_path) cur_image = url.split('/')[-1] for file_image_name in os.listdir(image_path): if file_image_name == cur_image : # 如果已经下载过,就不用下载了 continue file = open(image_path + cur_image , 'wb') file.write(response.read()) file.close() print(f'Successfully downloaded {url}')
- 每天8点自动执行下载url的python脚本
你可以使用 launchd 来让你的 Python 脚本每天定时执行。
launchd 是 macOS 和 OS X 系统下的定时任务工具,可以在特定的时间间隔内自动执行特定的命令。
要使用 launchd 来执行你的 Python 脚本,你需要做以下几件事:
将你的 Python 脚本放在一个你想要的位置,例如 /Users/user/scripts/。
创建一个名为 com.example.myscript.plist 的文件,内容如下:
Label com.example.myscript Program /usr/bin/python3 ProgramArguments /Users/user/scripts/myscript.py StartCalendarInterval Hour 20 Minute 0
这个文件中包含了你的 Python 脚本的执行信息,例如执行脚本的路径、使用的 Python 版本等。其中,StartCalendarInterval 字段指定了脚本执行的时间,即每天的 20 点整时执行。
将刚才创建的文件放在 ~/Library/LaunchAgents/ 目录下。
打开终端,输入 launchctl load ~/Library/LaunchAgents/com.example.myscript.plist 来加载你的定时任务