Модуль Node для импорта данных из бумажного документа Dropbox и преобразования их в структуру данных json.
create app
из консоли разработчикаDropbox API
Full Dropbox
News Mixer
document id
Dropboxнапример, если URL-адрес вашего Dropbox-бумаги выглядит примерно так:
https://paper.dropbox.com/doc/Main-Title-vJdrjMJAHdgfHz0rl83Z
Тогда последний строковый элемент после последнего -
, читаемый слева направо, будет идентификатором вашего документа.
В этом вымышленном примере это будет: vJdrjMJAHdgfHz0rl83Z
.
DROPBOX_ACCESS_TOKEN
в .env
В проекте используется dotenv для работы с учетными данными и переменными среды.
В корне репозитория папки создайте файл .env
, он исключен из репозитория github с помощью .gitignore
, чтобы избежать утечки учетных данных.
Вот пример формата файла .env
с некоторыми вымышленными учетными данными.
# Dropbox credentials
DROPBOX_ACCESS_TOKEN=vJdrjMJAHdgfHz0rl83ZvJdrjMJAHdgfHz0rl83Z
DROPBOX_DOC_ID=vJdrjMJAHdgfHz0rl83Z
клонировать этот репозиторий
git clone [email protected]:bbc/dropbox-paper-to-json.git
перейти в папку
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 в качестве уценки с учетом идентификатора бумаги Dropbox и токена доступа.
Поскольку у официального SDK, похоже, не было простого способа получить доступ к содержимому бумажного документа Dropbox.
Подмодуль md-to-json/linear.js
принимает содержимое файла уценки в виде строки и преобразует его в массив объектов, представляющих элементы уценки.
это плоская структура данных без вложенности, поэтому ее иногда называют линейной.
[
{
"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 правильно представляет только теги 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
.
Как запустить среду разработки
Ссылка на соглашение о стиле кодирования необязательна, например, какой линтер использовать.
Линтинг, хук предварительной отправки github — необязательно
.eslintrc.json
Как запустить сборку
Н.А. ?
Как проводить тесты
Минимальное тестовое покрытие с использованием jest
для тестирования, для запуска тестов:
npm test
Как развернуть код/приложение в тестовой/промежуточной/производственной среде
NA, это узловой модуль.
К сожалению, у бумаги Dropbox есть свой недостаток — уценка. Некоторые из наиболее важных и заметных отличий:
heading 1
отмечены h1
/ #
.Heading 3
выделен жирным шрифтом **
вместо h3
/ ###
. см. md-to-json/examples/test.md
как пример файла уценки Dropbox.
H3
, поскольку уценка бумаги в Dropbox выделена жирным шрифтом **
h3
до h6
как не созданных уценкой бумаги Dropbox. Анализ тегов уценки github для изображений, например ![alt text](link url)
. Они появляются в отдельной строке.
Анализ тегов уценки github для ссылок, например [text](link url)
Обычно они появляются как часть абзаца, но также могут отображаться в отдельной строке или как часть заголовка и т. д.