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

Узнал недавно, что оказывается сервер ЖЖ позволяет отображать комментарии не только в «деревянном» виде, т.е. в виде дерева, но еще и в плоском, когда комментарии располагаются в виде списка один за другим. Причем располагаются они в порядке добавления. Для этого надо передать методом 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 парсить легче. Ну это так, к сведению, может кому-нибудь и пригодится.

PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Пожалуйста, оцените запись

УжасноПлохоТак себеХорошоОтлично (Количество голосов: 1, средняя оценка: 5,00)
Загрузка...

комментария 2

  1. oxana:

    Кстати, поздравляю всех-всех-всех участников блога с вчерашним Днем Знаний. (Автора наверное не стоит поздравлять, так как у Вас мне кажется первые сентября уже в прошлом ;)) Вчера забыла поздравить, не до этого было. Сейчас вот только отошла немного 🙂

  2. Зинаида:

    Наступил — значит, это я, а не кто-то другой. А потом, грабли — это еще система прививок.

Leave a comment

Subscribe without commenting