2012-09-27 2 views
2

Sur une plate-forme Ubuntu, j'ai installé le petit script perl belleComment utiliser Perl Text-MediawikiFormat pour convertir mediawiki en xhtml?

libtext-mediawikiformat-perl - Convert Mediawiki markup into other text formats 

qui est disponible on cpan. Je ne connais pas perl et je n'ai aucune idée de la façon d'utiliser cette bibliothèque pour écrire un script perl qui convertirait un fichier mediawiki en fichier html. par exemple. Je voudrais avoir juste un script que je peux courir, comme

./my_convert_script input.wiki > output.html 

(spécifiant peut-être aussi l'url de base, etc.), mais ont aucune idée où commencer. Aucune suggestion?

Répondre

1

La bibliothèque Perl Text::MediawikiFormat n'est pas vraiment destinée à une utilisation autonome, mais plutôt comme un moteur de formatage dans une application plus grande.

Le documentation at CPAN indique réellement comment utiliser cette bibliothèque, et note que d'autres modules peuvent mieux prendre en charge les conversions uniques.

Vous pouvez essayer (non testé) un revêtement

perl -MText::MediawikiFormat -e'$/=undef; print Text::MediawikiFormat::format(<>)' input.wiki >output.html 

bien qui défie toute la question (et les capacités de personnalisation) de ce module.

Je suis sûr que quelqu'un a déjà trouvé une meilleure façon de convertir des fichiers MediaWiki uniques, alors voici un list of alternative MediaWiki processors sur le site mediawiki. Ce SO question peut aussi être utile.

D'autres langages de balisage, tels que Markdown, offrent une meilleure prise en charge des conversions de fichiers uniques. Markdown est particulièrement bien adapté pour les documents techniques et les miroirs des conventions e-mail. (En outre, il est utilisé sur ce site.)


Les libfoo-bar-perl paquets dans les dépôts Ubuntu sont précompilés modules Perl. Habituellement, ceux-ci seraient installés via cpan ou cpanm. Bien que certaines de ces bibliothèques incluent des scripts, la plupart ne le font pas et ne sont pas conçues comme des applications autonomes.

+0

Merci pour la réponse. J'ai commencé avec cette question très SO et une liste de processeurs MediaWiki alternatifs, mais après avoir essayé une poignée qui n'a pas fonctionné ou supporté seulement un sous-ensemble de la syntaxe de Mediawiki, j'ai pensé que je ferais mieux de chercher ailleurs. (D'autres réponses de ce SO ne sont pas utiles non plus puisque pandoc ne va que dans un sens pour mediawiki). – cboettig

+0

Je suis tout à fait d'accord pour dire que le démarquage serait meilleur - mon but ici est de retirer tout mon ancien contenu de mes anciennes pages mediawiki et de tout convertir en markdown pour cette raison.Il est surprenant qu'il ne soit pas plus facile de trouver de tels outils mediawiki étant donné qu'il est beaucoup plus ancien que la démarque. – cboettig

+1

@cboettig une raison possible est qu'il n'y a pas de véritable moyen de convertir wikitext en markdown. Tout au plus pourrait-on convertir un sous-ensemble de wikitext en markdown, ce qui serait encore difficile car wikitext n'est pas un langage de balisage défini. Les choses pourraient être plus faciles maintenant avec [Parsoid] (https://www.mediawiki.org/wiki/Parsoid) qui a rendu l'analyse de wikitext plus "scientifique". – Nemo

3

Je crois que @amon est correct que la bibliothèque perl que je référence dans la question n'est pas le bon outil pour la tâche que j'ai proposée.

J'ai fini par utiliser le mediawiki API avec l'action = "parse" pour convertir en HTML en utilisant le moteur mediawiki, qui s'est avéré être beaucoup plus fiable que tous les autres parseurs que j'ai essayés proposed on the list. (J'ai ensuite utilisé pandoc pour convertir mon HTML en markdown.) L'API mediawiki gère aussi l'extraction de catégories et d'autres métadonnées, et j'ai juste dû ajouter l'URL de base à l'image interne et aux liens de pages. Etant donné le titre de la page et l'URL de base, j'ai fini par écrire ceci comme une fonction R.

wiki_parse <- function(page, baseurl, format="json", ...){ 
    require(httr) 
    action = "parse" 
    addr <- paste(baseurl, "/api.php?format=", format, "&action=", action, "&page=", page, sep="") 
    config <- c(add_headers("User-Agent" = "rwiki"), ...) 
    out <- GET(addr, config=config) 
    parsed_content(out) 
} 
+0

Énorme +1 pour ne pas avoir réinventé l'analyseur MediaWiki. :) – Nemo

Questions connexes