五一期间花了一点点时间将微信朋友圈“移植”到博客相册,今天抽空整理了下这个过程,并记录。
归因
微信朋友圈14年左右开始使用,至今已经十年了,出于以下原因放弃:
- 不开放,只能微信里面,其他地方无法查看。
- 图片损伤,上传到朋友圈的照片会自动压缩,无法存储原图。
- 审查机制,不过多解释,虽然不喜欢讨论政治等敏感话题
- 永久存储,不确定哪一天微信会关闭
- 无法发链接,格式太受限
- 无法更新,过往内容无法更新
我需要的“朋友圈”
- 开放的,输入网址即可访问,而非仅限于在微信内
- 内容自由的,自己可控的
- 安全的,内容存储于私密仓库,安全,易备份。
- 格式自由,虽然不需要富文本那么花俏,但是简单的 markdown 语法还是需要的
- 可更新
- 日志独立,可关联
博客相册生成
最起初,只有三五个相册的时候,相册页面的内容是纯手工写的。后来,当把朋友圈老照片都转移过来后,手工操作的话就不合适了。
因为相册的内容比较简单:
{日期}
{context}
{gallery}
{location}
因此,基于dev#autodoc
API 写了一个脚本:
let s:AUTODOC = SpaceVim#api#import('dev#autodoc')
let s:AUTODOC.autoformat = 0
function! Gengallery() abort
let s:AUTODOC.begin = '^<!-- wsdjeg.net gallery start -->$'
let s:AUTODOC.end = '^<!-- wsdjeg.net gallery end -->$'
let s:AUTODOC.content_func = function('s:generate_gallery')
call s:AUTODOC.update()
endfunction
function! s:generate_gallery() abort
let content = []
call extend(content, s:gallery_list())
let content += ['']
return content
endfunction
function! s:gallery_list() abort
let text = []
let gallery_dirs = globpath('docs/uploads', '*', 1, 1)
let previous_t = ''
for gpath in gallery_dirs
if empty(previous_t) || matchstr(gpath, '\d\+') !=# previous_t
call extend(text, s:dir_to_g(gpath), 0)
let previous_t = matchstr(gpath, '\d\+')
endif
endfor
return text
endfunction
function! s:dir_to_g(d) abort
let t = []
let y = str2nr(matchstr(a:d, '\d\d\d\d'))
let m = str2nr(matchstr(a:d, '\d\d\d\d\zs\d\d'))
let d = matchstr(a:d, '\d\d\d\d\d\d\zs\d\d')
call add(t, '### ' . y . '年' . m . '月' . (empty(d) ? '' : d . '日'))
call add(t, '')
" 如果存在 text.txt 文件,读取内容,写入文字
if filereadable(a:d . '/text.txt')
call extend(t, readfile(a:d . '/text.txt'))
call add(t, '')
endif
call add(t, '{% include image-gallery-nofilename.html folder="' . substitute(a:d[5:], '\', '/', 'g') . '" %}')
call add(t, '')
" 如果存在 location 文件,读取内容,写入地址
if filereadable(a:d . '/location')
call add(t, '> <i class="fa fa-map-marker"></i> ' . readfile(a:d . '/location')[0])
call add(t, '')
endif
return t
endfunction