Всем доброго времени суток! В конце декабря 2016 года возникла необходимость создания собственной Википедии, в которой содержались бы термины, которые необходимы для организации, в которой я работаю.
Выбрал движок Mediawiki. Установил, с этим проблем вообще никаких. У меня был перечень терминов (более 600), которые были у меня в базе данных. Мне было необходимо импортировать мои термины из базы данных в Медиавикипедию. Но после установки я обнаружил, что все не так тривиально.
В ней нет готового инструменты для импорта с базы данных. Позже уже разобрался, что можно импортировать страницы через импорт XML.
Обратился к сообществу. Мне были предложены различные инструменты для решения моей проблемы:
- вручную;
- написать скрипт, который оптимизирует базу данных под базу данных mediawiki;
- использовать бота Pywikibot;
- использовать External Data;
- API:EDIT.
Попробовал все эти варианты. Но что-то у меня не пошло всё это. Пробовал создать автоматическую форму, которая отправляла бы все данные выполняющему скрипту Медиавики. Но у меня получилось сделать это только для отправки одной страницы. Попробовал порыться в исходниках, но моих знаний не хватило. Посмотрел структуру базы данных, разобрался какие таблицы отвечают за страницы Медиавики, но там было несколько полей которые я не знал как заполняются. Исходники имеются, но я не обладаю такими знаниями пока. Учусь пока.
Начал рыться в англоязычных источниках и нашел ресурс http://mwcsvimport.pronique.com/
Где можно из файла CSV создать XML, который уже импортируется в Медиавики. Но данный ресурс оказался платным. Бесплатно можно считать только 15 строк. Я не был готов платить за всё это. Подсмотрел структуру выходного файла XML с этого ресурса — он же входной для импорта в Медиавики.
Он оказался очень простым. Вот его структура:
<?xml version="1.0" encoding="UTF-8" ?>
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.4/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.4/ http://www.mediawiki.org/xml/export-0.4.xsd" version="0.4" xml:lang="en">
<page>
<title>Заголовок</title>
<revision>
<timestamp>2017-01-16T03:27:36Z</timestamp>
<text xml:space="preserve"><![CDATA[Текст из базы данных с тэгами HTML]]></text>
</revision>
</page>
</mediawiki>Время не стал менять. Для меня это было не принципиально. Написал скрипт на php, который создавал XML файл на основе записей в моей базе данных терминов.
Вот его код
<?php
$dblocation = "localhost";
$dbname = "dbname";
$dbuser = "dbuser";
$dbpasswd = "dbpasswd";
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx)
{
echo( "<P>Сервер базы данных не доступен!!!</P>" );
exit();
}
if (!@mysql_select_db($dbname, $dbcnx))
{
echo( "<P>База данных не доступна!!!</P>" );
exit();
}
$query = mysql_query("select * from Table;");
if($query)
{
//пишем xml
$xml = '<?xml version="1.0" encoding="UTF-8" ?>';
$xml .= '<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.4/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.4/ http://www.mediawiki.org/xml/export-0.4.xsd" version="0.4" xml:lang="en">';
while($Pages = mysql_fetch_array($query))
{
$xml .= '<page>';
$xml .= '<title>'.$Pages['Title'].'</title>';
$xml .= '<revision>';
$xml .= '<timestamp>2017-01-16T03:27:36Z</timestamp>';
$xml .= '<text xml:space="preserve"><![CDATA['.strip_tags($Pages['Article'], '<p>, <span>, <b>, <font>, <br>').']]></text>';
$xml .= '</revision>';
$xml .= '</page>';
}
}
else
{
echo "<p><b>Error: ".mysql_error()."</b><p>";
exit();
}
$xml .= '</mediawiki>';
$file='test\importTowiki.xml';
file_put_contents($file, $xml);
echo '<b>Файл создан!!! Данные записаны!!!! Поздравляю!!!! Импортируй данные в ВИКИ</b>';
?>А затем я просто импортировал созданный файл XML в мою Медиавики. Всё заняло 30-40 минут.
Всё оказалось предельно просто, но только когда знаешь как сделать.
Всем спасибо за внимание!
Всем добра!