我们的企业维基是 Mediawiki。我可以将iframe放入我的网站以参考 wiki 上的一些文章。
但是我自己的网站有很多小部件和自己的风格。我不想包含 Mediawiki 导航/搜索/登录小部件、徽标图像。
是否有可能以及如何在没有小部件的情况下获取 Mediawiki 页面内容(仅文章正文)?
我们的企业维基是 Mediawiki。我可以将iframe放入我的网站以参考 wiki 上的一些文章。
但是我自己的网站有很多小部件和自己的风格。我不想包含 Mediawiki 导航/搜索/登录小部件、徽标图像。
是否有可能以及如何在没有小部件的情况下获取 Mediawiki 页面内容(仅文章正文)?
是的。您可能想要使用action=render
url 参数,例如:http://en.wikipedia.org/w/index.php?action=render&title=Main_Page。请注意,wiki 中的样式表不包括在内,因此您需要将相关规则复制到您网站的 css 文件中。另请参阅此。
感谢沃尔迪尔的回答!
在提出问题后,我进行了自己的研究并以代码结束:
window.onload = function() {
httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState !== 4) {
console.log("Not ready, code: %o", httpRequest.readyState);
return;
}
if (httpRequest.status !== 200) {
console.log("Server error: %o", httpRequest.status);
return;
}
var json = JSON.parse(httpRequest.responseText);
console.log("json: %o", json);
var wiki = json.query.pages["1"].revisions[0]["*"];
console.log("wiki: %o", wiki);
var html = InstaView.convert(wiki);
console.log("html: %o", html);
document.getElementById('area').innerHTML = html;
};
var url = 'https://wiki.evil-company.com/api.php?action=query&prop=revisions&format=json&titles=Main_page&rvprop=timestamp|user|comment|content';
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
在这里,我使用https://github.com/cscott/instaview/blob/master/main.js项目增强了http://en.wikipedia.org/wiki/User:Pilaf在浏览器端将json输出转换为HTML .
出现此代码的原因是因为我们的 wiki 太旧或配置错误并且action=render不可用。但是我陷入了跨域脚本问题,所以我认为带有action=render的iframe是更好的解决方案。
另请参阅如何获取包含可用格式链接的文章?
使用action=parse ( http://en.wikipedia.org/w/api.php?action=parse&title=Linux ) 的另一个建议会导致警告:
You are looking at the HTML representation of the XML format.
HTML is good for debugging, but is unsuitable for application use.
Specify the format parameter to change the output format.
更新
完美的解决方案只需将 query action=render附加到任何有效的 wiki URL,例如: