трактат

о соединении спирта с водой друпала с жэжэй :)

В качестве бэкапа решил слить все записи из жывого Жэ к себе в песочницу. Друпаловские контрибуты не дофига вариантов предлагают: ljxp - кросспостер в жж и ljsync - синхронизатор, соответственно. И если кросспостер работает как часики, то с синхронизатором пришлось поработать напильником.

Ljsync, если кто не в курсе, использует перловый скрипт jbackup.pl, изготовленный еще достопочтенным sixapart-ом для бэкапа жж. Скрипт сливает все посты из жж в свою базу данных и делает из нее один большой xml-файл. Потом этот файл парсится ljsync-ом и вливается в базу данных друпала в виде постов с комментариями. При это для каждого(!) комментатора из вашего жж создает openID аккаунт на вашем сайте.

Итак, для начала надо было докрутить perlовку в нашем ингерманладском дремучем лесу :) Пришлось поставить модули перла GDBM_File, SOAP-Lite и version. Установка в $HOME делается по учебнику:
make Makefile.pl --PREFIX=/path/to/your/home
make
make test
make install
:)

 

Далее, правим собственно jbackup.pl. В начале скрипта дописываем пути к нашим модулям-библиотекам в $HOME, плюс подключаем модуль utf8
use lib "/path/to/compiled/modules";
use utf8;
Чтобы не возникало дурацких предупреждений в логах типа "Wide characters in bla-bla-bla...", перед вызовом print FILE $content , примерно на 550-й строчке файла jbackup.pl, добавляем нужный binmode. Должно получиться чтото типа:
open FILE, ">$opts{file}"
or die "do_dump: unable to open file: $!\n";
binmode FILE,"::utf8";
print FILE $content;

Если скрипт не cможет создать рабочий файл вида %ljuser%-lj.xml, в журнале друпала появится сообщение вида "cant open file... bla-bla-bla", несмотря на нужные права доступа. Создайте этот файл ручками :)
touch %ljuser%-lj.xml
где %ljuser%, имя живого журнала из настроек модуля ljsync в админке друпала.

Последней проблемой с этим модулем ( ljsync v. 6-x-1.2) было использование оным библиотек Tidy for PHP. Как выяснилось уже поздно за полночь, библиотека сия нужна исключительно ради одного вызова одной функции tidy_repair_string в файле ljsync_parser.cls.php. Не заморачиваясь с установкой этого самого tidy, тупо вырезал этот вызов, угробив очистку кода от незакрытых тегов и прочего html-мусора, как говорится, на свой стар и риск :) В результате получаем следующий код:
в функции clean_body($content) комментарим весь код, кроме посленего return-a. Его заменяем следующей строчкой:
return tidy_repair_string($content, $config, 'utf8');
return $content;

На этом обработка напильником заканчивается :) Что получилось, можно посмотреть в песочнице. Проблема с дублированием кросспостов пока не решена, однако ж рецепт есть у автора модуля. За остальные идеи спасибо А.Тутубалину, который с шашкой наголо друпал воевал :)

Комментарии

tyc4000 аватар

Aphorism

Обычно на дне рождения именинник нужен только на первые 5-10 рюмок.
Уборка - это неравномерное распределение мусора с равномерным размазыванием грязи.
У семерых козлов и волк без глазу.
Если бы люди любили работать, они бы не назвали включатель «выключателем».
Бог наградил ее внешностью в надежде, что она найдет кого-нибудь с умом.