Ein Node-Modul zum Importieren von Daten aus einem Dropbox-Papierdokument und zum Konvertieren dieser in eine JSON-Datenstruktur.
create app
über die EntwicklerkonsoleDropbox API
entschiedenFull Dropbox
News Mixer
document id
z. B. wenn die URL Ihres Dropbox-Papiers etwa so lautet
https://paper.dropbox.com/doc/Main-Title-vJdrjMJAHdgfHz0rl83Z
Dann ist das letzte Zeichenfolgenelement nach dem letzten -
, von links nach rechts gelesen, Ihre Dokument-ID.
In diesem fiktiven Beispiel wäre es: vJdrjMJAHdgfHz0rl83Z
.
DROPBOX_ACCESS_TOKEN
zu .env
hinzuDas Projekt verwendet dotenv, um Anmeldeinformationen und Umgebungsvariablen zu verarbeiten.
Erstellen Sie im Stammverzeichnis des Ordner-Repo eine .env
Datei. Diese wird durch .gitignore
aus dem Github-Repo ausgeschlossen, um den Verlust von Anmeldeinformationen zu vermeiden.
Hier ist ein Beispielformat einer .env
Datei mit einigen fiktiven Anmeldeinformationen
# Dropbox credentials
DROPBOX_ACCESS_TOKEN=vJdrjMJAHdgfHz0rl83ZvJdrjMJAHdgfHz0rl83Z
DROPBOX_DOC_ID=vJdrjMJAHdgfHz0rl83Z
Klonen Sie dieses Repo
git clone [email protected]:bbc/dropbox-paper-to-json.git
CD in den Ordner kopieren
cd dropbox-paper-to-json
npm install
npm start
Dadurch wird eine data.json
Datei im Stammverzeichnis des Projekts gespeichert.
npm installieren
npm install dropbox-paper-to-json@git+ssh://[email protected]/bbc/dropbox-paper-to-json.git#master -save
Erweitern Sie Ihre Codebasis
//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 ) ) ;
} ) ;
Allgemeiner Überblick über die Systemarchitektur
Das Modul verwendet das Knotenmodul dpb-download-md
um ein Dropbox-Papier als Markdown mit einer Dropbox-Papier-ID und einem Zugriffstoken zu erhalten.
Da das offizielle SDK offenbar keine direkte Möglichkeit hatte, auf den Inhalt eines Dropbox-Papierdokuments zuzugreifen.
Das Submodul md-to-json/linear.js
nimmt den Inhalt einer Markdown-Datei als String und wandelt ihn in ein Array von Objekten um, die Markdown-Elemente darstellen.
Es handelt sich um eine flache Datenstruktur ohne Verschachtelung, weshalb sie manchmal auch als linear bezeichnet wird.
[
{
"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 "
},
...
]
Für einige Anwendungsfälle kann es hilfreich sein, alle Elemente zwischen einem h1-Tag und dem nächsten h1-Tag als Geschwister/untergeordnete Elemente/Elemente dieses Tags zu verschachteln.
Beispielsweise könnte das h1-Tag ein h2-Tag, ein p-Tag, einen Link usw. enthalten.
Ebenso könnte das h2-Tag alle anderen Elemente bis zum nächsten h2- oder h1-Tag enthalten.
HINWEIS: Die Dropbox-Papiervariante von Markdown stellt nur H1
und H2
-Tags richtig dar, weshalb wir die Verschachtelung für diesen Anwendungsfall nur auf zwei Ebenen gestoppt haben. Es könnte jedoch weiter verschachtelt werden, falls es einen Anwendungsfall dafür gibt.
Dies erfolgt in 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 "
}
]
},
...
}
Ein vollständiges Beispiel finden Sie md-to-json/examples/example_output.json
.
So führen Sie die Entwicklungsumgebung aus
Codierungsstilkonvention ref optional, z. B. welcher Linter verwendet werden soll
Linting, Github-Pre-Push-Hook – optional
.eslintrc.json
So führen Sie Build aus
N / A ?
So führen Sie Tests durch
Minimale Testabdeckung mit jest
zum Testen, um Tests auszuführen:
npm test
So stellen Sie den Code/die App in Test/Staging/Produktion bereit
NA, es ist ein Knotenmodul.
Leider hat Dropbox-Papier seinen eigenen Preisnachlassfehler. Einige der relevantesten und bemerkenswertesten Unterschiede sind:
heading 1
sind beide mit h1
/ #
gekennzeichnet.Heading 3
wird als Fettdruck **
anstelle von h3
/ ###
dargestellt. Sehen Sie sich md-to-json/examples/test.md
als Beispiel für eine Dropbox-Flavor-Markdown-Datei an.
H3
Tag, da Dropbox-Papiermarkierung es fett darstellt **
h3
bis h6
als nicht durch Dropbox-Papier-Markdown generiert. Analysieren von Markdown-Github-Flavour-Tags für Bilder, z. B. ![alt text](link url)
. Diese erscheinen in einer eigenen Zeile.
Parsen von Markdown-Github-Flavor-Tags für Links, z. B. [text](link url)
Diese erscheinen im Allgemeinen als Teil eines Absatzes, können aber auch in einer eigenen Zeile oder als Teil einer Überschrift usw. erscheinen.