Как зеркалить медиавики-сайты?
2014-Nov-24, Monday 03:33![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
UPD3: Кажется, я решил эту задачку. :)
http://farstars.arda.ru/ - Проверять можно целиком. Служебные страницы по большей части не валидны, так как не работают. Содержательная часть и обсуждения вроде все скопированы (2454 страниц всего в этой Вики, считая многие служебные).
Да - при проверке обращать внимание только на содержательную часть сайта!
К сожалению, новостная лента сайта (farstars.ru /live/ )заспамлена, и копия честно это воспроизводит.
Вот есть - http://farstars.ru/ - Легенды далёких звёзд.
Из-за особенностей движка на wget + тривиальная обработка получается http://farstars.arda.ru/ - с недостатками:
- полная потеря стилевых файлов
- невозможно сотворить index.php (SqFilePage index чтобы он показывал URI /index.php?...)так как уже есть каталог /index.php/
- часть страниц без очевидной причины "отсутствует":
-- Эта зеленая планета - есть (оригинал).
-- Прекрасное далеко - нету (оригинал.
Может у кого есть уже готовое решение?
UPD1: Капитан Очевидность предложил поискать perl Mediawiki::API - помедитируйте на страницу http://farstars.ru/w/api.php
UPD2: строка wget --mirror --no-parent --page-requisites --convert-links --no-host-directories --cut-dirs=2 --load-cookies cookies.txt --directory-prefix=. http://farstars.ru/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0
делает вроде бы всё замечательно, но вместо контента имеем "список связанных правок" на каждой странице. :)
http://farstars.arda.ru/ - Проверять можно целиком. Служебные страницы по большей части не валидны, так как не работают. Содержательная часть и обсуждения вроде все скопированы (2454 страниц всего в этой Вики, считая многие служебные).
Да - при проверке обращать внимание только на содержательную часть сайта!
К сожалению, новостная лента сайта (farstars.ru /live/ )заспамлена, и копия честно это воспроизводит.
Вот есть - http://farstars.ru/ - Легенды далёких звёзд.
Из-за особенностей движка на wget + тривиальная обработка получается http://farstars.arda.ru/ - с недостатками:
- полная потеря стилевых файлов
- невозможно сотворить index.php (SqFilePage index чтобы он показывал URI /index.php?...)так как уже есть каталог /index.php/
- часть страниц без очевидной причины "отсутствует":
-- Эта зеленая планета - есть (оригинал).
-- Прекрасное далеко - нету (оригинал.
Может у кого есть уже готовое решение?
UPD1: Капитан Очевидность предложил поискать perl Mediawiki::API - помедитируйте на страницу http://farstars.ru/w/api.php
UPD2: строка wget --mirror --no-parent --page-requisites --convert-links --no-host-directories --cut-dirs=2 --load-cookies cookies.txt --directory-prefix=. http://farstars.ru/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0
делает вроде бы всё замечательно, но вместо контента имеем "список связанных правок" на каждой странице. :)
no subject
Date: 2014-Nov-24, Monday 00:57 (UTC)типа http://farstars.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&action=edit
если сайтиков таких много, можно наверное для них и вики поднять
А вообще у mediawiki должно нехилое API быть для всякой автоматизации
no subject
Date: 2014-Nov-24, Monday 03:07 (UTC)no subject
Date: 2014-Nov-24, Monday 06:39 (UTC)Вообще конкретно под медиавики есть какие-то полуготовые решения которые позволяют переносить данные между движками, прямо с историей изменений, когда к источнику есть только веб доступ. Если хочется разворачивать медиавики у себя, могу неспешно изучить этот вопрос, у меня это знание стоит в очереди неспешных задач на освоение. Могу подвинуть вперед
Чисто наблюдение, возможно очивидное: Прекрасное далеко отличается от Зеленой планеты наличием слеша в конце.
no subject
Date: 2014-Nov-24, Monday 06:43 (UTC)no subject
Date: 2014-Nov-27, Thursday 12:29 (UTC)no subject
Date: 2014-Nov-24, Monday 06:48 (UTC)Вот это смотрел? На первый взгляд похоже на то, что надо.
Глубоко не копался и запускать не пробовал.
no subject
Date: 2014-Nov-24, Monday 08:50 (UTC)2009 год - последняя правка страницы.
Почти все ссылки на сторонние ресурсы, на первый взгляд - битые.
Ну и капитан очевидность, опять же с нами, конечно же - без ссылок и конкретного скрипта:
no subject
Date: 2014-Nov-24, Monday 09:06 (UTC)Нашел еще вот это https://github.com/samuell/mw2html
запустил, работает пока. Доработает - посмотрю что получилось.
Оно, правда, похоже и не пытается сохранять URL на внутренние страницы. При наличии таких ссылок на других копируемых сайтах это может быть неприятно.
Хм, поработало-поработало и на середине выпало в осадок по причине некорректного ответа сервера "Bad Status Line" говорит.
no subject
Date: 2014-Nov-24, Monday 09:43 (UTC)no subject
Date: 2014-Nov-24, Monday 09:02 (UTC)no subject
Date: 2014-Nov-24, Monday 09:07 (UTC)http://openzim.org/wiki/Main_Page
Но в случае задействования его под public вебсервер - это означает "влезть в зависимость" уже от этого проекта, и секс с возможным взломом.
no subject
Date: 2014-Nov-24, Monday 09:13 (UTC)Я там нашел только writer, который из базы данных пишет, через публичный веб-интерфейс, даже без админ-доступа, оно вроде как zim-файл не соберет.
Что касается зависимости от этого проекта, то там как я погляжу. имеется пачка независимых реализаций - как минимум C++, Java и Perl. Что несколько обнадеживает.
no subject
Date: 2014-Nov-24, Monday 08:27 (UTC)http://farstars.ru/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:AllPages
Из нее можно названия всех интересующих страниц выпарсить, и потом для каждой сделать wget -p без рекурсии. Тогда гарантированно будут созданы сами страницы, а не одноименные каталоги
no subject
Date: 2014-Nov-24, Monday 10:49 (UTC)no subject
Date: 2014-Nov-24, Monday 11:57 (UTC)no subject
Date: 2014-Nov-24, Monday 17:24 (UTC)1. все имена страниц преобразованы - например "Ахерон" - на самом деле "Ахерон" - то есть брать имена страниц бесполезно, ибо я не знаю, как оно ещё там отконверчено. Брать урлы....
2. Есть например страница Прекрасное_далеко - но нет страницы Прекрасное_далеко/ - зато в подкаталоге Прекрасное_далеко/ есть страницы. Попробуйте wget ага. :)
no subject
Date: 2014-Nov-24, Monday 20:19 (UTC)use strict;
use URI::Encode;
my @l = (
"http://farstars.ru/wiki/%D0%9F%D1%80%D0%B5%D0%BA%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B5_%D0%B4%D0%B0%D0%BB%D0%B5%D0%BA%D0%BE/%D0%9C%D0%B5%D0%BD%D1%8E",
"http://farstars.ru/wiki/%D0%9F%D1%80%D0%B5%D0%BA%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B5_%D0%B4%D0%B0%D0%BB%D0%B5%D0%BA%D0%BE",
"http://farstars.ru/wiki/%D0%9F%D1%80%D0%B0%D0%B2%D0%BE_%D0%BD%D0%B0_%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D0%B4%D0%B8%D1%86%D0%B8%D0%BD%D1%81%D0%BA%D0%BE%D0%B9_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8"
);
`rm -r cache`;
`rm -r res`;
`mkdir res`;
foreach my $url (@l)
{
`mkdir cache`;
`cd cache; wget -p '$url'`;
my $file = './cache/farstars.ru/wiki';
while (1)
{
$file .= '/'.`ls $file`; # Мы точно знаем что там только один(!) файл или директория;
chomp $file;
die "Все плохо" if $file =~/\n/; # если вдруг файл оказался не один
last if ! -d $file
}
$url =~ m{^http://farstars\.ru/wiki/(.*)$};
my $real_name = "./res/farstars.ru/wiki/".URI::Encode::uri_decode($1);
`mkdir -p $real_name`;
`mv $file $real_name/index.html`;
`rm -r ./cache/farstars.ru/wiki`;
`cp -r ./cache/farstars.ru/* ./res/farstars.ru/`;
`rm -r cache`;
}
no subject
Date: 2014-Nov-24, Monday 21:30 (UTC)- Проблему "файл-директория" оно решает
- Проблему скачки и доступности сгенерённых стилей и скриптов оно решает
- Проблему внутренних ссылок и адекватного их направления - решает
- Проблему обхода всех статей всех пространств оно НЕ решает на автомате, но позволяет решить её достаточно легко руками (пространства делятся на "пагинутые" и "непагинутые" - одни вносятся в один список, другие в другой. на farstars - в первом списке 0 и 6, во втором - 1 2 3 4 5 7 8 9 10 11 12 13 14 15 102 103 104 105)
- API (которое не везде доступно) не использует
- Сверх того, что ранее я применял, используется только preg_match в том index.php, что показывает содержимое лежащих на диске файлов по принятым урлам.
- никаких отдельных urlencode/urldecode не применяет - только то, что встроено в wget
no subject
Date: 2014-Nov-25, Tuesday 00:05 (UTC)no subject
Date: 2014-Nov-24, Monday 20:20 (UTC)Там надо чуть аккуратнее с кавычками...
no subject
Date: 2014-Nov-24, Monday 09:15 (UTC)http://www.noah.org/wiki/MediaWiki_notes#Static_HTML_dump_of_MediaWiki
предлагают миррорить wget-ом с опциями несколько отличающимися от твоих.
no subject
Date: 2014-Nov-24, Monday 09:34 (UTC)no subject
Date: 2014-Nov-24, Monday 10:21 (UTC)