schegloff (![]() @ 2006-11-30 23:05:00 |
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] .... и куча других ЖЖ-юзеров, журналы которых вы хотели бы сохранить себе на всякий случай.
![]() | ![]() 2006-11-30 06:13 pm UTC (link) |
и тут галковский и крылов |
![]() | ![]() 2006-11-30 06:15 pm UTC (link) |
Посмотреть любой дневник или запись с комментариями в своем, ненавороченном стиле очень просто — достаточно добавить в линк приставочку ?style=mine Вопрос только в том, умеет ли эта програмка залогиниваться? (Reply to this) (Thread) |
![]() | А вот это для меня НОВОСТЬ! ![]() 2006-11-30 06:37 pm UTC (link) |
Сейчас я вслед за LJSM использую ?usescheme=lynx. Спасибо за классную идею! Пока, конечно, программка не логинится. Но попробую заставить :) (Reply to this) (Parent) (Thread) |
![]() | Re: А вот это для меня НОВОСТЬ! ![]() 2006-11-30 07:13 pm UTC (link) |
а зачем вообще стили для архивации? что мешает сохранять данные в RSS? XML и парсить удобнее. Просто добавьте /rss в адресе журнала и все. например, для Вашего журнала: http://schegloff.livejournal.com/rs (Reply to this) (Parent) (Thread) |
![]() | ![]() 2006-11-30 07:18 pm UTC (link) |
Жаль только, что для комментариев это не работает ; ) (Reply to this) (Parent) |
![]() | ![]() 2006-12-01 03:28 am UTC (link) |
Читаем faq, вопрос про RSS: В каждом потоке отображаются 25 самых свежих записей (исключая записи задним числом): тема (если есть), полный текст записи и ссылка на запись. Больше 25 через RSS не получите, и комментариев тоже не получите. (Reply to this) (Parent) |
![]() | ![]() 2006-11-30 07:21 pm UTC (link) |
Спасибо! Скрипт крут! Уже скачал ![]() ![]() |
![]() | ![]() 2006-11-30 07:29 pm UTC (link) |
Скачались записи только за ноябрь! Что поправить в скрипте, чтобы скачивался ВЕСЬ журнал? (Reply to this) (Thread) |
![]() | Спасибо, есть первый баг! ![]() 2006-12-01 05:40 am UTC (link) |
Ага, именно что "упс". Во-первых, в программе впопыхах сделана ошибка - lj_archiver.py galkovsky без параметров вообще не работает (не устанавливается глубина архивации при одном параметре). Во-вторых, после того как я ее поправил, программа у меня все равно заткнулась (на Галковском) на 13 сентября. Сейчас разберусь, после победы выложу версию 0.21 :) (Reply to this) (Parent) (Thread) |
![]() | Выложил версию 0.21 - ![]() 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) |
![]() | ![]() 2006-12-01 10:26 am UTC (link) |
Галковского скачала успешно. С первого раза. 52,7 МБ (55 299 405 байт) (Reply to this) (Parent) |
![]() | ![]() 2006-11-30 11:25 pm UTC (link) |
Еще есть ![]() (Reply to this) (Thread) |
![]() | А Вы там последнюю запись читали? ![]() 2006-12-01 05:37 am UTC (link) |
От 19 октября? Цитирую: Для всех у кого не работает ALJ и кто хочет выкачать свой журнал, предлагаю пользоваться альтернативной программой: ljArchive. Так что ALJ не упомянута мной по самой простой причине: вообще не работает. При всей Вашей симпатии к ее автору... (Reply to this) (Parent) (Thread) |
![]() | ![]() 2006-12-01 07:42 am UTC (link) |
Ну, симпатии у меня к автору alj как раз никакой нет -- и его политические убеждения мне глубоко противно, и то, что он этой alj поманил да бросил... (Reply to this) (Parent) (Thread) |
![]() | А чем поманил? ![]() 2006-12-01 08:04 am UTC (link) |
Какие-то особые функции обещал, или life-time поддержку? Что в ALJ было такого симпатичного? (сам ей пользовался в прошлом, 2005 году, выкачал один ЖЖ, но сугубо для целей поиска в комментариях, поэтому на прочий функционал внимания не обратил). (Reply to this) (Parent) (Thread) |
![]() | ![]() 2006-12-01 08:44 am UTC (link) |
У меня было комьюнити, которое я вел -- ![]() Кстати, там в комьюнити alj есть моя просьба сделать хронотредовое представление комментов (есть такая крутая разработка для рендеринга онлайн дискуссий) -- но она была автором продинамлена, хотя и пообещана. Советую поглядеть, это интересно: можно читать комменты как по времени их поступления (как в форумах), так и по тредам (кто кому на что ответил). (Reply to this) (Parent) (Thread) |
![]() | Прям-таки мое ТЗ на lj_archiver :) ![]() 2006-12-01 10:28 am UTC (link) |
Сейчас поищу Ваш комментарий по "хронотрендовому представлению". А пока зафиксирую пожелания по доработке: 1) возможность читать журнал "непрерывной лентой", уравняв записи и комментарии в правах, 2) закачка картинок (с кэшем, понятное дело), 3) динамическое представление комментариев - на выбор, тредами или хронологией. Неслабо. Понятно теперь, чем Вам ALJ приглянулась :) (Reply to this) (Parent) (Thread) |
![]() | ![]() 2006-12-01 02:35 pm UTC (link) |
Ага, еще в alj (плохой, но таки) поиск по постам и комментам с флексиями -- причем результаты выдаются не ссылками, а тоже развернутой лентой постов и комментов с выделенными цветом словами. Хронотредовое представление -- это когда видно и время и тред, а не "на выбор". Впрочем, "на выбор" -- тоже было бы хорошо. (Reply to this) (Parent) |
![]() | ![]() 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) |
![]() | ![]() 2006-12-01 01:29 am UTC (link) |
(Ошибочка вкралась - вместо netsim.py нужно подставить имя файла - в Вашем случае, lj_archiver.py).. (Reply to this) (Parent) (Thread) |
![]() | Спасибо! ![]() 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 Почему я в ![]() Да, размер уникодной библиотеки тоже поражает. Языков-то на Земле, японский бог... (Reply to this) (Parent) (Thread) |
![]() | ![]() 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) |
![]() | Пиарить надо ![]() 2006-12-01 03:43 am UTC (link) |
Пользователей питона мало, так как все обладают большим запасом лени, названной вами воспитанной пассивностью. Мысль об автономной программе тем более правильна - это облегчает первый шаг - начать применять эту программу. А там намного легче сделать второй - скачать исходник и посмотреть, как это работает. Творческих успехов в деле СУ-4. Даешь свободный доступ к информации. |