node-mediawiki
Advanced tools
Comparing version 0.0.3 to 0.0.4
@@ -12,8 +12,9 @@ #!/usr/bin/env node | ||
var wikiName = process.argv[2], | ||
mirrorDir = process.argv[3]; | ||
var wikiName = process.argv[2], | ||
mirrorDir = process.argv[3], | ||
allowSubdirs = (process.argv[4] === '--subdirs'); | ||
if (!wikiName || !mirrorDir) { | ||
utils.fatalError( | ||
'Usage: %s wiki-name-or-url mirror-directory', | ||
'Usage: %s wiki-name-or-url mirror-directory [--subdirs]', | ||
process.argv[1]); | ||
@@ -37,3 +38,9 @@ } | ||
var filename = path.join(mirrorDir, MediaWiki.pageTitleToFilename(title)); | ||
var filename = path.join( | ||
mirrorDir, | ||
MediaWiki.pageTitleToFilename(title, allowSubdirs) | ||
); | ||
if (/\//.test(title) && allowSubdirs) { | ||
fs.mkdirpSync(path.dirname(filename)); | ||
} | ||
titleToFileMap[title] = filename; | ||
@@ -48,5 +55,33 @@ | ||
console.log( | ||
"Wrote page '%s' to file '%s'", | ||
"Wrote page '%s' to file '%s' (RAW)", | ||
title, filename); | ||
cb(null); | ||
wiki.getParsedPage(title, function(err, data) { | ||
if (err) { | ||
cb(err); | ||
return; | ||
} | ||
var htmlFilename = filename.replace(/\.wiki$/, '.html'); | ||
if (data && data.parse && data.parse.text && data.parse.text['*']) { | ||
data = data.parse.text['*']; | ||
} else { | ||
data = JSON.stringify({ | ||
error : 'HTML data not found', | ||
data : data | ||
}); | ||
} | ||
fs.writeFile(htmlFilename, data, function(err) { | ||
if (err) { | ||
cb(err); | ||
return; | ||
} | ||
console.log( | ||
"Wrote page '%s' to file '%s' (RENDERED)", | ||
title, htmlFilename); | ||
cb(null); | ||
}); | ||
}); | ||
}); | ||
@@ -53,0 +88,0 @@ }); |
@@ -5,3 +5,4 @@ var events = require('events'), | ||
request = require('request'), | ||
util = require('util'); | ||
util = require('util'), | ||
XRegExp = require('xregexp'); | ||
@@ -43,6 +44,15 @@ function MediaWiki(wiki) { | ||
MediaWiki.pageTitleToFilename = function(title) { | ||
return title.replace(/[^a-z0-9 #.-]/gi, '_') + '.wiki'; | ||
MediaWiki.pageTitleToFilenameBase = function(title, allowSlashes) { | ||
var invalidFilenameChar = XRegExp('[^\\pL0-9#./-]', 'gi'); | ||
var filenameBase = title.replace(invalidFilenameChar, '_'); | ||
if (!allowSlashes) { | ||
filenameBase = filenameBase.replace(/\//g, '_'); | ||
} | ||
return filenameBase; | ||
}; | ||
MediaWiki.pageTitleToFilename = function(title, allowSlashes) { | ||
return MediaWiki.pageTitleToFilenameBase(title, allowSlashes) + '.wiki'; | ||
}; | ||
function tryGetTitle(body) { | ||
@@ -221,2 +231,6 @@ if (typeof body == 'string' && body.length > 200) { | ||
cbData, cbDone); | ||
} else if (data['continue'] && !onlyOneQuery) { | ||
self._queryChunk(action, params, | ||
data['continue'], | ||
cbData, cbDone); | ||
} else if (typeof cbDone == 'function') { | ||
@@ -260,2 +274,12 @@ cbDone(null); | ||
MediaWiki.prototype.getParsedPage = function(title, cb) { | ||
var self = this; | ||
self._doRequest('api.php', { | ||
action : 'parse', | ||
page : title, | ||
format : 'json' | ||
}, cb); | ||
}; | ||
MediaWiki.prototype._getEditToken = function(title, cb) { | ||
@@ -262,0 +286,0 @@ var self = this; |
@@ -5,3 +5,3 @@ { | ||
"description": "MediaWiki API and some command-line wrapper scripts.", | ||
"version": "0.0.3", | ||
"version": "0.0.4", | ||
"repository": { | ||
@@ -45,4 +45,5 @@ "type": "git", | ||
"request": "^2.88.0", | ||
"temp": "~0.8.1" | ||
"temp": "~0.8.1", | ||
"xregexp": "^4.2.4" | ||
} | ||
} |
30675
847
8
+ Addedxregexp@^4.2.4
+ Added@babel/runtime-corejs3@7.24.7(transitive)
+ Addedcore-js-pure@3.37.1(transitive)
+ Addedregenerator-runtime@0.14.1(transitive)
+ Addedxregexp@4.4.1(transitive)