Как встроить содержимое страницы MediaWiki на мой сайт?

Наша корпоративная вики — Mediawiki. У меня нет проблем с размещением iframe на моем сайте, чтобы ссылаться на какую-то статью в вики.

Но у моего собственного сайта много виджетов и свой стиль. Я не хочу включать виджеты навигации/поиска/входа Mediawiki, изображение логотипа.

Возможно ли и как получить содержимое страницы Медиавики без виджетов (только тело статьи)?


person gavenkoa    schedule 31.07.2013    source источник


Ответы (2)


Да, это. Вероятно, вы захотите использовать параметр URL-адреса action=render, например: http://en.wikipedia.org/w/index.php?action=render&title=Main_Page. Обратите внимание, что таблицы стилей из вики не включены, поэтому вам нужно будет скопировать соответствующие правила в файлы css вашего сайта. См. также это.

person waldyrious    schedule 31.07.2013

Спасибо waldir за ответ!

Задав вопрос, я провожу собственное исследование и заканчиваю кодом:

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 на стороне браузера.

Причина этого кода в том, что наша вики устарела или неправильно настроена, а action=render недоступен. Но я попал в ловушку междоменных сценариев, поэтому я думаю, что iframe с action=render — лучшее решение.

См. также Как вы захватываете статья со ссылками в удобном для использования формате?

Еще одно предложение использовать 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.

ОБНОВЛЕНИЕ

Идеальное решение — просто добавить запрос action=render к любому допустимому URL-адресу вики, например:

http://en.wikipedia.org/wiki/Linux?action=render

person gavenkoa    schedule 01.08.2013
comment
Вы можете обойти междоменные проблемы, используя JSONP, который API MediaWiki поддерживает через параметр callback. Что касается action=parse, вам все равно нужно указать нужный формат, например. с format=json. - person Ilmari Karonen; 01.08.2013
comment
Кроме того, просто чтобы убедиться, что вы действительно знаете, что action=render не является допустимым действием api.php, а вместо этого должно передаваться как параметр для index.php, верно? (Да, немного сбивает с толку тот факт, что оба этих скрипта принимают параметр с одинаковым именем и аналогичной целью, но с разными допустимыми значениями.) - person Ilmari Karonen; 01.08.2013
comment
@IlmariKaronen Большое спасибо за ?action=render! Я действительно не знаю об этом. Я отлично работаю, просто добавьте в конец любой действительной вики-страницы! - person gavenkoa; 01.08.2013