J'ai créé une application Web en Python qui convertit Markdown en HTML

Première Qiita ... tout le monde ...

Je parlerai de la création d'une application Web appelée Markdown-> HTML conversion ** markdown-server **. Code source: https://github.com/ohbarye/markdown-server

What is markdown-server? C'est une simple application Web qui convertit simplement un fichier Markdown en HTML et répond au format texte / html. Le moteur de Markdown par défaut est Markdown aromatisé à Github.

Motivation

Dans l'entreprise, j'écris des notes personnelles telles que des manuels de procédures et TODO dans Markdown (ajout: c'est une histoire du lieu de travail où j'ai travaillé jusqu'en 2015), mais comme c'est une entreprise qui aime Excel, quand il s'agit de le montrer aux autres, "Markdown" "Quoi?" Je me suis donc demandé s'il y avait un bon moyen de le montrer ou de le distribuer à des personnes qui n'ont pas d'éditeur Markdown.

Comment utiliser / se déplacer pour le moment

Vous avez besoin d'un environnement d'exécution python. Le contrôle du développement / fonctionnement est effectué en 2.7.9. Ce n'est pas obligatoire, mais c'est rapide si vous pouvez git clone.

Le serveur démarrera uniquement avec la commande suivante.

$ git clone https://github.com/ohbarye/markdown-server
$ cd markdown-server
$ pip install -r packages_requirements.txt
$ python start_server.py

Lorsque le serveur démarre, accédez à l'adresse suivante et vérifiez le résultat de la conversion de l'exemple de fichier Markdown.

$ open http://localhost:8009/sample.md

Exemple

Un fichier Markdown comme celui-ci

# Convertir Markdown en HTML avec Python

 Convertissez en HTML avec Markdown parfumé à Github.

## Bibliothèque utilisée

 |No.|Name|Description|
 |:-|:-|:-|
 |1|markdown|Markdown ->Bibliothèque de conversion HTML|
 |2|pygments|Pour les points forts de la syntaxe|
 |3|bottle|Cadre d'application Web|

## Points forts de la syntaxe du code

\```python
import markdown as md

class MarkdownConverter(object):

    def convert(self,file_name):
        code = md.markdown(self.read_md(file_name), extensions=['gfm'])
        return self.write_html(file_name,code)

    def read_md(self,file_name):
        md_file = codecs.open(markdown_root + file_name,encoding=ms_encoding,mode='r')
        return md_file.read()

\```

Il sera dessiné comme ça.

http:localhost/8009/sample.md

Fonctionnalités / Méthode d'extension

env.py


ms_port        = '8009'
ms_host        = 'localhost'

env.py


css_name       = 'github.css'
markdown_type  = 'gfm'

À propos de la technologie utilisée

Bibliothèques dépendantes

Cela dépend principalement des bibliothèques suivantes. Consultez le référentiel GitHub (https://github.com/ohbarye/markdown-server/blob/master/packages_requirements.txt) pour toute la collection, y compris les bibliothèques dont ils dépendent.

No. Name Description
1 markdown Markdown ->Bibliothèque de conversion HTML
2 pygments Pour les points forts de la syntaxe
3 bottle Cadre d'application Web

markdown

Bibliothèque de conversion Markdown. La plupart des fonctions de ce serveur sont les fonctions de celui-ci. https://pypi.python.org/pypi/Markdown Qiita présente également comment l'utiliser dans cet article. http://qiita.com/kimihiro_n/items/982c6fc0b3c7cf226799

Fondamentalement, vous pouvez convertir avec juste cela.

import markdown as md
md.markdown("# markdown text")

Si vous souhaitez changer le format de balisage, spécifiez «extensions». Voici un exemple de Github Flavored Markdown.

import markdown as md
md.markdown("# markdown text", extensions=['gfm'])

Cependant, le code ci-dessus seul ne se convertit pas bien avec GFM. J'étais particulièrement accro à cette époque, mais on dit que le comportement de la conversion de démarque change selon que les pygments décrits ci-dessous sont installés ou non. (Sérieusement)

pygments

Surligneur de syntaxe Python. http://pygments.org/ https://showa-yojyo.github.io/note/python-pygments.html

La relation entre le mouvement de démarque et les pygments a été résumée dans l'article suivant.

Les points forts de la syntaxe ne fonctionnent pas. Cependant, lorsque j'ai inclus Markdown + py-gfm dans MoinMoin dans ma dernière entrée, il y avait des points forts de la syntaxe. Pourquoi?

J'étais curieux à ce sujet et j'ai lu diverses sources, mais la réponse est que MoinMoin dépend des pygments. La bibliothèque Markdown se comporte différemment avant et après l'installation de pygments. http://tototoshi.hatenablog.com/entry/2014/05/17/020241

Comme vous pouvez le voir à partir de la source, cette fois je n'ai «importé de pygments» nulle part. Je viens de l'installer pour GFM uniquement.

bottle

Bibliothèque de cadres d'application Web. http://bottlepy.org/docs/dev/index.html

En parlant du logiciel d'application Web de Python, je ne connaissais que ** Django **, mais il y en a beaucoup d'autres.

Cette fois, j'ai choisi ** bouteille ** avec la priorité la plus élevée sur la "légèreté". Le code ci-dessous est tiré de l'officiel tel qu'il est, mais c'est un sentiment extrêmement léger que vous puissiez faire Hello world en 5 lignes.

from bottle import route, run, template

@route('/hello/<name>')
def index(name):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

Cette fois, je n'utilise même pas la fonction de modèle car je ne réponds qu'au HTML converti. La méthode pour répondre aux fichiers statiques est «static_file».

start_server.py


return static_file(html_file_name, root=ms_root)

Impressions-> Python est bon

J'utilise habituellement Java comme langage principal et j'écris rarement des langages de script, donc c'était rafraîchissant. Gestion des packages avec ** pip ** / Gestion de l'environnement de développement avec ** pyenv ** / Développement sans IDE (** Atom ** cette fois).

Au fait, mon histoire Python concerne la ** codecademy **, pour laquelle j'ai suivi tous les cours Python en une semaine. Je pensais que c'était un bon langage sans bizarreries, facile à écrire et sans dépendance étrange à l'écriture de scripts simples.

J'espère que le nombre d'utilisateurs de Markdown augmentera également dans l'entreprise.

Recommended Posts

J'ai créé une application Web en Python qui convertit Markdown en HTML
Étapes pour développer une application Web en Python
J'ai fait un programme de gestion de la paie en Python!
Convertir de Markdown en HTML en Python
J'ai fait une application WEB avec Django
J'ai écrit un script pour extraire les liens de pages Web en Python
Création d'un toolver qui crache le système d'exploitation, Python, les modules et les versions d'outils à Markdown
J'ai créé un plugin pour générer une table Markdown à partir de csv avec Vim
Un mémo que j'ai écrit un tri rapide en Python
[Python] J'ai fait un décorateur qui ne semble pas avoir d'utilité.
J'ai créé une application graphique avec Python + PyQt5
Je veux créer une fenêtre avec Python
J'ai créé un bot Discord en Python qui se traduit quand il réagit
J'ai créé un générateur brouillé qui encode vos phrases préférées de UTF-8 à Shift-JIS (cp932) en Python
J'ai essayé de développer un formateur qui génère des journaux Python en JSON
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
[IOS] J'ai créé un widget qui affiche la tendance de Qiita dans Pythonista3. [Python]
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai créé un programme cryptographique César en Python.
Je souhaite créer une application Web en utilisant React et Python flask
Ce à quoi j'étais accro lors de la création d'applications Web dans un environnement Windows
J'ai créé un Line Bot qui utilise Python pour récupérer les e-mails non lus de Gmail!
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
Je souhaite créer une application WEB en utilisant les données de League of Legends ①
J'ai fait un module en langage C qui filtre les images chargées par Python
J'ai recherché les compétences nécessaires pour devenir ingénieur web avec Python
En Python, j'ai créé un LINE Bot qui envoie des informations sur le pollen à partir des informations de localisation.
Une histoire à laquelle j'étais accro après la communication SFTP avec python
Je veux facilement implémenter le délai d'expiration en python
(Python) Essayez de développer une application Web en utilisant Django
Je veux écrire en Python! (2) Écrivons un test
J'ai créé une VM qui exécute OpenCV pour Python
J'ai fait un script pour mettre un extrait dans README.md
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai créé un module Python pour traduire les commentaires
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
[Python] Une bibliothèque pratique qui convertit les kanji en hiragana
J'ai fait une commande pour marquer le clip de la table
J'ai créé une bibliothèque python qui fait rouler le rang
J'ai fait un texte Python
[Python + Bottle] J'ai publié un service Web qui visualise les tweets positionnés de Twitter.
Création d'une application Web qui mappe les informations sur les événements informatiques avec Vue et Flask
Je ne peux pas dormir tant que je n'ai pas construit un serveur !! (Introduction au serveur Python faite en un jour)
J'ai fait un jeu de frappe simple avec tkinter de Python
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai créé un lecteur de flux rapide en utilisant feedparser en Python
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
J'ai fait une commande pour générer un commentaire pour une table dans Django
J'ai essayé "un programme qui supprime les déclarations en double en Python"
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python