Powered by WordPress | Theme by yaroslaw | Valid XHTML 1.1 and CSS 3
  • миграция с ЖЖ – импорт записей

    migraciya-s-zhzh-import-zapisejj

    ну, вроде бы миграция с ЖЖ завершилась(?) более-менее успешно:)
    Одной из задач по миграции было перенесение всех записей из ЖЖ с комментариями в мой новый журнал.
    В комплекте вордпресса есть импорт из ЖЖ (wp-admin/import/livejournal.php), в ЖЖ есть экспорт записей (livejournal.com/export.bml – эта ссылка находится только поиском по хелпу, между прочим – в менюшках и «карте сайта» ее нет).
    Но ЖЖшный экспорт во первых экспортирует только «помесячно», во вторых, по крайней мере для «базовых» пользователей – только записи, без комментариев.
    С другой стороны базовый импорт записей в вордпрессе сделан таким образом, что он во-первых игнорирует все параметры записи, во вторых не имеет никакой поддержки вложенности комментариев. Если с комментариями все понятно, то первое замечание означает, что НЕ импортируются ни теги (!!!) ни настройки приватности (!!!!!!!!!!!). В результате закрытые записи или записи только для друзей становяться видны всем! «Настроениями» и «музыкой» я не пользовался, поэтому то что они тоже не импортируются для меня было несущественно:)

    В результате для экспорта был выбран внешний «экспортер» LJ-Archive (все скопом с комментариями, с тем же форматом что и ЖЖ), для импорта я слегка подправил стандартный «импорт»:)
    реализация «тегов» простая – формат тегов в ЖЖ и в вордпрессе совпадают до мелочей – это строчка, разделенная запятыми:) поэтому она в чистом виде передается вордпрессу.
    С настройками приватности все несколько по другому – есть два варианта параметра security, «private» и «usemask». Первое как и предполагается – приватная запись, второе – запись «для друзей». При этом во втором случае есть еще параметр «allowmask» который определяет для каких групп друзей запись видна.
    Поскольку записи «для друзей» это обычно (у меня) что-то личное, актуальное на момент написания, и ничего особо интересного там нет, я решил не заморачиваться с переносом груп друзей и поэтому оба варианта в вордпрессе обозначаются как private. При необходимости, реализовать групы друзей (среди зарегестрированых пользователей) можно с помощью плагина Disclose-secrets. Вообще, если мне таки понадобится писать посты «для друзей», можно будет скриптом «зарегестрировать» всех жж-шных френдов у себя с правами «читателей» по openid, и с помощью disclose secrets назначать соотв. права для записей:)

    Задача с вложенными коментариями просто так не решалась, пришлось попрограммировать слегка:) в результате в livejournal.php появилась модифицированная функция wp_insertcomment_lj в которой используется дополнительный столбец в таблице wp_comments. Для пользования нужно добавить к этой таблице столбец comments_ljid (ALTER TABLE wp_comments ADD comment_ljid BIGINT;) – после окончания экспорта столбец можно будет удалить, он нужен для того чтоб содержать в себе itemid комментария для привязки к парент-комментарию:) Столбец «comment_parent» в таблице уже присутствовал, я не знаю – это из поставки так или результат активации плагина wp-threaded comments (который на порядок лучше работает чем Brian’s threaded comments, не глючит с темой, не глючит с опенайди – ну удобнее и лучше!).
    Да, кроме этого для этих записей назначается рубрика LJ (у меня – catid=5!), поэтому нужно или убрать назначение рубрики, или вписать в соотв. кусок кода актуальный CatID для нужной рубрики.
    В остальном все «very straightforward»:)

    Скачать архив livejournal.php

    Ах, да, еще – скрипт отрабатывает почему-то достаточно медленно, у меня он импортировал где-то по 1 записи в 2 секунды (интересо очень, с чего бы это??)
    В результате после 14-16 записей он отваливался по тайм-ауту пхп в 30 секунд. Мне было лень копаться (а записей немного!) и поэтому я просто повторял импорт – существующие записи скрипт не вставляет (впрочем, парочку повторяющихся было, но я не знаю от каких моих экспериментов они остались:))
    Я думаю что отключив все плагины (кроме необходимых – например disclose secrets если его таки будете использовать; threaded comments может быть выключен кстати) можно сильно ускорить отработку скрипта (или, если есть возможность, в параметрах ПХП отключить таймаут на время импорта).

    По поводу плагинов и других мелочей миграции еще как-то напишу:)
    Если есть вопросы – спрашивайте.

    Пятница, Октябрь 3rd, 2008 at 18:14
  • шотла
    Пятница, Октябрь 3rd, 2008 at 19:25 | #1

    слушай, очень жаль что ты затеялся с миграцией, потому что очень неудобно комментировать с введением имени, емейла и т.д. – для меня это значит, что вряд ли когда буду комментировать.
    оставь хотя бы возможность через жж комментировать тоже.

    [Ответить]

    Yaroslaw Reply:

    Оля, я еще напишу подробную инструкцию:)
    На самом деле, нужно ОДИН РАЗ ввести свой ЖЖ-шный ник (о чем, кстати написано:) в виде http://olga_scotland.livejournal.com в поле Website, ОДИН РАЗ нажать кнопку подтвердить когда тебя перебросит на ЖЖ, и после этого писать комментарии сколько душе угодно:)
    Я, более того собираюсь эту процедуру еще упростить (сделать выпадающий список – ЖЖ, ли.ру, блоггер) – можно будет только ник ввести:) или автоматическое определение жж-ника, нужно будет только подтверждение что это именно ты.
    В любом случае, даже сейчас, твоя информация контактная уже запомнена и вводить второй раз (с этого же компьютера) тебе ее не надо:)

    [Ответить]

  • Понедельник, Октябрь 13th, 2008 at 13:05 | #2

    Вообще, довольно интересное занятие – разрабатывать свой блог.

    Мне размещать его негде, но уже ради одного интереса балуюсь с ВордПрессом на домашнем компе. Авось, рано или поздно пригодится.

    [Ответить]

    Yaroslaw Reply:

    я кстати уже как-то предлагал свой хостинг:)

    [Ответить]

    Yaroslaw Reply:

    Ты, кстати, на этот «авось», делай бекап ЖЖ регулярно:)

    с помощью LJArchive лучше всего, он вытягивает совершенно все – с комментариями, групами друзей, настройками музыки и настроений…

    Потом, если что, в вордпресс можно будет засунуть:)

    Правда с твоей любовью к подзамкам, непонятно для кого вести блог:) Хотя, если делать подзамочную трансляцию в ЖЖ и автоматическую регистрацию по OpenID (и ручным добавлением тех-кого-надо в нужную тебе групу юзеров) и использованием DiscloseSecrets все возможно….:)

    [Ответить]

    Стаська (satinenok) Reply:

    Кстати да, давно не бэкапилась :)

    И тоже думаю, что все возможно :)

    [Ответить]

  • Воскресенье, Декабрь 21st, 2008 at 13:10 | #3

    Здравствуйте! А подскажите пожалуйста название плагина, благодаря которому у вас для комментирования достаточно ввести лишь имя пользователя ЖЖ, а не целую ссылку, как в обычных openid плагинах. Заранее благодарен!

    [Ответить]

    Yaroslaw Reply:

    эммм. Сию функциональность я сам запрограмировал:))))

    Но вообще-то для Вордпресса существует два open-id плагина. Один официальный, другой – русский:) Поиском находится легко. В русском – там такая фича встроена (там есть livejournal и deadjournal по дефолту).
    Я решил основываться на официальном, только тему переправил, там все JS-кодом меняется перед отправкой формы.

    [Ответить]

    Аджей (ajayver) Reply:

    Русский плагин пробовал, он у меня не заработал, может вы можете мне скинуть на имейл свой comments.php или хотя бы ту часть кода, которая меня интересует? Я просто не программист, но порывшись в коде, может чего и понял бы… Был бы очень благодарен!

    [Ответить]

  • Понедельник, Декабрь 29th, 2008 at 02:26 | #4

    помогите, пожалуста, с проблемкой в ljarchive
    он постоянно выдает такую ошибку при попытке создать архив:
    System.TypeLoadException: Тип «XmlRpcProxy84820925-5cd6-43ee-87d5-ea50bb09c180″ из сборки «XmlRpcProxy84820925-5cd6-43ee-87d5-ea50bb09c180, Version=0.9.6.0, Culture=neutral, PublicKeyToken=null» пытается реализовать недоступный интерфейс.
    в System.Reflection.Emit.TypeBuilder._TermCreateClass(Int32 handle, Module module)
    в System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
    в System.Reflection.Emit.TypeBuilder.CreateType()
    в CookComputing.XmlRpc.XmlRpcProxyGen.BuildAssembly(Type itf, String assemblyName, String moduleName, String typeName)
    в CookComputing.XmlRpc.XmlRpcProxyGen.Create(Type itf)
    в EF.ljArchive.Engine.LJServerFactory.Create(String url)
    в EF.ljArchive.Engine.Sync.ThreadStart()

    net.framework установлен (где-то писали, что он нужен)

    [Ответить]

  • Среда, Июль 1st, 2009 at 11:29 | #5

    в линке на архив два раза папка you указана, я руками правил…

    [Ответить]

  • Пятница, Декабрь 4th, 2009 at 23:13 | #6

    Очень жаль, что файл livejournal.php недоступен для скачивания.

    [Ответить]

    anarchofront (anarchofront) Reply:

    Не обратил внимания на комментарий выше… Всё ясно, скачал. Правда, нынешний текст livejournal.php как-то сильно отличается от того, что находится в вашем файле, так что экспериментировать не стал.

    [Ответить]

    Yaroslaw Reply:

    не знаю на счет «нынешнего текста livejournal.php» – я взял ту версию которая тогда была, подправил ее для своих задач – и она работает (работала тогда, если ЖЖшники ничего не изменили – в чем я сомневаюсь, ибо тут привязка больше к LJArchive)

    Править новую версию как-то не вижу смысла:) Могу порекомендовать попробовать на каком-нибудь тестовом блоге.

    [Ответить]

  • Четверг, Июль 15th, 2010 at 06:28 | #7

    А вы не ставили перед собой задачу синхронизации текущих комментов в ЖЖ с вордпрессом? Есть плагин lj_comments_import, но я не могу добиться от него нормальной работы :(

    [Ответить]

    Yaroslaw Reply:

    Вах!

    День траха и я его прикрутил:)

    первое – в имени каталога заменить «-» на «_»
    Второе – метод аутентификации который они использовали в ЖЖ больше не работает
    третье – можно обойтись если плейн-текстом в строке curl_setopt($ch, CURLOPT_POSTFIELDS, ‘mode=login&chal=’.$loginchal.’&response=’.$login_response.’&user=’.$user.’&password=&_submit=Login’);

    после password= прописать пароль к жж (очень несекурно, но иначе – нужно полностью переписывать всю логику)

    четвертое – закоментировать mysql_query(‘SET NAMES ‘.DB_CHARSET);
    (по крайней мере мне понадобилось это)

    [Ответить]

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Используйте OpenID URL чтоб оставить комментарий. Если вы пользователь LiveJournal - URL должен быть вида http://user.livejournal.com

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word

TOP