一個 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)
這些鏈接通常顯示為段落的一部分,但也可能出現在自己的行中,或作為標題的一部分等。