Экспорт базы из MovableType 3.2

Главные вкладки

Аватар пользователя smile smile 28 августа 2006 в 22:13

ВСем спасибо за помощь, Друпал - осилил, все работает отлично.

Едиснтвенное, что сейчас стоит на пути появления еще одного полноченного сайта на друпале - экспорт из базы MovableType.

Проблемы две:
1) Техническая - база МТ в ДРУГОЙ кодировке (win-1251)
2) Принципиальная. Я не фига не понимаю, как эти таблицы конвертируются. Взял пхпшный скрипт с drupal.org, но он не фига не конвертирует.

Поможите в последний раз. Обещаю больше не приставать с глупыми вопросами и помогать на форуме ньюбам по мере сил.

Комментарии

Аватар пользователя smile smile 29 августа 2006 в 0:16

минут за несколько написал пхпшную скрипту, котоая перековертит данные мт в utf и делает:
INSERT INTO node
INSERT INTO node_revisions

трабл №1 в том, что записанные таким образом в базу ноды - не показываются на морду, пока через админку их не отредактируешь. Друпал где то еще какие то данные хранит?

трабл№2 - если после такого конвертилова попаытаться руками ввести новый док через админку, то получишь ошибку "dublicate entry", т.е. две записи под одним id пытаюсь записаться. тоже как то прямо скажем непонятно.

короче нужен хелп небольшой. чуй что до полной победы над друпалом остлось чуть-чуть.

Аватар пользователя dyp@drupal.org dyp@drupal.org 29 августа 2006 в 0:43

Данных там много.
Попробуйте http://drupal.org/project/importexportapi
делает импорт экспорт в CSV и XML.
Импортировать правда у меня не получилось.
Вот пример экспорта ноды (это только кусок который относиться только непосредственно к ноде, но модуль экспортирует еще таксономию, комментарии и т.д.):

    <story>
      <nid>2</nid>
      <vid>2</vid>
      <type>story</type>
      <title>Being a frog</title>
      <uid>1</uid>
      <status>1</status>
      <created>1155660594</created>
      <changed>1155660594</changed>
      <promote>1</promote>
      <moderate>0</moderate>
      <sticky>0</sticky>
      <revisions>
        <revision>
          <nid>2</nid>
          <vid>2</vid>
          <uid>1</uid>
          <title>Being a frog</title>
          <body>Not as easy as it *rrrrreebbbbbbitttt* looks.</body>
          <teaser>Not as easy as it *rrrrreebbbbbbitttt* looks.</teaser>
          <timestamp>1155660594</timestamp>
          <format>1</format>
          <name>TestAdmin</name>
          <mail>info@greenash.net.au</mail>
          <format-name>Filtered HTML</format-name>
        </revision>
      </revisions>
      <comment>2</comment>
      <comment-statistics-nid>2</comment-statistics-nid>
      <last-comment-timestamp>1155660594</last-comment-timestamp>
      <last-comment-uid>1</last-comment-uid>
      <comment-count>0</comment-count>
      <totalcount>0</totalcount>
      <daycount>0</daycount>
      <viewed>0</viewed>
      <taxonomy-terms>
        <term>
          <nid>2</nid>
          <tid>1</tid>
          <title>Being a frog</title>
          <term-name>amphibian</term-name>
        </term>
        <term>
          <nid>2</nid>
          <tid>2</tid>
          <title>Being a frog</title>
          <term-name>froggie</term-name>
        </term>
      </taxonomy-terms>
      <name>TestAdmin</name>
      <mail>info@greenash.net.au</mail>
    </story>
 
Аватар пользователя smile smile 29 августа 2006 в 1:18

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

Аватар пользователя dyp@drupal.org dyp@drupal.org 29 августа 2006 в 2:04

в принципе есть еще http://drupal.org/project/node_import
он импортирует из CSV файлов, правда глючит. Например у меня не подхватывает авторов, таксономию и даты. Зато проще гораздо. Но переезжать наверное буду с ним т.к. выбора особого нет. Обещают сделать поддержку Import/Export API и тогда по идее будет все работать. Сделать CSV файл не проблема.

Аватар пользователя B.X B.X 29 августа 2006 в 3:54

а из MovableType 3.2 нет перекодировщика в PhpBB? Или Invision? Потому что из PhpBB есть нормальный перекодировщик базы данных, все данные подхватывает без проблем...

Аватар пользователя smile smile 29 августа 2006 в 10:51

тема в том, что из-за разных кодировок мне проще самому конвертер написать. что я практически и сделал. вопрос лишь в том, что я не до конца понимаю структуру хранения нод. должно быть что-то кроме node и node_revisions.

Аватар пользователя smile smile 29 августа 2006 в 11:58

может быть кому-то будет интересен мой опыт, хотя я и не претендую на 100% верное и быстрое решение, но русских хелпов я не нашел.

импортировать сам контент очень просто. можно сделать xml файл со всем контентом в нужной кодировке (utf) и парсить его, можно работать через пхп с базой (используя iconv).я пошел по второму пути.

далее, полученные данные циклом по 100 например постов(не спрашивайте на фига цикл) вставляем в соответвующие таблицы Drupala запросами вида:

INSERT INTO node
INSERT INTO node_revisions

Чтобы после экспорта не получить ошибки dublicate id делаем следующее:
1. Считаем, сколько нод мы добавили:
select max(nid) from node;
2. Смотрим табличку(нашел методом тыка):
select * from sequences;
3. Принудительно устанавливаем значение nodeid:
update sequences set node_nid =(значение, полученное в п.1);

Далее, вновь прибывшим нодам нужно присвоить termы (таксономия):
insert into term_node select nid, 1 from node where nid >= 1 and nid >= (значение nid полученное в п.1);

Аватар пользователя mephisto mephisto 30 августа 2006 в 15:37

Что касается перекодировки, то писать собственный скрипт маразм. Давно уже есть замечательная утилитка iconv, которая легко и быстро перекодирует хоть utf в cp1251 хоть оюратно. Коли файла много делаем прогон по всем.

Что касается импорта, я бы просто робота заставил через веб интерфейс забивать. Сей способ маразматичен, но позволяет не разбираться в построении базы

Аватар пользователя smile smile 31 августа 2006 в 0:58

что касается iconv - это понятно.

а вот про робота,который будет забивать через форму - любопытно было бы узнать подробнее. это как?

Аватар пользователя mephisto mephisto 31 августа 2006 в 6:49

Я для этих целей использую wget, GET идёт через URL, POST передается через параметры командной строки (С POST не эксперементировал, но новая версия wget это точно может) Если при этом нужно анализировать вывод, подключаются grep, awk и expr. Я подобные задачи решаю так (хотя у меня задачи попроще, чем та что описана выше)

Почему bash, а не, например PHP, ну потому что с BASH работать мне проще, а на PHP пишу я тока совместно со справочником функций Smile

Когда я ставил друпал, я в принципе и расцчитывал, что некоторые функции будут выполнять как люди, так и программы, причём используя один и тотже интерфейс. Так что, если кто-то напишит, или написал интерестного робота, прошу поделиться опытом