Универсальный парсер xml для блоголёта
23.08.2009Меня уже неоднократно спрашивали в той или иной форме об импорте данных в блоголёт, в частности из xml файла wordpress, или упрощенного html файла, или например xml которые генерируют разные партнерки, типа магазинов, сайт знакомств и прочее. Писать под каждую задачу свой индивидуальный скрипт импорта мне кажется слишком накладным лично для меня - особой выгоды от подобной работы я не вижу, а это работа. Как же быть? Возникла мысль создать универсальный парсер xml для блоголёта, чтобы можно было каким то образом автоматизировать этот процесс для любого xml. И так начну разбор задачи.
Во первых для каждого xml необходимо знать элементы (теги) из которых надо будет делать индивидуальные посты. Например для rss это будет тег item, внутри которого теги раскладывать по свойствам поста - заголовок, контент, рубрики, теги, дата.
Вероятно потребуетстся некий мастер - первый шаг предварительный анализ структуры xml, где галочкой можно было бы пометить тег аналог поста, а также теги аналоги свойств поста. Для поста наверно следует показывать комбобокс полей. Необходим также шаблон собственно для текста поста - более чем вероятно, что контент будет импортироваться не один к одному, а с какими то вставками. Пример таких вставок - фортки анкет сайта знакомств.
Следующим шагом была бы автоматизация импорта на будущее: например раз в день/неделю/месяц скачивать от партнера xml импортировать на основе шаблона посты в блоголёт, расстановка отложенного постинга (посеять время публикации случайным образом, но чтобы например раз в день новый пост).
Задача мне кажется интересной, потому что не тривиальна и содержит возможную монетизацию. Скорее всего плагин будет бесплатный, но поддержка только платная, плюс платные готовые шаблоны, и еще что нибудь. Как пример работы будет импорт из wordpress - так или иначе я планировал сделать подобный импорт, только в частном случае.
Все настройки и шаблоны для конкретного xml можно будет хранить в ini файле: как раз буде указано какой тег за что отвечает, а также например формат - xml или html. Скорее всего так и сделаю, так как возни с мастером и его формами, обработкой форм будет много, когда как вполне очевидно после беглого просмотра xml что за что отвечает. Разве что сделать тестировщик настроек - на входе два файла xml и ini - а на выходе тестовая страница из 10 постов, которые не будут добавлены в существующую базу постов, а будут демонстрировать правильную или ошибочную работу настроек в ini файле.
Вот в таком виде пожалуй и сделаю, и даже добавлю это дело в ядро -будет на странице Обслуживание, страница Импорт.
Соответственно, необходимо и симметричный процесс - экспорт из блоголёта во внешний xml, сделанный по тем же самым принципам. Остается правда открытым вопрос про теги и рубрики: если их указывать в виде текста, а не виде массива чисел id, то их не нужно специально импортироват/экспортировать. Также является открытым вопрос об комментариях - их ведь можно тоже экспортировать/импортировать, хотя речь идет не про партнерки, а про импорт из wordpress. Но это тоже не есть проблема - достаточно в ini указать имя класса, например по умолчанию это будет TPost, а для комментов это TComment, чтобы создавать абсолютно любые объекты в блоголёте, не ограничиваясь только одними постами - не забыть для этого специально добавить кое какие методы для этих классов.
Собственно целью этого поста являлось порассуждать вслух, чтобы найти оптимальное решение, которое к концу поста и созрело.
Комментарии (5) на запись “Универсальный парсер xml для блоголёта”
Оставить комментарий
Начал делать шаблон и столкнулся с такими проблемами:
1. У записей и комментариев одинаковый формат времени, мне нужно у записи вывести отдельно день.месяц и год.
2. Постраничная навигация. Как же без шаблона?
3. Хотел сделать чтобы менялся фон у четных комментариев, но что-то совсем запутался в коде, хотя с моими знаниями php... Видимо комментарии выводятся не в цикле.
4. Что такое %1$s, %2$s, %2$d?
5. В темах можно использовать php?
Пока писал немного разобрался. Надо создавать свои плагины для темы, с нужным функционалом, кстати в теме impact если попытаться изменить цвет в админке, появится такая ошибка:
Caught exception: The requested method GetAdminPluginContent not found in class TAdminThemes
trace error
0 lib\kernel.php(168): TDataClass->Error('The requested m...')
1 lib\kernel.php(354): TDataClass->__call('GetAdminPluginC...', Array)
2 [internal function]: TEventClass->__call('GetAdminPluginC...', Array)
3 lib\adminthemes.php(88): TAdminThemes->GetAdminPluginContent()
4 lib\adminpage.php(104): TAdminThemes->ProcessForm()
5 lib\kernel.php(750): TAdminPage->Request(NULL)
6 lib\kernel.php(742): TUrlmap->PrintClassContent('TAdminThemes', Array)
7 lib\kernel.php(664): TUrlmap->PrintContent(Array)
8 lib\kernel.php(641): TUrlmap->DoRequest('/admin/themes/?...')
9 index.php(33): TUrlmap->Request('qq.ru', '/admin/themes/?...')
10 {main}
1. Да, действительно, работа с форматированием даты оставляет желать лучшего. Сейчас подумал - а не сделать ли для этого небольшой спецкласс? С другой стороны это решается при помощи стандартного форматирования даты, ну там параметры к функции date, типа yy-mm-dd Нопросто так php функцию в шаблон не сунешь, требуется вроде как бы и обойтись без функции, но и использовать функцию. Как быть?
ИМХО, сначала надо делать заточку под импорт обычных валидных xml-rss файлов, со стандартным набором параметров.
Я сильно так не шарю в пхп (ваще пипец как не шарю=)), xml особо не разбирал, а вот с rss имел дело, когда заказывал у лансера парсилку контента и заворачивалку в обычный xml-rss. Причём, юзал самые простые поля. Вроде, каменты туда не херачились, хотя, я не пробовал, может, импортить их. А с различных CMS экспорченные файлы имеют свой особый синтаксис. Тот же ВП имеет кучу своих параметров, уникальных только для него. Поэтому, загребетесь..