我的书签都是存放在 espial 应用上,他的导出功能只能导出兼容 pinboard 的 JSON 数据,但是大部分书签应用支持的都是标准的 netscape 书签数据,就是常见的 .html
类型的书签数据。
为了能在这这些应用上导入我的书签数据,需要将 espial 数据进行转换。
标准的 netscape 书签数据格式可以参考微软文档:
通用数据两边基本都是有的,通过简单的脚本就可以处理
import fs from 'fs'
// pinboard json 数据文件
const rawFile = 'bookmarks.json'
// 输出的 netscape 标准 html 文件
const outputHTML = 'bookmarks.html'
const pinboardData = JSON.parse(fs.readFileSync(rawFile).toString())
// netscape 标准数据头部内容
fs.writeFileSync(outputHTML, `<!DOCTYPE NETSCAPE-Bookmark-file-1>
<!--This is an automatically generated file.
It will be read and overwritten.
Do Not Edit! -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<Title>Bookmarks</Title>
<H1>Bookmarks</H1>
<DL>
`)
for (const item of pinboardData) {
// 核心数据只有链接、新增时间、标签、标题、描述
const url = item.href
const date = new Date(item.time).valueOf() // netscape 书签的日期是 unix timestamp 格式
const tags = item.tags.split(' ').join(',') // netscape 书签标签用 , 分割
const title = item.description
const description = item.extended
const dd = `<DT><A HREF="${url}" ADD_DATE="${date}" TAGS="${tags}">${title}</A>
`
fs.appendFileSync(outputHTML, dd)
if (description) {
// 如果原来填写了描述,补充描述数据
fs.appendFileSync(outputHTML, `<DD>${description}\n`)
}
}
// 输出文件
fs.appendFileSync(outputHTML, '</DL>\n')
生成的 html 文件可以在绝大部分书签类的应用中使用。