Не раз я встречал сервисы, которые позволяли получить френдленту из ЖЖ в Google Reader или каком-либо другом RSS-аггрегаторе. Но все эти сервисы меня по той или иной причине не удовлетворяли — одни пароль на стороне сервера от ЖЖ хранят, другие — говорят, что используют сверхсекретный алгоритм шифрования и не открывают исходники сервиса… Не нравилось мне всё это и вот на свет появился еще один велосипед, надеюсь, наконец-то с круглыми колёсами.
Во-первых, велосипед с
открытыми исходниками, во-вторых, сделанный по возможности с упором на безопасность. Например, для сохранения логина/пароля в секретном URL-е используется SHA1-OFB шифрование, также, при желании контент «подзамочных» записей можно вырезать из ленты, оставив только их заголовки.
Хостится сервис на Google AppEngine, за почти месяц тестирования несколькими людьми проблем обнаружено не было. Адрес —
rss-proxy.darkk.net.ru
Ответы на некоторые из возникающих вопросов можно найти в
FAQ сервиса. Если кому-то кроме меня сервис будет полезен — буду рад. Критика и пожелания приветствуются.
UPD: спасибо неизвестному тестировщику, найдено и пофикшено два бага даже не смотря на то, что тестер не отписался в комментариях — система оповещения об необработанных исключениях в django работает как часы.
UPD2: обнаружилась пара багов в ЖЖ, проявляющиеся для
некоторых юзеров и мешающих работе сервиса:
- если во френдленте есть RSS-трансляции, то ЖЖ отдаёт не валидный XML
- списки френдов в fdata и FOAF бывают не согласованы
UPD3: Добавил к сервису
страничку с новостями и их
Atom-поток. О всех дальнейших обновлениях буду писать там.
комментарии (107)
… как только с сессией разберусь)
*ждем массы постов а-ля «и подарите пасс от своего ЖЖ» :)))*
clip2net.com/clip/m4625/1233444847-clip-47kb.png
Кстати, в топик неплохо бы линк на главную
Хотя, по идее, должны показыаться все ленты в порядке их поступления.
Но я в любом случае еще завтра проверю :)
Тогда надо реализовать на стороне «проси» кэширование подписок, т.к. делать 400 почти одновременных запросов в ответ на запрос френдленты — плохой вариант, их перегруппировку и парсинг.
«Наивная» обработка сотни подписок за один запрос имеет хороший шанс отвалиться по таймауту, а делать это «по уму» не вижу смысла, т.к. RSS-ридеры УЖЕ предоставляют возможность группировки подписок по папкам.
Если да — занесу в TODO, но просто у меня впечатление, что галочек уже слишком много :-)
Но не обещаю никаких сроков — работы много последнее время.
Или нет?
Про 10% ников интересно — можете привести примеры? Не обязательно секретную ссылку, должно быть достаточно ссылки на сам ЖЖ.
Несостыковки на самом деле нет, google reader показывает не дату поста, а дату получения этого поста ботом. Можете навести курсор на дату и появится окошко, показывающее дату поста и дату получения поста ботом.
darkk.net.ru/keys.html
pgpkeys.mit.edu:11371/pks/lookup?op=vindex&search=0xDCFABD5C
Еще не хватает фида, в который будут валится новые ссылки на тех, кого зафрендили/отфрендили, чтоб в reader не забывать их добавлять.
Это имеет два плюса при прочих равных — при утечке URL-а не утекает пароль, а также можно запретить выдачу новых feed-ов, если вдруг неожиданно сервис станет популярным настолько, что в лимиты GAE не впишется.
Подробно — в сорцах (не сильно причёсанных). Для примера стоит смотреть функции generic_mkfeed и get_feed.
MITM возможен только в момент ввода пароля пользователем, т.к. digest-авторизация к такой атаке устойчива, но даже на этот случай можно сделать вот что — GAE даёт возможность использовать SSL… Но, думаю, это уже для профессиональных параноиков, насколько помню, даже сам ЖЖ так трепетно к паролям не относится.
Идея в том, что у сервера нет «состояния», которое мог бы получить злобный хакер, если бы использовал какую-то уязвимость в приложении, максимум, что он получит — ключ сервера. Но доступа к логам приложение не имеет — т.е. пароли из «старых» запросов не утекут.
В одном месте пароль кэшируется для улучшения производительности и соблюдения правил взаимодействия ботов с ЖЖ, но, во-первых, этот пароль кэшируется на одну минуту, во-вторых, кэшируется не сам пароль, а его хэш с солью.
Таким образом злобный хакер имеет еще одну альтернативу — внедрить свой обработчик запросов. Я не знаю, насколько это вообще возможно сделать при условии, что python время от времени перезапускается и, более того, я вообще плохо представляю, как можно сделать code-injection без eval или include. Но даже если это произойдет — требуется это делать с максимальной осторожностью, т.к. о почти всех аномалиях во время обработки запроса (необработанных исключениях) приходит отчёт на мыло.
«С этим XML-файлом не связана ни одна таблица стилей. Ниже показано дерево элементов.»
а хочется автоматического создания ссылки чтобы вставить в гуглридер
А с хромом, да, беда — но у меня, увы, хрома нет, т.к. под Linux его еще не спортировали. Как вариант, можно отдавать файл сразу на сохранение.
Почему я не сделал ссылку, я уже говорил.
Или у вас сохранение не работает?
Или вы предпочитаете, чтоб вместо демонстрации файла открывался сразу диалог сохранения?
Поможете??
Как вы считаете, стоит делать «угадывание» правильного логина?
Сегодня после работы попробую сделать какой-нибудь разумный workaround.
Как только пофикшу — напишу туда.
Ням, и в хроме тоже одна строка. Я привык что они хоть и не могут показать иксмээль файл, но выводят весь контент, а не одну строку, так что что-то тут не так.
При попытке сохранить или посмотреть исходники получается главная страница.
Я считаю, что RSS-трансляции стоит брать из первоисточника, а не пропускать их через ЖЖ, тем более бага #1 (invalid xml) вызвана как раз кривой поддержкой RSS-трансляций в ЖЖ.
Я читаю не всех своих друзей и сообщества, а только некоторое подмножество из них, это подмножество четко происанно в группе.
Было бы очень хорошо, если можно было бы транслировать все из ленты.
т.к. нет желания при добавлениее пользователя в жж лезть с сервис и тут тоже менять.
хотелось бы просто получить RSS моей группы IReadIt.
Спасибо!
О всех обновлениях я там, конечно же, упомяну.
Пора бы мне уже освоить spell-checker в vim :-)
По поводу кого вгонять в OPML, а кого нет — по идее эта проблема должна исчезнуть, когда поддержка групп появится.
http://[пользователь].livejournal.com/data/rss
А вообще, это уже обсуждалось — habrahabr.ru/blogs/i_am_advertising/50768/#comment_1337338
ведь теряется главное преимущество — комментарии
по-старинке можно на один пост несколько раз посмотреть и сравнить количество комментариев. вдруг что новое появилось?
Ну а вспоминать сколько было комментариев у поста день назад когда за сутки тебе в RSS сваливается порядка 200 записей… Нет уж, спасибо :-)
там постов штук десять в день получается
а остальные (тысячников-там всяких) уже давно вручную в ридер добавил
Хозяин — барин )
Должна по идее была выдаваться ошибка:
«К сожалению, происходят какие-то странные проблемы со связью, давайте попробуем еще раз.»
?
Возможно, причина в этом.
Хотя мне кажется, что я уже запутал вас и запутался сам.
Может проще вам нужный %LJ::username% сказать, чтоб я сам посмотрел на корректность OPML? Пароль не нужен.