Трансляция друпал-блога на livejournal.com через модуль ljxp (LiveJournal CrossPoster)

Ну, вот и я сподобился завести эккаунт в ЖЖ. Хочется, что бы то, о чем пишу, видело все-таки побольше людей. Да и написать пару комментов по разным обсуждаемым там темам тоже иногда хочется, а я не терплю анонимности. Наверное в силу религиозных соображений.

Вести блог записок начинающего друпаллурга буду все также на www.shaman.asiadata.ru, а на LJ он будет транслироваться. Комменты тоже остаются на моем сайте (да их, собственно и нету пока, но не в этом дело). Нафик не нужны чужие услуги по хранению моей же информации, даже самые разбесплатные.

А теперь опишу, как это было сделано. На Друпале. Пятой версии.

Модуль LiveJournal CrossPoster и его настройки

Сам модуль представляет из себя порт с WordPress.
(Сайт разработчика - http://ebroder.net/livejournal-crossposter/.
Немного инфы для ВордПресс по русски - http://blog.freeatnet.com/projects/wp-lj-crossposter-r.)

Для публикации материалов с Друпал-сайта на ЖЖ можно использовать модуль LiveJournal CrossPoster.
Скачать файлы модуля можно со страницы проекта http://drupal.org/project/ljxp. Пока модуль работает только для пятой и четвертой версий Drupal.
Установка обычная: помещаем модуль в папку sites/all/modules/ и включаем его на странице администрирования модулей (admin/build/modules). После этого в меню администратора появляется страница LiveJournal crossposter (admin/settings/ljxp), на которой и настраивается это хозяйство.

Настройки администратора

В настройках перечислены все типы материалов сайта, для каждого из которых можно выбрать одну из трех возможностей:

Cannot crosspost to LJ - Нельзя постить в ЖЖ.
Crosspost to LJ by default - Можно постить в ЖЖ по умолчанию.
Can crosspost to LJ, but not by default - Можно постить в ЖЖ, но не по умолчанию.

Последние две возможности и позволяют автоматически создать копию материала на www.livejournal.com. Отличие их состоит в том включен ли будет постинг в ЖЖ для материала по умолчанию или нет. Но в любом случае, именно пользователь может включить или выключить эту возможность для вновь создаваемого или редактируемого материала.

Итак, выбрав тип материала, который постим, идем настраивать права пользователей. На странице управления доступом admin/user/access находим блок модуля ljxp и выставляем права can crosspost to livejournal для тех пользовательских ролей, которым мы хотим предоставить эту возможность. Естественно у этой роли должны быть и права на создание и/или редактирование того типа материала, который мы указали для постинга в ЖЖ.

Если ваш сайт однопользовательский и вы всегда под USER #1, то этот шаг можно пропустить.

Настройки пользователей

Дальнейшие настройки уже проводят сами пользователи в своем профиле и они уникальны для каждого из них.

Заходим в свой профиль и жмем «Изменить». Все настройки находятся в блоке LiveJournal cross-posting.

Ставим галочку в чекбоксе «Use Livejournal crossposting»

Host: по умолчанию тут стоит http://www.livejournal.com, но не ЖЖ единым жив этот мир, можно поставить любой другой сайт, который ЖЖ-совместим (LiveJournal-compliant site)

User: имя вашего ЖЖ-эккаунта.

Password: пароль учетной записи ЖЖ. Пароль сохраняется в базе в хэшированном виде.

Community: сообщество ЖЖ, в которое попадет этот пост. Если поле оставить пустым, то пост появится в вашем журнале.

Your site name: Название вашего сайта для употребления в заголовке поста в ЖЖ. Если оставить пустым будет использовано имя сайта, на котором мы все это настраиваем.

Tag posts with categories: Связаные с материалом термины таксономии будут переданы в ЖЖ в качестве тэгов. Правда, честно предупреждается о возможных проблемах для нероманских языков, но тут разработчики просто перезакладываются - с русским языком все в порядке.

Livejournal posts will be: выбираем как публиковать посты, для всех (Public) или только для друзей (Friends only)

Comments: выбираем где быть комментариям. В ЖЖ (Allow comments on LiveJournal) или на нашем сайте (Require users to comment here). Во втором случае комменты в ЖЖ будут отключены, а в заголовке поста будет ссылка на указанную страницу вашего сайта с формой коменнтариев.

How to handle teasers: три варианта того, что из материала постить в ЖЖ. Только тизер (Post only the teaser), тизер и ссылка на весь материал под катом (Post the teaser with the rest behind a cut) или весь материал целиком (Post the entire post).

Cut Text: собственно, текст ката передаваемый в ЖЖ, на котором и будет стоять гиперссылка на весь материал.

Custom header: Пользовательский заголовок поста. В нем можно употреблять три заглушки: %blog_name - имя блога, %permalink - ссылка на материал, %comments_link - ссылка на комментарии. Если поле оставить пустым, то модуль будет сам генерировать нужное.

Если вы ввели все необходимое, сохраните страницу и вперед на создание нового материала.

Создание и редактирование материалов

Теперь в форме редактирования или создания нового материала (того типа для которого это настроено) около формы сообщения в системный журнал появляется чекбокс «Crosspost to LiveJournal» (Отправить в ЖЖ). Ставим галочку и при отправке материала на сайт модуль ljxp автоматически продублирует его в вашем блоге Живого Журнала. Можно также и опубликовать уже имеющиеся материалы вашего сайта просто поставив галочку и пересохранив его (иногда может понадобится сбросить дату материала). При сохранении отображаются также все сделанные изменения.

Кроме того в ЖЖ отправляется именно HTML-код, который прошел обработку всеми фильтрами. Это может быть удобным для использования в ЖЖ некоторых возможностей Drupal-модулей, например, подсветки синтаксиса через фильтр GeSHi. В визуальном редакторе ЖЖ, пока таких возможностей не обнаружил. (Неужели плохо искал? :) ). Засада поджидает нас только с относительными ссылками. Их для трансляции в ЖЖ придется писать в абсолютном виде - http://и так далее.

Снятие галочки «Crosspost to LiveJournal» у редактируемого материала, удаляет его из ЖЖ. То же самое происходит если вы измените статус публикации материала на «Неопубликовано», пост в ЖЖ будет удален.

Русификация модуля ljxp (LiveJournal CrossPoster)

С русификацией у модуля негусто. В скачанном с www.drupaler.ru .po-файле переведено строк 12 из 100 необходимых. Но, поскольку вольный перевод основных терминов я уже дал в этой заметке, можете забить его сами через страницу поиска строк для переводов (admin/settings/locale/string/search).

Там же надо будет отыскать две строки «Please leave any !comments there.» и «Originally published at !link.». Эти строчки добавляются в заголовок поста, если не настроен пользовательский. Я их перевел так: «Ваши !comments.» и «Трансляция. Оригинал: !link.».

Или введите в профиле в поле Custom header пользовательский заголовок на русском, например такой:

<strong>Из блога <a href="http://shaman.asiadata.ru/">%blog_name</a>.</strong>
<em><a href="%permalink">Оригинал сообщения находится здесь</a>.</em>

<a href="%comments_link">Ваши комментарии</a>.

Лишнее, как говорится, можете удалить. Не ваше - изменить.

Ну, вот. Теперь и у меня есть ЖЖ. http://direqtor.livejournal.com

Некоторые особенности

Если постите в разные сообщества, то придется постоянно контролировать в профиле пользователя какие из них указаны при отправке каждого материала и при необходимости сперва их изменять. Очень, кстати, большое неудобство.

Некоторые ошибки

При попытке разместить в ЖЖ какой-нибудь старый материал вы можете получить сообщение об ошибке следующего вида:

LiveJournal crossposting error: 153: Incorrect time value: You have an entry which was posted at YYYY-MM-DD HH:mm, but you're trying to post an entry before this. Please check the date and time of both entries. If the other entry is set in the future on purpose, edit that entry to use the "Date Out of Order" option. Otherwise, use the "Date Out of Order" option for this entry instead.

ЖЖ сообщает, что ваша последняя запись в нем помечена датой YYYY-MM-DD HH:mm, а вы пытаетесь создать запись с более ранней датой. Хотя опцию "Date Out of Order" наш модуль не поддерживает, есть возможность отправить в ЖЖ и более старые материалы с Друпал-сайта.

Найдите в форме редактирования ноды раздел "Информация об авторе" и удалите из поля "Время создания" все, оставив поле пустым. После этого сохраняйте материал - в ЖЖ он пойдет с текущей датой. Если захотите на своем сайте оставить старую дату, скопируйте ее предварительно в буфер обмена, а после кросспостинга зайдите в редактирование ноды снова, вставьте в поле дату и пересохраните материал. В материале на сайте и в ЖЖ будет стоять нужная дата.

Модуль доступен для 4-ой, 5-ой и 6-ой версий Drupal.

Отличная статья.

Очень хорошее описание. Я сохранил его тут (с указанием авторства и ссылка на вашу статью):
ljxp.
Спасибо. Надеюсь на этом вы не остановитесь.

Thanx

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

Согласен - заметки делать нужно.

Это точно. Я раньше записывал всё в медиавкики (на локалхосте) - удобное и быстрое форматирование. Но так уж случилось - база была утеряна. Сейчас сохраняю на сайте всё, что касается друпал, а остальное в медиавики.

А можно ли

А можно ли сделать так, чтобы юзеры из определённой группы по умолчанию могли кросспостить в определённый журнал? В плагине я таких настроек не нашёл.
Есть мысль написать скрипт и перенести всем настройки прямо из базы, но как-то это совсем топорно.

Я вроде бы тоже

Я вроде бы тоже таких возможностей не нашел.
Думаю можно обратится к разработчикам. Если патч покажется важным - сделают.

Drupal в массы!

Спасибо автору, пригодится.
(капча ужасная, с пятого раза ввёл)

Каптча

Руки не доходят настроить получше... Сапожник как всегда без сапог

Единство

Единство - пробный камень истины. С.Вивекананда

Что-то у меня не

Что-то у меня не получается отправить в ЖЖ сообщение. Все вроде настроил, как написано, но чекбокс «Crosspost to LiveJournal» не появляется. Drupal 6.4.
Не могу понять в чем дело.

Пардон

Я тупой. Все получилось.

ошибка

У меня выходит вот такая бяка:

LiveJournal crossposting error: Client: Application failed during request deserialization: not well-formed (invalid token) at line 11, column 118, byte 731 at /usr/lib/perl5/XML/Parser.pm line 187

С этим как можно справиться?

Ошибка

Ошибка в перловской библиотеке?
Даже не знаю, что вам подсказать... Попробуйте у техподдержки хостинга поинтересоваться - это может быть проблема там.

Ок, пасиб.

Ок, пасиб.

Трансляция в живой журнал

Отличная статья. Спасибо!
Только вот одна проблема, почему-то подгруженные картинки не передаются, а картинки, которые в тексте не отображаются.
Вот так статьи выглядят на сайте http://www.spbbusinessconsult.ru/taxonomy/term/25
А вот в таком виде они отображаются в LJ http://urist-spbk.livejournal.com/
При передаче по RSS из LJ в Блоги mail.ru видеозаписи не передаются.
Не подскажете как устранить эту проблему?

Подозреваю - никак. Разве

Подозреваю - никак. Разве можно размещать в моём мире блоки с видео с youtube например? Насколько я понимаю - политика mail.ru такова, что мол, пользуйтесь проектом video.mail.ru :)

Спасибо автору. Жду новых

Спасибо автору. Жду новых таких же отличных статей.

А у меня картинки

А у меня картинки отображаются :)

Это звучит хвастливо :)

Чтобы в посте в ЖЖ отображались картинки требуется указание в коде к ним полного URL с http://имя_вашего_сайта

Класс

Нужный материал, лично мне помог.
Но как всегда есть некоторые проблемы http://site.ru

Это какие?

site.ru не индексится(

Автору спасибо за перевод :)

Автору спасибо за перевод :)

Да не за что. Присоединяйтесь

Да не за что. Присоединяйтесь тоже... www.drupaler.ru

Будем пробовать применить

Будем пробовать применить на практике

молодцы авторы этого модуля,

молодцы авторы этого модуля, спасибо им!!!

У меня проблема сегодня

У меня проблема сегодня (раньше было все ок). Когда делаю новую запись в своем блоке, выдается ошибка:
LiveJournal crossposting error: 300: Client error: Don't have access to requested journal

Если поменять аккаунт - то все ок. В чем может быть проблема?

Проблема доступа

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

Помогите с ошибкой

При публикации материала выдаёт ошибку: LiveJournal crossposting error: 404: Not Found
или ошибку: LiveJournal crossposting error: 0

А есть уверенность, что ЖЖ

А есть уверенность, что ЖЖ доступен, журнал зареган и так далее?

Спасибо! Я у себя настраивала

Спасибо! Я у себя настраивала по Вашей статье :) она, кстати, прекрасно гуглится

А про "если нужно постить в разные сообщества" - может, сделать несколько пользователей, в каждом из них указать, куда постить? а при создании заметки можно указывать, из-под кого опубликовать, и тогда и этот модуль будет брать инфу из профиля соотв. юзера, наверное? По крайней мере для однопользовательских блогов это должно помочь

Придётся перелогиниваться.

Придётся перелогиниваться. Посты идут вроде бы от current user. Во вском случае на этом сайте, я под другим логином не вижу галки кросспоста, какой бы пользователь ни стоял в авторах ноды.

Спасибо за статью, все

Спасибо за статью, все понятно написано

Заходите ещё

Да не за что. Заходите ещё

Постинг в сообщества

Доброго вечера, а подскажите пожалуйста как правильно настроить постинг в сообщеста?

В поле community нужно писать название сообщества? Например "knigi_ru" ? Или там надо указывать адрес сообщества? Пробовал по разному, но получал только разные ошибки... В свой дневник поститься без проблем.
Можно ли как-то одновременно указывать несколько сообществ в которые надо отправить пост?

Привидите пожалуйста пример правильного заполнения поля "community".

knigi_ru

Для постинга в сообщества надо писать его имя, т.е. knigi_ru. Кроме того у вашего аккаунта в ЖЖ должны быть права на постинг в это сообщество. Иначе получите ошибку. Кстати, модуль всего лишь ретранслирует ошибки от программ ЖЖ. Так что их описание и причины можно поискать в справке Живого журнала

Да, я немного не прав.

Да, я немного не прав. Постить можно только в одно коммуните.

Поправил.

прочитал все что тут написано

прочитал все что тут написано но так и не получилось сделать трансляцию

Это прекрасно

Как хорошо, что вы умеете читать. Теперь осталось что-то сделать, чтобы закрепить прочитанное.

А если без подколок, то ваш коммент «Прочитал, не получилось» слишком общий, чтобы вам помочь. Прочитайте еще это http://shaman.asiadata.ru/node/99 Должно помочь.

При публикации материала

При публикации материала выдаёт ошибку: LiveJournal crossposting error: 404: Not Found
или ошибку: LiveJournal crossposting error: 0
вот как здесь

Проверьте настройки

Проверьте настройки пары логин-пароль. Если пост идёт в сообщество, то свои права на постинг в него. Да и доступность сайта livejournal.com...

Капча очень тяжело вводится.

Капча очень тяжело вводится.

Простите, но иначе спамеры задолбят

В ней только заглавные английские буквы, да и то не все, а только те, что не спутаешь с цифрами.

Только поставила и

Только поставила и протестировала - супер моментально закросспостился материал! Восторг:)

Спасибо, буду пробовать.

Спасибо, буду пробовать.

Как же объеденить всех?

Я хотел бы объеденить всех регистраторов... может можно как то сделать. чтобы все кто заносит инф будет дублироваться на ЖЖ?

Что-то не понял, что вы хотите

Что-то не понял, что вы хотите.

Постить все новые записи сайта в один ЖЖ? Или в сообщество?