PHP

индекс
206,80

Импорт записей из RSS в ЖЖ

Upd. Новая версия онлайн-сервиса доступна по адресу http://ljimport.idzaaus.org. Статью о ней я напишу позже.

Написал для себя скрипт импорта записей в ЖЖ. Сейчас этим онлайн-сервисом пользуются еще 50 пользователей. Решил написать и сюда, чтобы чувствовать себя еще более полезным для общества. Поскольку я сильно сомневаюсь, что мой сайт выдержит даже жалкое подобие хабраэффекта, я решил переделать скрипт для использования одним человеком и выложить исходные коды.

Вообще, я сильно удивился, узнав, что такой простой опции в ЖЖ нет (вернее, она есть только для платных аккаунтов). Постинг делается через Blogger API, для него я взял готовую реализацию. Парсер понимает кодировки Windows-1251 и UTF-8. Мой скрипт заточен под импорт с сайта онлайн-дневников diary.ru, для пользователей которого учтены некоторые приятные мелочи.

Для использования программы должен быть установлен консольный PHP-клиент. Запуск осуществляется командой:
php ljimport.php [options]
Запуск импорта осуществляется без аргументов. Перед этим введите настройки в файле config.php. Если вы не хотите, чтобы все записи из ленты сразу попали в блог, сразу после добавления ленты в список запустите программу с ключом -F. Тогда скрипт запомнит текущее время и в дальнейшем будет импортировать только записи, дата которых позже этого момента. В целях безопасности пароль можно не писать в конфиг, а вводить каждый раз вручную. Для автоматического импорта можно использовать cron.

Скачать можно на гуглокоде. Или через SVN:
svn checkout http://ljimport.googlecode.com/svn/trunk/ ljimport
+15
26 января 2010, 06:06
40

комментарии (40)

0
wirklich #
Давно и безуспешно ищу что-то для импорта из Джумлы в ЖЖ.
Не встречали ли?
0
Riateche #
Не работал с Джумлой. Могу посоветовать вам сделать генерацию RSS в Джумле (уверен, это можно сделать через какой-нибудь плагин или даже без него), а затем воспользоваться моим скриптом.
0
kugaevsky #
Joomla поддерживает формирование RSS-потока ваших материалов из коробки.
Скормив его скрипту автора, вы получите импорт из Joomla в ЖЖ.

Есть еще модуль Gigya Publish, но сам я его не использовал.
0
wirklich #
Спасибо за Гигью, попробую, хотя судя по описалову, немного не то. Я могу ошибаться.
0
quintus #
буквально на днях сделал с помощью сервиса rss2lj
все велосипеды уже изобретены :)
+1
Riateche #
Наличие альтернативы — это всегда прекрасно.
0
wirklich #
Спасибо. Как-то сразу не думал о сторонних сервисах, искал подключаемы непосредственно в саму Джумлу модуль.
0
quintus #
сервис универсальный, я через него замутил отличную линию репостинга:
joomla-based webdite > rss2lj > blog.ru + ya.ru + li.ru + lj.ru
0
wirklich #
Ну РСС у меня в Джумле есть. Получается, мне нужно брать этот поток, устанавливать консольный PHP-клиент и пропускать мой РСС через него?
0
Riateche #
Да, наверно, оно будет работать. Хотя может не работать кат или еще что-нибудь. Еще в файле readme есть ссылка на онлайновый сервис, которым вы можете воспользоваться, если не хотите устанавливать скрипт. Если что-то не заработает, отпишитесь с указанием адреса RSS.
+1
wirklich #
О, «сылка на онлайновый сервис, которым вы можете воспользоваться, если не хотите устанавливать скрипт» — это как раз для меня, я не настолько продвинут, чтбы поднимать свои сервера и скрипты.
Спасибо! Попробую и если что, обязательно отпишусь.
0
wirklich #
Да, а пароли от ЖЖ как — не опасно ли отдавать, вы их видите или они хранятся в зашифрованном виде? :)
0
Riateche #
Пароли от ЖЖ, введенные на сайте, хранятся в виде, поддающемся дешифровке. Увы, скрипту для периодического постинга необходимо знать пароль, и я не могу зашифровать его необратимо. А имея доступ к базе и дешифрующему скрипту, я могу узнать ваш пароль. Поэтому отдавать их опасно. К сожалению, у ЖЖ нет такого API, как в твиттере (там можно сделать подобный сервис, вообще не спрашивая пароль у пользователя напрямую).
0
wirklich #
Понятно, спасибо за прямолинейный ответ.
0
neuromotor #
Почему blogger api? Если это отлично можно сделать xml-rpc жжшечки?
и пароль кстати в xml-rpc жж не надо посылать в открытом виде (используется md5 хеш)

референс апи: www.livejournal.com/doc/server/ljp.csp.xml-rpc.protocol.html
0
Riateche #
Согласен, и я планирую со временем перевести сервис на нативный api жжшки, к тому же он предоставляет больше возможностей. Но во время создания скрипта я решил использовать blogger api, потому что так показалось проще (а было это в прошлом году).

Тут еще такой момент: если перехватить не сам пароль, а его хеш, всё равно можно гадостей пользователю сделать через тот же lj api, поэтому польза от хеширования уменьшается.
0
neuromotor #
ну все же лучше чем открытый пасс попадает налево.
Кстати, у вас нет проблем с баном со стороны lj? столкнулся одно время когда банили подобные массовые сервисы из-за большого количество обращений с одного ипа к разным учеткам?
0
Riateche #
Меня пока не банили. Но у меня и пользователей немного. Если бы их было, например, 200, думаю, возникли бы проблемы.
+1
Bal #
Целый ряд сервисов (навскидку — imhonet.ru, например) позволяют постить информацию в ЖЖ своих пользователей. Авторизационная информация при этом вводится не на таком сервисе, а в ЖЖ, куда происходит переадресация. Так что, видимо, API такой, всё же, есть. Хотя навскидку в документации я не нашёл.
0
Riateche #
Спасибо, я поищу.
0
MichaelXIII #
Спасибо, а не видели что-нибудь подобное для Blogger?
+1
Riateche #
попробуйте это
0
MichaelXIII #
Спасибо, но похоже это показывает только БЛОК на странице с имортированными записями.

Хотя вечером покручу, может чего придумается
0
kugaevsky #
Дык вот же, собственно: code.google.com/intl/ru-RU/apis/blogger/
0
LitrKonyaka #
А как из google reader шарить в жж не подскажете? В смысле там можно в send to как-то прописать
0
Riateche #
Ну если у вас в Google Reader просто собирается много обычных RSS, то заходите в настройки → подписки, копируете адреса ваших лент и скармливаете моему импорту. Если же в Reader'е у вас настроено что-то более сложное, то не знаю.
0
LitrKonyaka #
Не, мне не всю ленту нужно экспортить, а просто от случая к случаю, отдельные записи
0
david_mz #
$rss = str_replace("<![CDATA[", "", $rss);
$rss = str_replace("]]>", "", $rss);

preg_match_all("/<description>([^<]+)<\/description>/", $rss, $r[«text»]);

Силищща. Автор, откройте для себя хотя бы SimpleXML.

$test = substr_count($rss, chr(208));
if ($test > strlen($rss) / 30) {
//it's utf-8
}

Тоже круть.
0
Riateche #
Я в курсе, что это жуть. Но писалось это изначально под конкретный сервис (diary.ru), а потом обрабатывалось напильником. К тому же на имевшемся у меня тогда единственном хостинге не было даже iconv, не говоря уже о SimpleXML, поэтому я писал всё сам, наивно думая, что улучшаю переносимость кода на другие хостинги. Если я убежусь, что эта вещь нужна достаточно многим людям, половине кода светит рефакторинг.
0
bolk #
Вот вам простой способ определить UTF: bolknote.ru/2008/03/20/~1632
–2
zeleniy #
Рефакторинг светит вашей голове… бля, по-моему каждый кто пишет на PHP считает своим долгом опубликовать в этом блоге хоть какую то статейку… Засуньте свой пост в правильный блог! «web-сервисы», «web-программирование»… ещё может что нибудь…

«переносимость кода» — потрясающий аргумент… пишите код исходя из того, что PHP собран без единого модуля…
+1
Riateche #
«Засуньте свой пост» звучит несколько грубо. А опыта в выборе правильного блога у меня, к сожалению, нет, я только учусь.

«переносимость кода» — потрясающий аргумент…

Я знаю, а вы пропустили в моем комментарии слово «наивно».
0
Vladson #
Грубо да, но и заслуженно тоже. Код явно оставляет желать лучшего. Публиковать такое, я лично постеснялся бы.
0
kns #
Хм. Я такое делал через консольный lj-клиент.
А еще попадался веб-сервис, странно, что только один.
0
allex #
А в чём отличие от rss2lj.net?
0
Riateche #
Он понимает Atom-фиды. И он не опенсурсовый. И его нельзя запустить на собственном компьютере.
0
DemaN #
rss2lj.net больше не работает.

В связи с блокировкой со стороны LJ, сервис в настоящий момент остановлен. Сейчас ведутся переговоры с LJ, и вполне возможно, что в скором времени всё заработает. Прошу вас набраться терпения, новости о проекте можно будет узнать в моём журнале: david-m.livejournal.com/tag/rss2lj.
0
dima_smol #
ping.fm может постить в кучу сервисов.
Сейчас для кросспоста использую связку twitterfeed.com + ping.fm
+1
lexxvlad #
моя связка:
FF+плагин ScribeFire+ЖЖ+liveinternet+livejournal+ya.ru = одним кликом.
0
kns #
Upd. Новая версия онлайн-сервиса доступна по адресу ljimport.idzaaus.org.
А поправьте тогда ссылку на code.google.com/p/ljimport/

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