Eric's Blog 时光荏苒,岁月如梭

将微信朋友圈移至静态网站

2023-05-04
Eric Wong

五一期间花了一点点时间将微信朋友圈“移植”到博客相册,今天抽空整理了下这个过程,并记录。

归因

微信朋友圈14年左右开始使用,至今已经十年了,出于以下原因放弃:

  1. 不开放,只能微信里面,其他地方无法查看。
  2. 图片损伤,上传到朋友圈的照片会自动压缩,无法存储原图。
  3. 审查机制,不过多解释,虽然不喜欢讨论政治等敏感话题
  4. 永久存储,不确定哪一天微信会关闭
  5. 无法发链接,格式太受限
  6. 无法更新,过往内容无法更新

我需要的“朋友圈”

  1. 开放的,输入网址即可访问,而非仅限于在微信内
  2. 内容自由的,自己可控的
  3. 安全的,内容存储于私密仓库,安全,易备份。
  4. 格式自由,虽然不需要富文本那么花俏,但是简单的 markdown 语法还是需要的
  5. 可更新
  6. 日志独立,可关联

博客相册生成

最起初,只有三五个相册的时候,相册页面的内容是纯手工写的。后来,当把朋友圈老照片都转移过来后,手工操作的话就不合适了。

因为相册的内容比较简单:

{日期}

{context}

{gallery}

{location}

因此,基于dev#autodocAPI 写了一个脚本:

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

分享到:

评论

目前只支持使用邮件参与评论。

目录