Un módulo de Nodo para importar datos desde un documento en papel de Dropbox y convertirlo en una estructura de datos json.
create app
desde la consola de desarrolladorDropbox API
Full Dropbox
News Mixer
document id
en papel de Dropboxpor ejemplo, si la URL de su documento de Dropbox es algo así como
https://paper.dropbox.com/doc/Main-Title-vJdrjMJAHdgfHz0rl83Z
Luego, el último elemento de cadena después del último -
, leído de izquierda a derecha, es su identificación de documento.
En este ejemplo ficticio sería: vJdrjMJAHdgfHz0rl83Z
.
DROPBOX_ACCESS_TOKEN
a .env
El proyecto utiliza dotenv para manejar credenciales y variables de entorno.
En la raíz del repositorio de carpetas, cree un archivo .env
, que .gitignore
excluye del repositorio de github para evitar la filtración de credenciales.
A continuación se muestra un formato de ejemplo de archivo .env
, con algunas credenciales ficticias.
# Dropbox credentials
DROPBOX_ACCESS_TOKEN=vJdrjMJAHdgfHz0rl83ZvJdrjMJAHdgfHz0rl83Z
DROPBOX_DOC_ID=vJdrjMJAHdgfHz0rl83Z
clonar este repositorio
git clone [email protected]:bbc/dropbox-paper-to-json.git
cd en la carpeta
cd dropbox-paper-to-json
npm install
npm start
Esto guardará un archivo data.json
en la raíz del proyecto.
instalación npm
npm install dropbox-paper-to-json@git+ssh://[email protected]/bbc/dropbox-paper-to-json.git#master -save
Agregue a su 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 ) ) ;
} ) ;
Descripción general de alto nivel de la arquitectura del sistema.
El módulo utiliza el módulo de nodo dpb-download-md
para obtener un documento de Dropbox como descuento con una identificación de papel de Dropbox y un token de acceso.
Como el SDK oficial no parecía tener una forma sencilla de acceder al contenido de un documento en papel de Dropbox.
El submódulo md-to-json/linear.js
toma el contenido de un archivo de rebajas como una cadena y lo convierte en una matriz de objetos, que representan elementos de rebajas.
Es una estructura de datos plana, sin anidamiento, por lo que a veces se la denomina lineal.
[
{
"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 algunos casos de uso, puede resultar útil anidar todos los elementos entre una etiqueta h1 y la siguiente toma h1 como hermanos/hijos/elementos de esa etiqueta.
Por ejemplo, la etiqueta h1 podría contener h2, etiqueta p, enlace, etc.
Del mismo modo, la etiqueta h2 podría contener todos los demás elementos hasta la siguiente etiqueta h2 o h1.
NOTA: El tipo de descuento de papel de Dropbox solo representa correctamente las etiquetas H1
y H2
, por lo que detuvimos el anidamiento solo en dos niveles para este caso de uso. Pero podría anidarse aún más si existiera un caso de uso para ello.
Esto se hace en 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 ver un ejemplo completo, consulte md-to-json/examples/example_output.json
.
Cómo ejecutar el entorno de desarrollo
Referencia de convención de estilo de codificación opcional, por ejemplo, qué linter usar
Linting, gancho de preempuje de github - opcional
.eslintrc.json
Cómo ejecutar la compilación
N / A ?
Cómo realizar pruebas
Cobertura de prueba mínima usando jest
para probar, para ejecutar pruebas:
npm test
Cómo implementar el código/aplicación en prueba/puesta en escena/producción
NA, es un módulo de nodo.
Desafortunadamente, el papel de Dropbox tiene su propio defecto de rebajas. Algunas de las diferencias más relevantes y notables son:
heading 1
están marcados como h1
/ #
.Heading 3
se representa en negrita **
en lugar de h3
/ ###
. consulte md-to-json/examples/test.md
como ejemplo de un archivo de rebajas de tipo de Dropbox.
H3
, ya que la reducción de papel de Dropbox la representa en negrita **
h3
a h6
como no generadas por las rebajas de papel de Dropbox. Análisis de etiquetas de sabor de github de rebajas para imágenes, por ejemplo ![alt text](link url)
. Estos aparecen en su propia línea.
Análisis de etiquetas de tipo Markdown de github para enlaces, por ejemplo, [text](link url)
, que generalmente aparecen como parte de un párrafo, pero también pueden aparecer en su propia línea, o como parte de un encabezado, etc.