一个 Node 模块,用于从 Dropbox 纸质文档导入数据并将其转换为 json 数据结构。
create app
Dropbox API
Full Dropbox
News Mixer
document id
例如,如果您的保管箱文件的网址类似于
https://paper.dropbox.com/doc/Main-Title-vJdrjMJAHdgfHz0rl83Z
然后最后一个-
之后的最后一个字符串元素(从左到右读取)就是您的文档 ID。
在这个虚构的示例中,它将是: vJdrjMJAHdgfHz0rl83Z
。
DROPBOX_ACCESS_TOKEN
添加到.env
该项目使用 dotenv 来处理凭据和环境变量。
在文件夹 repo 的根目录中创建一个.env
文件,该文件被.gitignore
从 github 存储库中排除,以避免泄露凭据。
这是.env
文件的示例格式,其中包含一些虚构的凭据
# Dropbox credentials
DROPBOX_ACCESS_TOKEN=vJdrjMJAHdgfHz0rl83ZvJdrjMJAHdgfHz0rl83Z
DROPBOX_DOC_ID=vJdrjMJAHdgfHz0rl83Z
克隆这个仓库
git clone [email protected]:bbc/dropbox-paper-to-json.git
cd 进入文件夹
cd dropbox-paper-to-json
npm install
npm start
这将在项目的根目录中保存一个data.json
文件。
npm 安装
npm install dropbox-paper-to-json@git+ssh://[email protected]/bbc/dropbox-paper-to-json.git#master -save
添加到您的代码库
//if using dotenv for environment variable credentials for dropbox paper
require ( 'dotenv' ) . config ( ) ;
// optional if you want to write the resulting json
const fs = require ( 'fs' ) ;
// require module
const dbpMdToJson = require ( 'dropbox-paper-to-json' ) ;
dbpMdToJson ( {
accessToken : process . env . DROPBOX_ACCESS_TOKEN ,
dbp_doc_id : process . env . DROPBOX_DOC_ID ,
// default for nested === true
nested : true
} ) . then ( ( data ) => {
console . log ( `done Dropbox Paper to JSON conversion` ) ;
// optional: now do something with the data
fs . writeFileSync ( './data.json' , JSON . stringify ( data , null , 2 ) ) ;
} ) ;
系统架构的高级概述
该模块使用dpb-download-md
节点模块在给定 dropbox paper id 和访问令牌的情况下以 markdown 形式获取 dropbox paper。
由于官方 SDK 似乎没有直接的方法来获取 Dropbox 纸质文档内容。
子模块md-to-json/linear.js
将 Markdown 文件的内容作为字符串,并将其转换为对象数组,表示 Markdown 元素。
它是一种平面数据结构,没有嵌套,因此有时被称为线性。
[
{
"text" : " Chapter 1 " ,
"type" : " h1 "
},
{
"text" : " Text " ,
"type" : " h2 "
},
{
"text" : " vitae elementum velit urna id mi. Sed sodales arcu mi, eu condimentum tellus ornare non. Aliquam non mauris purus. Cras a dignissim tellus. Cras pharetra, felis et convallis tristique, sapien augue interdum ipsum, aliquet rhoncus enim diam vitae eros. Cras ullamcorper, lectus id commodo volutpat, odio urna venenatis tellus, vitae vehicula sapien velit eu purus. Pellentesque a feugiat ex. Proin volutpat congue libero vitae malesuada. " ,
"type" : " p "
},
{
"text" : " Video " ,
"type" : " h2 "
},
...
]
对于某些用例,将 h1 标签之间的所有元素嵌套到下一个 h1 标签作为该标签的同级/子元素/元素可能会很有效。
例如,h1 标签可以包含 h2、p 标签、链接等。
同样,h2 标签可以包含直到下一个 h2 或 h1 标签的所有其他元素。
注意dropbox paper 风格的 markdown 仅正确代表H1
和H2
标签,因此我们在此用例中仅在两个级别停止嵌套。但如果有用例的话,它可以进一步嵌套。
这是在md-to-json/index.js
中完成的
{
"title" : " TEST CMS " ,
"elements" : [
{
"text" : " Chapter 1 " ,
"type" : " h1 " ,
"elements" : [
{
"text" : " some text element between h1 and h2 tags " ,
"type" : " p "
},
{
"text" : " text " ,
"type" : " h2 " ,
"elements" : [
{
"text" : " vitae elementum velit urna id mi. Sed sodales arcu mi, eu condimentum tell. " ,
"type" : " p "
}
]
},
...
}
有关完整示例,请参阅md-to-json/examples/example_output.json
。
如何运行开发环境
编码风格约定 ref 可选,例如使用哪个 linter
Linting、github 预推送挂钩 - 可选
.eslintrc.json
如何运行构建
不适用?
如何进行测试
使用jest
进行测试以运行测试的最小测试覆盖率:
npm test
如何将代码/应用程序部署到测试/登台/生产中
NA,它是一个节点模块。
不幸的是,Dropbox paper 有其自身的 Markdown 缺陷。一些最相关和显着的差异是:
heading 1
元素都标记为h1
/ #
。Heading 3
表示为粗体**
而不是h3
/ ###
。请参阅md-to-json/examples/test.md
作为 Dropbox 风味 Markdown 文件的示例。
H3
标签,因为 dropbox paper markdown 将其表示为粗体**
h3
到h6
因为不是由 dropbox paper markdown 生成的。解析图像的 markdown github 风味标签,例如![alt text](link url)
。这些出现在自己的行中。
解析 markdown github 风味标签以获取链接,例如[text](link url)
这些链接通常显示为段落的一部分,但也可能出现在自己的行中,或作为标题的一部分等。