Raven's Blog

2019/6/6--更换图床日志

2019/6/6--更换图床日志

自从微博图床挂了后,就迁移到了Github上,但是Github的速度实在太慢,今天尝试了下腾讯OSS,免费送了6个月的存储,之后的收费也还是可接受范围内。所以就迁移到腾讯咯。

2019/6/8 Update

没想到时隔两天,我又更换了图床,在评论区的“游客”建议下,我更换到了聚合图床(毕竟免费,虽然腾讯COS已经很便宜了),目前效果一样不错。

但是,我已经经历过两次图床迁移的痛苦了。picgo-migrate图床迁移插件还不够完善,有时候还不如我自己手动迁移。所以我觉得,自己动手撸一个迁移脚本。但是因为是赶制版本,所以肯定很简陋了。
同时只适合迁移到聚合图床上。

下面就来说一下怎么用脚本迁移吧。

1. 从typecho中导出你的Markdown文章

参考:http://ju.outofmemory.cn/entry/304277,说得很详细了,这里就不重复说明。

2. 获取聚合图床的API

注册聚合图床:https://www.superbed.cn,然后申请一天的免费会员,就可以获取api的token了。

如图:

3. 编写迁移脚本

先给出脚本

import os
import glob
import re
import requests
import json

def migrate_single_file(file_path):
    # step 1 读入content
    with open(file_path,'r',encoding='UTF-8') as f:
        file_content = f.read()

    # 下行根据自己需要删除,我在使用typecho2md时,多了<!--markdown-->的字符串
    file_content = file_content.replace(r'<!--markdown-->','')

    # step2 通过捕获组获取所有图片链接
    pattern = r'!\[.*\]\((https://typecho-blog.*?)\)'
    img_urls = re.findall(pattern,file_content)

    # 定义一个列表用来装新的url,即新上传到的图床的url
    new_img_ulrs = []

    # 配置上传json
    url = 'https://www.superbed.cn/upload'
    data = {'token':'xxxx',        # 写你的token
            'sync':'1',
            'src': '',
            'v':'2'
            }

    # step3 循环上传
    try:
        for img_url in img_urls:
            data['src'] = img_url
            r = requests.post(url, data)
            result = json.loads(r.text)
            print(result)
            if result['err'] == 0:
                new_img_ulrs.append(result['url'])
    except:
        pass

    # step4 替换url
    for idx,url in enumerate(img_urls):
        file_content = file_content.replace(url,new_img_ulrs[idx])

    # print 替换后的结果
    print(file_content)

    # 重新写入
    dir = os.path.dirname(file_path)
    base_name = os.path.basename(file_path).replace(r".md",'')
    new_file_name = os.path.join(dir,base_name+'_new.md')

    with open(new_file_name,'w',encoding='UTF-8') as f:
        f.write(file_content)
        
 # 需要迁移的目录
DIR = r'C:\Users\Raven\Desktop\blog\blog'
# 找到所有md文件
pattern = '*.md'
files = glob.glob(os.path.join(DIR,pattern))
print(files)

# 循环转
for file in files:
    migrate_single_file(file)

需要注意的有几点:

修改token为你的token。

迁移后的文档默认为源文档名后加后缀_new,如源文档test_md.md迁移后的文档名为test_new.md

ok,就酱了。两天迁移了两次图床,心塞。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »