Un module Node pour importer des données à partir d'un document papier Dropbox et le convertir en une structure de données json.
create app
à partir de la console développeurDropbox API
Full Dropbox
News Mixer
document id
papier Dropboxpar exemple, si l'URL de votre document Dropbox ressemble à
https://paper.dropbox.com/doc/Main-Title-vJdrjMJAHdgfHz0rl83Z
Ensuite, le dernier élément de chaîne après le dernier -
, lu de gauche à droite, est l'identifiant de votre document.
Dans cet exemple fictif, ce serait : vJdrjMJAHdgfHz0rl83Z
.
DROPBOX_ACCESS_TOKEN
à .env
Le projet utilise dotenv pour gérer les informations d'identification et les variables d'environnement.
À la racine du dépôt de dossiers, créez un fichier .env
, celui-ci est exclu du dépôt github par .gitignore
pour éviter les fuites d'informations d'identification.
Voici un exemple de format de fichier .env
, avec quelques informations d'identification fictives
# Dropbox credentials
DROPBOX_ACCESS_TOKEN=vJdrjMJAHdgfHz0rl83ZvJdrjMJAHdgfHz0rl83Z
DROPBOX_DOC_ID=vJdrjMJAHdgfHz0rl83Z
cloner ce dépôt
git clone [email protected]:bbc/dropbox-paper-to-json.git
cd dans le dossier
cd dropbox-paper-to-json
npm install
npm start
Cela enregistrera un fichier data.json
à la racine du projet.
installation npm
npm install dropbox-paper-to-json@git+ssh://[email protected]/bbc/dropbox-paper-to-json.git#master -save
Ajouter à votre base de code
//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 ) ) ;
} ) ;
Présentation générale de l'architecture du système
Le module utilise le module de nœud dpb-download-md
pour obtenir un papier dropbox sous forme de démarque en fonction d'un identifiant de papier dropbox et d'un jeton d'accès.
Comme le SDK officiel ne semblait pas disposer d'un moyen simple d'accéder au contenu d'un document papier Dropbox.
Le sous-module md-to-json/linear.js
prend le contenu d'un fichier markdown sous forme de chaîne et le convertit en un tableau d'objets, représentant des éléments markdown.
il s'agit d'une structure de données plate, sans imbrication, d'où la raison pour laquelle elle est parfois qualifiée de linéaire.
[
{
"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 "
},
...
]
Pour certains cas d'utilisation, il peut être utile d'imbriquer tous les éléments entre une balise h1 dans la prise h1 suivante en tant que frères et sœurs/enfants/éléments de cette balise.
Par exemple, la balise h1 peut contenir une balise h2, une balise p, un lien, etc.
De même, la balise h2 peut contenir tous les autres éléments jusqu'à la balise h2 ou h1 suivante.
REMARQUE La version papier de la boîte de dépôt du markdown ne représente correctement que les balises H1
et H2
, c'est pourquoi nous avons arrêté l'imbrication uniquement à deux niveaux pour ce cas d'utilisation. Mais il pourrait être imbriqué davantage s’il y avait un cas d’utilisation.
Cela se fait dans 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 "
}
]
},
...
}
Pour un exemple complet, voir md-to-json/examples/example_output.json
.
Comment exécuter l'environnement de développement
Convention de style de codage réf facultative, par exemple quel linter utiliser
Linting, crochet de pré-poussée github - facultatif
.eslintrc.json
Comment exécuter la construction
N / A ?
Comment effectuer des tests
Couverture de test minimale utilisant jest
pour les tests, pour exécuter des tests :
npm test
Comment déployer le code/l'application en test/staging/production
NA, c'est un module de nœud.
Malheureusement, le papier Dropbox a son propre défaut de démarque. Certaines des différences les plus pertinentes et les plus notables sont :
heading 1
, sont tous deux marqués h1
/ #
.Heading 3
est représenté en gras **
au lieu de h3
/ ###
. voir md-to-json/examples/test.md
comme exemple de fichier de démarque de saveur Dropbox.
H3
, puisque la démarque du papier Dropbox la représente en gras **
h3
à h6
comme non générées par la démarque papier dropbox. Analyse des balises de saveur github markdown pour les images, par exemple ![alt text](link url)
. Ceux-ci apparaissent sur leur propre ligne.
Analyse des balises de saveur github markdown pour les liens, par exemple [text](link url)
celles-ci apparaissent généralement dans le cadre d'un paragraphe, mais peuvent également apparaître dans leur propre ligne, ou dans le cadre d'un en-tête, etc.