写博客的同学都知道,图床的稳定性是命根子,本文介绍面对图床时,我所踩的坑以及自动化处理方案。

一、踩坑

昨天忙碌了一天下班,准备回家刷刷自己博客,结果发现之前上传到新浪的图床全部打不开了。一律404! WTF!

比如这个链接:[https://live.staticflickr.com/65535/52643973982_0133c94d85_o.jpg]

求助了万能网友,说让我改成 tvax1 前缀就能访问,试了一下果然可以。。。 Thanks god.

二、解决方案

听到我如上的描述,你可能会觉得使用微博做图床很危险,我自我感觉也是如此。

不过经过我的一番调研后,结论是:免费的、快捷访问、匿名上传可能只有微博图床一家了。

所以我也不打算切换图床了,我的方案是:

  • 继续使用微博图床
  • 定时使用脚本将图床内容同步到本地

三、脚本

  1. 将文件名中的空格移除掉

    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))
    
  2. 将博客文章里url链接的图片下载出来

    import os
    import re
    import shutil
    import urllib.request

    path = ‘/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}')
    
  1. 每天8点自动执行下载url的python脚本

你可以使用 launchd 来让你的 Python 脚本每天定时执行。

launchd 是 macOS 和 OS X 系统下的定时任务工具,可以在特定的时间间隔内自动执行特定的命令。

要使用 launchd 来执行你的 Python 脚本,你需要做以下几件事:

  1. 将你的 Python 脚本放在一个你想要的位置,例如 /Users/user/scripts/。

  2. 创建一个名为 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 点整时执行。

  1. 将刚才创建的文件放在 ~/Library/LaunchAgents/ 目录下。

  2. 打开终端,输入 launchctl load ~/Library/LaunchAgents/com.example.myscript.plist 来加载你的定时任务