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
    Пятница, Октябрь 3rd, 2008 at 19:32 | #2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Yaroslaw
    Воскресенье, Декабрь 21st, 2008 at 21:34 | #8

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

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

  • Вторник, Декабрь 23rd, 2008 at 15:34 | #9

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

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

    помогите, пожалуста, с проблемкой в 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 | #11

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

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

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

  • Суббота, Декабрь 5th, 2009 at 00:44 | #13

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

  • Yaroslaw
    Понедельник, Декабрь 14th, 2009 at 14:59 | #14

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

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

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

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

  • Yaroslaw
    Четверг, Сентябрь 2nd, 2010 at 17:56 | #16

    Вах!

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

    первое — в имени каталога заменить «-» на «_»
    Второе — метод аутентификации который они использовали в ЖЖ больше не работает
    третье — можно обойтись если плейн-текстом в строке 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

TOP