Um módulo Node para importar dados de um documento em papel dropbox e convertê-los em uma estrutura de dados json.
create app
no console do desenvolvedorDropbox API
Full Dropbox
News Mixer
document id
em papel da caixa de depósitopor exemplo, se o URL do seu papel dropbox for algo como
https://paper.dropbox.com/doc/Main-Title-vJdrjMJAHdgfHz0rl83Z
Então, o último elemento de string após o último -
, lido da esquerda para a direita, é o ID do seu documento.
Neste exemplo fictício seria: vJdrjMJAHdgfHz0rl83Z
.
DROPBOX_ACCESS_TOKEN
a .env
O projeto usa dotenv para lidar com credenciais e variáveis de ambiente.
Na raiz do repositório da pasta, crie um arquivo .env
, que é excluído do repositório do github por .gitignore
para evitar vazamento de credenciais.
Aqui está um exemplo de formato de arquivo .env
, com algumas credenciais fictícias
# Dropbox credentials
DROPBOX_ACCESS_TOKEN=vJdrjMJAHdgfHz0rl83ZvJdrjMJAHdgfHz0rl83Z
DROPBOX_DOC_ID=vJdrjMJAHdgfHz0rl83Z
clonar este repositório
git clone [email protected]:bbc/dropbox-paper-to-json.git
cd na pasta
cd dropbox-paper-to-json
npm install
npm start
Isso salvará um arquivo data.json
na raiz do projeto.
instalação npm
npm install dropbox-paper-to-json@git+ssh://[email protected]/bbc/dropbox-paper-to-json.git#master -save
Adicione à sua base de código
//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 ) ) ;
} ) ;
Visão geral de alto nível da arquitetura do sistema
O módulo usa o módulo do nó dpb-download-md
para obter um papel da caixa de depósito como desconto, dado um ID de papel da caixa de depósito e um token de acesso.
Como o SDK oficial não parecia ter uma maneira direta de acessar o conteúdo de um documento em papel da caixa de depósito.
O submódulo md-to-json/linear.js
pega o conteúdo de um arquivo markdown como uma string e o converte em uma matriz de objetos, representando elementos markdown.
é uma estrutura de dados plana, sem aninhamento, por isso às vezes é chamada de linear.
[
{
"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 "
},
...
]
Para alguns casos de uso, pode ser útil aninhar todos os elementos entre uma tag h1 e o próximo h1 como irmãos/filhos/elementos dessa tag.
Por exemplo, a tag h1 pode conter h2, tag p, link etc.
Da mesma forma, a tag h2 pode conter todos os outros elementos até a próxima tag h2 ou h1.
NOTA O tipo de markdown do papel dropbox representa corretamente apenas as tags H1
e H2
, por isso interrompemos o aninhamento apenas em dois níveis para este caso de uso. Mas poderia ser aninhado ainda mais caso houvesse um caso de uso para isso.
Isso é feito em 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 "
}
]
},
...
}
Para obter um exemplo completo, consulte md-to-json/examples/example_output.json
.
Como executar o ambiente de desenvolvimento
Convenção de estilo de codificação ref opcional, por exemplo, qual linter usar
Linting, gancho pré-push do github - opcional
.eslintrc.json
Como executar a compilação
N / D ?
Como realizar testes
Cobertura mínima de teste usando jest
para teste, para executar testes:
npm test
Como implantar o código/aplicativo em teste/preparação/produção
NA, é um módulo de nó.
Infelizmente, o papel do Dropbox tem sua própria falha de desconto. Algumas das diferenças mais relevantes e notáveis são:
heading 1
estão ambos marcados como h1
/ #
.Heading 3
é representado em negrito **
em vez de h3
/ ###
. veja md-to-json/examples/test.md
como um exemplo de arquivo markdown de sabor de caixa de depósito.
H3
, já que a marcação do papel dropbox a representa em negrito **
h3
a h6
como não geradas pelo dropbox paper markdown. Analisando tags de sabor markdown do github para imagens, por exemplo ![alt text](link url)
. Eles aparecem em sua própria linha.
Analisando tags de sabor markdown do github para links, por exemplo, [text](link url)
, geralmente aparecem como parte de um parágrafo, mas também podem aparecer em sua própria linha ou como parte de um título, etc.