告别简书

最近在把简书的内容导出, 以后简书只会用来转帖(也不发布). 他的好处是网上随便粘贴内容, 十分方便. 缺点至今没有处理, 就是他的内容管理.

  1. 没有分级目录: 目录多了会乱, 没有分级目录就很傻..
  2. 不便于内容搜索: 简书只适于发布, 然后你要搜索自己的内容? Google吧..
  3. 没有桌面客户端. 不知道为啥一直不弄个桌面客户端, 手机端倒是有了.

我还是继续用VSCode作笔记管理吧~

附带脚本: download_jianshu_Image.py, 指定输入目录(简书下载文件)以及输出目录(图片文件存放) 直接下载.
该脚本不能替换md文件中的链接. 不能更改图片后缀.

#! /usr/bin/env python
# -*- coding: UTF-8 -*-

# * Download images file from given website
# * Setup INPUT/OUTPUT firstly.
# * Modify from : https://cloud.tencent.com/developer/article/1599063

import re, requests, os

# 输入文件夹,即 简书导出的 .md 文件位置
INPUT_DIR = '/home/hom/Nutstore/VNote/Jianshu'
# 输出文件夹,即 文章里的图片的下载后的存放位置
OUTPUT_DIR = '/home/hom/Nutstore/VNote/Zimgs/Jianshu'

def ensure_dir_exist(dir_name):
    if not os.path.exists(dir_name):
        os.mkdir(dir_name)


def start_a_file(a_markdown_file, output_dir):
    f = open(a_markdown_file)
    line = f.readline()
    i = 0
    while 1:
        line = f.readline()
        if not line:
            break
        i = i + 1
        ln = line[:-1]
        process_line(ln, output_dir)
    f.close()
    return


def process_line(line, output_dir):
    if line == '':
        return
    img_list = re.findall(r"\!\[[^\]]*\]\((.+?)\)", line, re.S)
    for iu in img_list:
        img_url = iu.split('?')[0]
        print('[Process:]' + img_url)
        if img_url.startswith(('http://', 'https://')) and 'jianshu' in img_url:
            ensure_dir_exist(output_dir)
            download_image_file(img_url, output_dir)
        else:
            print("[ 不合法的 image url]:" + img_url)
    return


def download_image_file(url, output_dir):
    print("# 准备下载...", end=' ')
    r = requests.get(url)
    img = r.content
    print("准备写入...", end=' ')
    new_name = output_dir + "/" + os.path.basename(url)
    with open(new_name, 'wb') as f:
        f.write(img)
        print("写入完成!")
    return


def walk_dir(dir_name):
    for root, dirs, files in os.walk(dir_name):
        relative_name = root.replace(INPUT_DIR, '')
        print('  root={}'.format(relative_name))
        ensure_dir_exist(OUTPUT_DIR + "/" + relative_name)
        for f in files:
            print('   file = {}'.format(f))
            if f.split('.')[-1] != 'md':
                continue
            a_markdown_file = os.path.join(root, f)
            # 生成图片存放的文件夹。
            dir_name = (a_markdown_file.split('/')[-1]).split('.')[0]
            this_file_output_dir = OUTPUT_DIR + '/' + relative_name + '/' + dir_name
            print('   this_file_output_dir = {}'.format(this_file_output_dir))
            # 处理文件
            start_a_file(a_markdown_file, this_file_output_dir)


ensure_dir_exist(OUTPUT_DIR)
walk_dir(INPUT_DIR)

附带一个脚本, 可以将简书导出的笔记转为本地(包括下载图片, 转换本地地址). 支持单文件使用. 批处理请自行修改.

#! /usr/bin/env python
# -*- coding: UTF-8 -*-
#
# * 根据简书的md 文件, 下载图片文件, 用imghdr推断类型

import re, requests, os, sys, imghdr

OUTDIR = '/imgs/Jianshu'  # 替换md 中对应链接为本地目录位置.
DIRECTOUTDIR = False  # 设置False, 下载图片到md文件所在目录, True将下载到OUTDIR

def process_line(line, output_dir):
    if line == '':
        return
    img_list = re.findall(r"\!\[[^\]]*\]\((.+?)\)", line, re.S)
    outfnames = []
    for iu in img_list:
        img_url = iu.split('?')[0]
        print('[Process:]' + img_url)
        if img_url.startswith(('http://', 'https://')) and 'upload-images.jianshu' in img_url:
            dfile = download_image_file(img_url, output_dir)
            if dfile and not os.path.splitext(dfile)[1]:
                ofile = dfile+'.'+imghdr.what(dfile)
                os.rename(dfile, ofile)
                outfnames.append((iu,ofile))
            elif dfile:
                outfnames.append((iu,dfile))
        else:
            print("[ 非简书 image url]:" + img_url)
    return outfnames

def download_image_file(url, output_dir):
    print("# 准备下载...", end=' ')
    r = requests.get(url)
    img = r.content
    print("准备写入...", end=' ')
    new_name = output_dir + "/" + os.path.basename(url)
    with open(new_name, 'wb') as f:
        f.write(img)
        print("写入完成!")
        return new_name

def main():
    f = open(sys.argv[1])
    lines = f.readlines()
    f.close()

    with open(sys.argv[1]+'.tmp', 'w') as f:
        for line in lines:
            if DIRECTOUTDIR:
                out = process_line(line, DIRECTOUTDIR)
            else:
                if os.path.dirname(sys.argv[1]):
                    out = process_line(line, os.path.dirname(sys.argv[1]))
                else:
                    out = process_line(line, '.')

            # Replace markdown contents
            if out:
                for pair_img in out:
                    line = line.replace(pair_img[0], OUTDIR+os.sep+os.path.basename(pair_img[1]))
                f.write(line)
            else:
                f.write(line)
    os.rename(sys.argv[1]+'.tmp', sys.argv[1])

if __name__ == '__main__':
    main()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容