2013-07-31 4 views
4

Наша корпоративная вики - это Mediawiki. У меня нет проблем поставить iframe на мой сайт, чтобы найти статью по вики.Как вставлять содержимое страницы MediaWiki на свой сайт?

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

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

ответ

5

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

1

Thank 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 - лучшее решение.

Смотрите также How do you grab an article including the links in a usable format?

Еще одно предложению использовать действия = синтаксический (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. 

UPDATE

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

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

+2

Вы можете быть в состоянии получить вокруг вопросов кросс-доменов с помощью [JSONP] (http://en.wikipedia.org/wiki/JSONP), которой MediaWiki API [поддерживает] (HTTP://www.mediawiki.org/wiki/API:Cross-site_requests) через параметр 'callback'. Что касается 'action = parse', вам все равно нужно [указать желаемый формат] (http://www.mediawiki.org/wiki/API:Cross-site_requests), например. с 'format = json'. –

+2

Кроме того, просто убедитесь, что вы _do_ знаете, что 'action = render' является _not_ действительным действием' api.php', но должен быть передан как [параметр 'index.php'] (http: // www .mediawiki.org/wiki/Manual: Действия), правильно? (Да, это путают, что оба этих сценария принимают параметр с тем же именем и аналогичной целью, но разные допустимые значения.) –

+0

@IlmariKaronen Большое спасибо за **? Action = render **! Я действительно не знаю об этом. Я работаю отлично, просто добавляю к концу любую действительную страницу вики! – gavenkoa