LJWatcher 2.6.0

LJWatcher — это программа для слежения за новыми комментариями в ЖЖ. В эту программу добавляются ссылки на записи пользователей, а после проверки обновлений, новые комментарии будут выделены другим цветом.

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

Основные возможности

  • Разворачивает все ветки с комментариями
  • Выделяет новые комментарии
  • Может показывать только ветки с новыми комментариями
  • Поддерживает шаблоны (скины). Прилагается три шаблона в папке templates

Для работы нужен .NET Framework 2.0

PS. Надо бы как-нибудь будет переписать эту программу на более кроссплатформенном языке, или заставить ее работать в Linux под Mono.

Про изменения на сервере ЖЖ

Про изменения на сервере ЖЖ

Когда-то давно я выкладывал статьи про взаимодействие с сервером ЖЖ (Основы работы с сервером livejournal.com, Еще раз про авторизацию на сервере livejournal.com и Бот для отправки комментариев), а на этой неделе СУП’овцы что-то поменяли, что примеры из этих статей перестали работать.

Первое изменение заключается в том, что, если раньше для общения с сервером можно было использовать адрес как http://www.livejournal.com/interface/flat, так и http://livejournal.com/interface/flat (для flat-протокола) и, соответстенно, http://www.livejournal.com/interface/xmlrpc или http://livejournal.com/interface/xmlrpc (для протокола XML-RPC), а теперь надо обязательно указывать адрес с «www».

Второе изменение касается авторизации как посетителя. Если раньше на сайте была хорошая авторизация, когда на сервер передается не сам пароль, а его хеш, созданный из пароля и случайного числа, полученного от сервера, то теперь форма для авторизации на странице сайта передает пароль в явном виде. К счастью, старый способ можно по-прежнему использовать (если добавить www к адресу сервера: http://www.livejournal.com/login.bml), но сама авторизация на сайте теперь не безопасна.

Например, вот как выглядит измененный код авторизации для Бота на Python без использования безопасной авторизации:

Читать далее ‘Про изменения на сервере ЖЖ’ »

Проблемы с ЖЖ

Интересно что случилось с ЖЖ, не работает ни сайт, ни его Jabber (aka LJTalk). Может депутаты уже включили свой шлюз дря рунета?

Реклама в ЖЖ

Реклама в ЖЖ

Все предыдущие рекламные навороты этих СУПырей ((с) не мой) меня как-то мало волновали. Ну были баннеры, ну вырезал их  AdBlock (), и никаких проблем. До этого меня не столько раздражала реклама (когда заходил на страницы из браузера без банерорезалки), сколько ее размеры. Ну кто СУПырям мешал сделать банеры раза в два меньше по вертикали? Против банеров разумных размеров как таковых я ничего не имею, особенно если она хорошо режется :), сам на своем блоге поставил AdSense после постов, но специально отделил пост от рекламы всякими элементами вроде рейтинга постов и ключевых слов, да и пришлось поковыряться, чтобы на главной странице не было рекламы.

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

Да, самих баннеров благодаря AdBlock’у () я не вижу, но рамки здоровенных размеров по вертикали надо как-то убрать. Пожалуй, начну разбираться с написанием скриптов для Greasemonkey. Так что хотя бы за то, что СУПыри подтолкнули к его изучению, надо им сказать спасибо, польза от них хоть какая-то появилась.

А ведь они еще недавно обещали, что базовые аккаунты трогать не будут. А теперь рекламу в базовые аккаунты они вставили, но другое свое обещание — не улучшать базовые аккаунты они наверняка выполнят.

Опять СУП поменял код страниц ЖЖ. Опять не работает LJWatcher и разворачивалка веток из мозиловского расширения Livejournal addons. На этот раз, правда, все обошлось малой кровью. А точнее адрес однопиксельной картинки, благодаря которой получаются отступы комментариев от левого края в зависимости от уровня вложенности, изменился с http://stat.livejournal.com/img/dot.gif на http://p-stat.livejournal.com/img/dot.gif. LJWatcher я отремонтировал и выложу его чуть-чуть попозже.

PS. А что касается предыдущего поста, удалось довольно красиво получать и удаленные комментарии и теперь всерьез задумываюсь переписать LJWatcher на Питоне.

Комментарии в жж и грабли

Узнал недавно, что оказывается сервер ЖЖ позволяет отображать комментарии не только в «деревянном» виде, т.е. в виде дерева, но еще и в плоском, когда комментарии располагаются в виде списка один за другим. Причем располагаются они в порядке добавления. Для этого надо передать методом GET параметр view со значением flat. Или, говоря для не программистов, достаточно в адрес добавить ?view=flat (или &view=flat, если какие-то параметры до этого уже были). Мне показалось, что вместе с параметром format=light, который позволяет отображать страницы в стиле Lynx независимо от настроек журнала, параметр view=flat мог бы помочь улучшить движок LJWatcher’а. Тем более, что из плоского вида для каждого комментария можно вытащить идентификатор его родителя, после чего восстановить дерево было бы делом 10-15 строк.

Обрадовавшись, решил попробовать эту идею на Питоне. Заодно выковыривать всю нужную информацию из страницы стал с помощью регулярных выражений, в то время как в LJWatcher’е я сначала преобразовывал HTML в XHTML, а потом получал нужные элементы через XPath. Поэтому иногда были ошибки, если в посте или в комментариях был неправильный HTML.

Результат получился впечатляющим. Посты с большим количеством комментариев стали загружаться в несколько раз быстрее. Что, в общем-то, не удивительно. В LJWatcher’е, чтобы развернуть комментарии, приходилось рекурсивно загружать каждую ветку, а с параметром view=flat такой проблемы нет в принципе.

Уже начал подумывать о том, чтобы или в LJWatcher’е переделать движок таким образом, или довести скрипт на Питоне до ума и сделать следующую версию проги на нем, заодно сделать ее кроссплатформенной. Окзалось, что радовался я рано. Осталась одна малюююсенькая проблема, которая и в LJWatcher’е попортила не мало крови, но там ее удалось все-таки обойти. Эта проблема — удаленные комментарии, на которые кто-то ответил. При использовании параметра view=flat удаленные комментарии не отображаются, что в общем-то логично с точки зрения пользователя. И, таким образом, при использовании этого параметра нельзя получить их идентификаторы (и, что самое обидное, идентификаторы их родителей). Поэтому, если есть несколько удаленных комментариев, идущих в качестве ответа друг на друга, а затем за последним удаленным комментарием идет комментарий полноценный, то при построении дерева из комментариев, полученных в плоском виде, теряется вложенность.

Есть мысля дополнительно загружать обычный вид (разумеется, с параметром format=light) только для того, чтобы получить идентификаторы удаленных комментариев и их родителей, но боюсь, что тогда опять пойдут пляски с бубном, которые были в LJWatcher’е (особено, чтобы получить идентификаторы родителей, потому что повыколупливать идентификаторы самих удаленных комментариев — не проблема).

Надо будет еще поковыряться, может что и получится интересного. Но все-таки жалко, что в справке к серверу ЖЖ нет функций для получения комментариев без разбора HTML’а.

PS: Пока рылся в гугле узнал про еще один параметр fallback=s2, чтобы отображать страницу в стиле s2 тоже независимо от настроек журнала. Не знаю кому это может понадобиться, имхо, format=light парсить легче. Ну это так, к сведению, может кому-нибудь и пригодится.