schegloff ([info]schegloff) wrote,
@ 2006-11-30 23:05:00


23 replies, 9 authors
Entry tags:полезняшки

Бэкап ненавороченных ЖЖ на python: lj_archiver
Кое-что обновил на своей страничке питоновских полезняшек. Для широкого круга пользователей интересен будет прежде всего lj_archiver.py - программка, функционального аналога которой я просто не знаю (иначе бы и писать не стал).

Что делает lj_archiver.py? Вроде бы самые простые действия: 1) определяет, в каком месяце была сделана первая запись в указанном журнале, 2) формирует общий список (индексный файл) всех неподзамочных записей журнала, 3) для каждой записи проверяет, сохранена ли она на диске с тем же количеством комментариев, которое фигурирует в индексе, и если комментариев прибыло (или запись не была сохранена), считывает запись, 4) в случае, если число комментариев превышает 50, и запись является "многотредовой" - разворачивает все комментарии, и сохраняет результат в одном файле.

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

[каталог с lj_archiver.py]
   [lj_archive]
      [schegloff]
         schegloff_index.html
         .... куча записей вида schegloffNNNNNN.html, где NNNNNN
              - присвоенный LJ номер очередной записи
      [galkovsky]
      [krylov]
      .... и куча других ЖЖ-юзеров, журналы которых вы хотели бы
           сохранить себе на всякий случай.


Казалось бы, ничего особенного. Однако в ситуации, когда самый популярный на сегодня LJArchive сохраняет только те журналы, к которым у вас есть пароль (т.е. сохранить чужие ЖЖ вы им не сможете), да еще и не всегда работает (на моем ЖЖ - затыкается), а самый лучший на сегодня LJSM разворачивает длинные треды только не длиннее двух страниц (в то время как у Галковского почти все записи сопровождаются 3 и более страницами комментариев) - написание собственной программы оказалось единственным способом получить полный бэкап открытых записей большого количества интересных журналов.

Ну а теперь о грустном. Программа понимает только ЖЖ с простыми стилями. Навороченные журналы, такие, например, как у [info]shurigin, ей "не по зубам". Версия программы - всего 0.2, поэтому не удивляйтесь, если на каком-то журнале она выдаст вам совершеннейшую ахинею. Автор, то есть я, всегда доступен - пишите, что сумею, поправлю.

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


[info]vratnik
2006-11-30 06:13 pm UTC (link)
и тут галковский и крылов

(Reply to this)


[info]gxost
2006-11-30 06:15 pm UTC (link)
Посмотреть любой дневник или запись с комментариями в своем, ненавороченном стиле очень просто — достаточно добавить в линк приставочку ?style=mine

Вопрос только в том, умеет ли эта програмка залогиниваться?

(Reply to this) (Thread)

А вот это для меня НОВОСТЬ!
[info]schegloff
2006-11-30 06:37 pm UTC (link)
Сейчас я вслед за LJSM использую ?usescheme=lynx. Спасибо за классную идею!

Пока, конечно, программка не логинится. Но попробую заставить :)

(Reply to this) (Parent) (Thread)

Re: А вот это для меня НОВОСТЬ!
[info]curvex
2006-11-30 07:13 pm UTC (link)
а зачем вообще стили для архивации? что мешает сохранять данные в RSS? XML и парсить удобнее.
Просто добавьте /rss в адресе журнала и все. например, для Вашего журнала: http://schegloff.livejournal.com/rss

(Reply to this) (Parent) (Thread)


[info]gxost
2006-11-30 07:18 pm UTC (link)
Жаль только, что для комментариев это не работает ; )

(Reply to this) (Parent)

Re: А вот это для меня НОВОСТЬ!
[info]kr214
2006-12-01 03:28 am UTC (link)
Читаем faq, вопрос про RSS:

В каждом потоке отображаются 25 самых свежих записей (исключая записи задним числом): тема (если есть), полный текст записи и ссылка на запись.

Больше 25 через RSS не получите, и комментариев тоже не получите.

(Reply to this) (Parent)


[info]mac_arrow
2006-11-30 07:21 pm UTC (link)
Спасибо! Скрипт крут!
Уже скачал [info]schegloff, качаю [info]galkovsky. ;)

(Reply to this)

Упс!
[info]mac_arrow
2006-11-30 07:29 pm UTC (link)
Скачались записи только за ноябрь! Что поправить в скрипте, чтобы скачивался ВЕСЬ журнал?

(Reply to this) (Thread)

Спасибо, есть первый баг!
[info]schegloff
2006-12-01 05:40 am UTC (link)
Ага, именно что "упс". Во-первых, в программе впопыхах сделана ошибка - lj_archiver.py galkovsky без параметров вообще не работает (не устанавливается глубина архивации при одном параметре). Во-вторых, после того как я ее поправил, программа у меня все равно заткнулась (на Галковском) на 13 сентября. Сейчас разберусь, после победы выложу версию 0.21 :)

(Reply to this) (Parent) (Thread)

Выложил версию 0.21 -
[info]schegloff
2006-12-01 06:16 am UTC (link)
с исправленным багом. У меня докачала Галковского до начала сентября, потом я ее тормознул, т.к. дорабатывать надо. Пока - как работать с этой версией. Сразу после запуска она строит внутренний (без сохранения на диск, увы) индекс записей и выводит в DOS-окне "Index 2006,12... Index 2006,10...". Так вот, надо дождаться, когда эти сообщения закончатся - и если закончатся они в далеком прошлом, типа 2004,01 - все нормально. Дальше программка пойдет читать записи, в обратном порядке, из нынешнего в прошлое, и в этом процессе легко может не сказав дурного слова вылететь по таймауту Интернета. Если в результате в каталоге архива оказалось маловато файлов (Вы видели индекс по 2004,10 - а там самый маленький номер от 2006-09-22, например) - нужно переименовать сохранившийся-таки файл galkovsky_index.bak в galkovsky_index.html (перезаписав предыдущий), и снова запустить программку. В этом случае она не будет перегружать уже сохраненные файлы, а сразу займется следующими. Несколько запусков - и архив готов!

Теперь надо бы опрос проявить, кого архивировать - но сначала баги подчищу, опрос в воскресенье сделаю.

(Reply to this) (Parent) (Thread)

Спасибо!
[info]mac_arrow
2006-12-01 10:26 am UTC (link)
Галковского скачала успешно. С первого раза. 52,7 МБ (55 299 405 байт)

(Reply to this) (Parent)


[info]ailev
2006-11-30 11:25 pm UTC (link)
Еще есть [info]alj

(Reply to this) (Thread)

А Вы там последнюю запись читали?
[info]schegloff
2006-12-01 05:37 am UTC (link)
От 19 октября? Цитирую: Для всех у кого не работает ALJ и кто хочет выкачать свой журнал, предлагаю пользоваться альтернативной программой: ljArchive.

Так что ALJ не упомянута мной по самой простой причине: вообще не работает. При всей Вашей симпатии к ее автору...

(Reply to this) (Parent) (Thread)

Re: А Вы там последнюю запись читали?
[info]ailev
2006-12-01 07:42 am UTC (link)
Ну, симпатии у меня к автору alj как раз никакой нет -- и его политические убеждения мне глубоко противно, и то, что он этой alj поманил да бросил...

(Reply to this) (Parent) (Thread)

А чем поманил?
[info]schegloff
2006-12-01 08:04 am UTC (link)
Какие-то особые функции обещал, или life-time поддержку? Что в ALJ было такого симпатичного?

(сам ей пользовался в прошлом, 2005 году, выкачал один ЖЖ, но сугубо для целей поиска в комментариях, поэтому на прочий функционал внимания не обратил).

(Reply to this) (Parent) (Thread)

Re: А чем поманил?
[info]ailev
2006-12-01 08:44 am UTC (link)
У меня было комьюнити, которое я вел -- [info]openmeta. Так там основной процесс шел в комментах и основной контент был в комментах, а не постингах. Единственный способ с этим всем было работать с alj -- весь текст выдавался огромными страницами по 1Мбайт штука, и можно было даже искать в комментах. Это было сильно, никакой Яндекс этого до сих пор не дает (развертки комментов и поиск по ним, а также возможность читать не отдельными постингами, а непрерывной лентой). Еще там интересно то, что качались и картинки (особливо -- юзерпики) тоже. Докачки там тоже были. Еще было интересно, что комменты располагались хронологически, а не тредово.

Кстати, там в комьюнити alj есть моя просьба сделать хронотредовое представление комментов (есть такая крутая разработка для рендеринга онлайн дискуссий) -- но она была автором продинамлена, хотя и пообещана. Советую поглядеть, это интересно: можно читать комменты как по времени их поступления (как в форумах), так и по тредам (кто кому на что ответил).

(Reply to this) (Parent) (Thread)

Прям-таки мое ТЗ на lj_archiver :)
[info]schegloff
2006-12-01 10:28 am UTC (link)
Сейчас поищу Ваш комментарий по "хронотрендовому представлению". А пока зафиксирую пожелания по доработке:
1) возможность читать журнал "непрерывной лентой", уравняв записи и комментарии в правах,
2) закачка картинок (с кэшем, понятное дело),
3) динамическое представление комментариев - на выбор, тредами или хронологией.

Неслабо. Понятно теперь, чем Вам ALJ приглянулась :)

(Reply to this) (Parent) (Thread)

Re: Прям-таки мое ТЗ на lj_archiver :)
[info]ailev
2006-12-01 02:35 pm UTC (link)
Ага, еще в alj (плохой, но таки) поиск по постам и комментам с флексиями -- причем результаты выдаются не ссылками, а тоже развернутой лентой постов и комментов с выделенными цветом словами.

Хронотредовое представление -- это когда видно и время и тред, а не "на выбор". Впрочем, "на выбор" -- тоже было бы хорошо.

(Reply to this) (Parent)


[info]eugeni_dodonov
2006-12-01 01:27 am UTC (link)
Из питона .exe можно создать используя py2exe (http://www.py2exe.org/). Всего три вещи нужно сделать:
1 - установить собственно py2exe
2 - создать файл setup.py вот такого вида:
from distutils.core import setup
import py2exe
setup(console=["netsim.py"])

3 - запустить python setup.py py2exe

он создаст директорию дист с .exe файлом и нужными dll'ками.

(Reply to this) (Thread)


[info]eugeni_dodonov
2006-12-01 01:29 am UTC (link)
(Ошибочка вкралась - вместо netsim.py нужно подставить имя файла - в Вашем случае, lj_archiver.py)..

(Reply to this) (Parent) (Thread)

Спасибо!
[info]schegloff
2006-12-01 06:22 am UTC (link)
Одно дело это в мануале читать, а другое - от человека, который сам так уже делал :)
Ну раз вызвались, то излагаю мою проблему: у меня в dist никакого exe-шника не появляется:
_SOCKET  PYD        49 152  29.03.06  17:35 _socket.pyd
_SSL     PYD       483 328  29.03.06  17:38 _ssl.pyd
BZ2      PYD        77 824  29.03.06  17:35 bz2.pyd
UNICOD~1 PYD       405 504  29.03.06  17:35 unicodedata.pyd
ZLIB     PYD        69 632  29.03.06  17:35 zlib.pyd
MSVCR71  DLL       348 160  21.02.03   4:42 MSVCR71.dll
PYTHON24 DLL     1 871 872  29.03.06  17:35 python24.dll


Почему я в [info]ru_python и написал просьбу о помощи.

Да, размер уникодной библиотеки тоже поражает. Языков-то на Земле, японский бог...

(Reply to this) (Parent) (Thread)

Re: Спасибо!
[info]eugeni_dodonov
2006-12-01 11:09 am UTC (link)
Странно, у меня тут собралось и заработало, появились файлы lj_archiver.exe, w9xpopen.exe (это для систем типа windows 95/98) и library.zip. Единственно что ошибку выдает, как в exe так и в собственно питоне:
Traceback (most recent call last):
File "lj_archiver.py", line 288, in ?
f_year, f_month = get_first_month(base_user, f_comm)
NameError: name 'get_first_month' is not defined

Но exe нормально заработал, создал диреторию lj_archive, итд.

Попробуйте запустить "python setup.py py2exe" в терминале, он может подробнее сказать что у Вас за проблема. У меня тут python 2.4.3 и py2exe 0.6.5.

(Reply to this) (Parent)

Пиарить надо
[info]iss_shoo
2006-12-01 03:43 am UTC (link)
Пользователей питона мало, так как все обладают большим запасом лени, названной вами воспитанной пассивностью.
Мысль об автономной программе тем более правильна - это облегчает первый шаг - начать применять эту программу.
А там намного легче сделать второй - скачать исходник и посмотреть, как это работает.
Творческих успехов в деле СУ-4. Даешь свободный доступ к информации.

(Reply to this)