Как стать автором
Обновить

Комментарии 50

Обожаю топики в стиле FAQ.
Вот только нужно было убрать «Что? Сабж.» и маркеры, смотрится — грязно.
Наверное уже многих достал уже своим Sfile, но по идее там хотел делать связь (модуль с удобным API + некий интерфейс в веб+мобильный) с хабром, а там уже можно логиниться брать данные вроде избранного и хоть оффлайн грузить в клиент, однако все это в планах, но моя система должна позволять любому написать модуль например для конвертирования избранного в fb2 просто используя доступ к избранному через API. Правда я думаю что мне надо будет отдельно договариваться с хабром о доступе, т.к. выдавать поля логина, пароля и капчи, а потом хранить все это дело на сервере будет крайне некультурно, так потом заново капчу вводить. Хотя были идеи создания например универсального плагина для Firefox, который бы используя модули, уже на стороне клиента мог собирать данные для связи, да хоть сделать модуль фотоальбома и выбирая фото на любой страничке грузить их в систему. Однако идей много а времени так мало, благо сейчас лето начинается скоро буду дорабатывать API и надеюсь уже через пол месяца можно будет читать хабр с пережатыми картинками под экран телефона или планшета с сжатием всего содержимого и упрощением интерфейса (например мне не нужны соц кнопки, голосование не нужно т.к. у меня кармы нет, добавление в избранное редко нужно + читаю только Все — Новые и мне не нужны рекламные блоки майкрософта, все равно блокирую, не нужна компания для и Q&A нижк) да даже прямой эфир и лучшие мне не нужны, хотя прямой эфир можно и включить. Но главная фича этой оболочки будет не сколько Ajax который сэкономит львиную долю трафика и ускорит работу на мобильном или на планшете, сколько удаление ненужных блоков или добавление других. Например лучшие можно обрезать на 5 значений, но при этом показывать 10 последних новых постов. А если еще использовать мобильный клиент то можно настроить автозакрузку текста статей и комментариев (там еще например правила на обновления их) и например некоторые блоги можно подгружать сразу с изображениями. Да и вообще пережатие для мобильного это будет то что надо. Часто авторы или загружают что то в статью этак на 10 мбайт и размером для FullHD или в комментариях кто то зальет картинку на 5 мбайт (тут можно сделать предупреждение о трафике без автозагрузки)
Короче вариантов масса, если кого заинтересует, напишите мне.
Насчет статьи — действительно не помешала бы онлайн версия. Все таки FB2 для моб девайсов вроде книжек или планшетов, неплохо прямо с них и конвертировать.
ваш комментарий немного больше статьи получился )
ну ничего
Если совсем утрировать мою систему, то у каждого мог быть бы свой комментарий где видно только его интересующую информацию.
Меня поразило вот это
«Ждём. У меня с кэшированными данными экспорт ~150 статей занимает около 6 минут и 600 Мб оперативной памяти.»
Это из за питона, или там все так не оптимизированно? Судя по занимаемой памяти она наверное вообще не очищается, питон не знаю, но сейчас посмотрю код, даже интересно стало почему так много ест.
А я все мечтаю о экспорте архива getpocket в fb2
А комментарии есть? Нет. Есть парсинг, но нет экспорта. Прикрутить несложно, но тогда получаемый файл раздуется ещё раза в два-три.
Советую вам как можно скорее прикрутить эту возможность (хоть флагом). Хабр — одно из мест, где я, помимо чтения топика, ожидаю увидеть и грамотные комменты к оному.
Там ещё одна проблема есть, помимо увеличения размера файла. Дерево комментариев нарисовать не получится. Максимум, на что можно рассчитывать, — все ответы на корневой комментарий будут с отступом (как в теге <blockquote>). Ну и заголовок у каждого комментария типа author1 #comment_id1 (ответ на author2 #comment_id2). К тому же, непонятно, как сделать быстрый переход к комментариям. Можно, например, поделить весь раздел со статьёй на две части: «Статья» и «Комментарии», но тогда оглавление будет выглядеть некрасиво.

Короче, прикрутить кое-как несложно, а вот качественно — задача не самая тривиальная.
Если не опоздал :):
оставлять коменнтарии только 1-го уровня (ну плюс один второго, если он один или 2) а остальное выносить в сноску!
Вообще-то скрипт уже давно не работает, поскольку на сайте поменялась разметка, но если хотите, можете форкнуть (проект лежит на BitBucket) и допилить. У меня самого сейчас заниматься им нет ни времени, ни желания…
Нужен плагин под браузеры (хотя бы хром). Типа Evernote Clipper.
Есть ещё Pocket, но он без fb2.
Грустно без комментов. У половины топиков смысл весь в них.

А вот как хорошо экспортнуть, чтоб удобно на kindle читать я не знаю.
Добавляете в начале адреса «m.» и сохраняете в Instapaper. В мобильной версии хабра комментарии не обрезаются.
только вот с такими ссылками надо быть аккуратнее: habrahabr.ru/company/abbyy/blog/113429/
потому как добавление «m.» в начала адреса не выдаст мобильную версию статьи.
нужно исправить до m.habrahabr.ru/post/113429/
Не знаю в чём именно проблема в скрипте или самом питоне, но по завершению экспорта, процесс питона отожрал 2Гб памяти и продолжал поедать её без остановки.
А у меня почему-то крашится:(
Лог
C:\...afarianist-habrafav-ecf26c772051>habrafav.py
Retrieving article list…
Traceback (most recent call last):
File «C:\_Tmp\habr\Pastafarianist-habrafav-ecf26c772051\habrafav.py», line 60,
in main(username, output_filename)
File «C:\_Tmp\habr\Pastafarianist-habrafav-ecf26c772051\habrafav.py», line 44,
in main
ids = load_identifiers()
File «C:\_Tmp\habr\Pastafarianist-habrafav-ecf26c772051\habrafav.py», line 16,
in load_identifiers
ids = list(article_ids(username))
File «C:\_Tmp\habr\Pastafarianist-habrafav-ecf26c772051\identifiers.py», line
27, in article_ids
for page_number in xrange(1, get_page_count() + 1):
File «C:\_Tmp\habr\Pastafarianist-habrafav-ecf26c772051\identifiers.py», line
15, in get_page_count
count = int(a['href'].split('/')[-2][4:])
TypeError: 'NoneType' object is not subscriptable
Я не учёл, что избранное может занимать меньше одной страницы :) Fixed.
Падает при попытки загрузки картинок
traceback
Downloading images for article #131595…
Downloading images for article #124704…
dl.dropbox.com/u/19527104/images/game/habr_1.png...
Traceback (most recent call last):
File «C:\fav\habrafav.py», line 60, in main(username, output_filename)
File «C:\fav\habrafav.py», line 51, in main
result = render(articles, nickname=username)
File «C:\fav\rendering.py», line 23, in render
binary = make_binary(articles) # this modifies articles so it should be befo
re make_body
File «C:\fav\rendering.py», line 66, in make_binary
images = process_images(article['content'], images)
File «C:\fav\images.py», line 56, in process_images
binary = download_data(src)
File «C:\fav\common.py», line 27, in download_data
response = urllib2.urlopen(url)
File «C:\Python27\lib\urllib2.py», line 126, in urlopen
return _opener.open(url, data, timeout)
File «C:\Python27\lib\urllib2.py», line 400, in open
response = self._open(req, data)
File «C:\Python27\lib\urllib2.py», line 418, in _open
'_open', req)
File «C:\Python27\lib\urllib2.py», line 378, in _call_chain
result = func(*args)
File «C:\Python27\lib\urllib2.py», line 1207, in http_open
return self.do_open(httplib.HTTPConnection, req)
File «C:\Python27\lib\urllib2.py», line 1180, in do_open
r = h.getresponse(buffering=True)
File «C:\Python27\lib\httplib.py», line 1030, in getresponse
response.begin()
File «C:\Python27\lib\httplib.py», line 407, in begin
version, status, reason = self._read_status()
File «C:\Python27\lib\httplib.py», line 365, in _read_status
line = self.fp.readline()
File «C:\Python27\lib\socket.py», line 447, in readline
data = self._sock.recv(self._rbufsize)
socket.error: [Errno 10054]
Убрал статью из избранного, пока парсится нормально. Видимо проблемы только с dropbox
Не обязательно убирать статью из избранного на сайте. Идентификаторы всех найденных статей сохраняются в файл identifiers.txt, который можно отредактировать, после чего перезапустить программу.
Fixed. Исключение теперь грубо подавляется.
Хорошо, что у меня есть Kindle и Klip.me
Спасибо!
Хорошо что есть Evernote WebClipper
Использую Readability для отправки материалов, но работает только с Kindle.
А у меня вот такая ошибка возникает:
посмотреть
$ python habrafav.py
Traceback (most recent call last):
File «habrafav.py», line 4, in from rendering import render
File "/home/t_q_l/1/rendering.py", line 4, in from conversion import convert
File "/home/t_q_l/1/conversion.py", line 36
replace.update({'h' + str(i): 'subtitle' for i in xrange(1, 7)})
^
SyntaxError: invalid syntax
python 2.6.5
Видимо, dictionary comprehensions добавили в язык в версии 2.7.

Замените эту строку на такое:
for i in xrange(1, 7):
    replace['h' + str(i)] = 'subtitle'
Теперь такое вылезло:
File "/home/t_q_l/1/conversion.py", line 61
    preserve.update({tag: [] for tag in replace.itervalues()})
                               ^
SyntaxError: invalid syntax
Ну да, то же самое.

for tag in replace.itervalues():
    preserve[tag] = []

Ну вы поняли идею :)
я жутко извиняюсь, уже думал, что все заработало, но python споткнулся на вот этом через 15 минут работы. Подозреваю, что это из-за русских символов в URL. Не подскажете как вылечить?
такое
img-fotki.yandex.ru/get/5/83739833.10/0_7c488_b5c8c887_XL.jpg... downloaded successfully.
ru.wikipedia.org/wiki/Протокол_AAA...
Traceback (most recent call last):
File «habrafav.py», line 60, in main(username, output_filename)
File «habrafav.py», line 51, in main
result = render(articles, nickname=username)
File "/home/t_q_l/1/rendering.py", line 22, in render
binary = make_binary(articles) # this modifies articles so it should be before make_body
File "/home/t_q_l/1/rendering.py", line 65, in make_binary
images = process_images(article['content'], images)
File "/home/t_q_l/1/images.py", line 38, in process_images
ident = make_id_from_url(src)
File "/home/t_q_l/1/images.py", line 5, in make_id_from_url
return 'i_' + make_filename(url)
File "/home/t_q_l/1/common.py", line 12, in make_filename
url_hash = hashlib.sha1(url).hexdigest()[:hash_length]
UnicodeEncodeError: 'ascii' codec can't encode characters in position 29-36: ordinal not in range(128)
На какой статье падает? Она должна выводиться перед скачиванием картинок примерно так:

Downloading images for article #article_id…
Полагаю, что на #136056
log

Downloading images for article #136056…
img-fotki.yandex.ru/get/4211/ait-it.4/0_4aa4c_8670f218_XL.jpg... downloaded successfully.
4.bp.blogspot.com/_hT2QZmxmzPk/TBUeleE3hZI/AAAAAAAAATc/Mynxmvoouek/s1600/2960s.jpg... downloaded successfully.
img-fotki.yandex.ru/get/4527/83739833.10/0_7c4d9_deb18dce_XL.jpg... downloaded successfully.
www.scienceprog.com/wp-content/uploads/2007i/USB_to_COM/usb_rs232_adapter.jpg... downloaded successfully.
www.codeproject.com/KB/dotnet/WMICodeCreator_Demo/usb-serial-adapter.jpg... downloaded successfully.
tibbo.ru/storage/ds/large/tmbc-ds100-large.jpg... downloaded successfully.
img-fotki.yandex.ru/get/4526/83739833.f/0_7c481_16c83eff_XL.jpg... downloaded successfully.
img-fotki.yandex.ru/get/3/83739833.10/0_7c4a6_b8cd01b3_XL.jpg... downloaded successfully.
img-fotki.yandex.ru/get/3008/83739833.10/0_7c4aa_e740e023_XL.jpg... downloaded successfully.
img-fotki.yandex.ru/get/4/83739833.10/0_7c4a8_b45c05a0_XL.jpg... downloaded successfully.
img-fotki.yandex.ru/get/4424/83739833.10/0_7c4a9_139a7ae4_XL.jpg... downloaded successfully.
img-fotki.yandex.ru/get/4424/83739833.f/0_7c483_e700580b_XL.jpg... downloaded successfully.
img-fotki.yandex.ru/get/4526/83739833.10/0_7c4ab_6b97ba01_XL.jpg... downloaded successfully.
img-fotki.yandex.ru/get/4527/83739833.10/0_7c4ac_fd46c5a0_XL.jpg... downloaded successfully.
img-fotki.yandex.ru/get/3008/83739833.f/0_7c486_3447b950_XL.jpg... downloaded successfully.
img-fotki.yandex.ru/get/4425/83739833.f/0_7c487_85990f14_XL.jpg... downloaded successfully.
img-fotki.yandex.ru/get/5/83739833.10/0_7c488_b5c8c887_XL.jpg... downloaded successfully.
ru.wikipedia.org/wiki/Протокол_AAA...
Traceback (most recent call last):
Fixed. К сожалению, в Python 2.x довольно неудобно организована работа с Unicode — по умолчанию нормально декодируются только символы с кодом <128. Не знаю, как с этим в ветке 3.x.
Cпасибо. Всё получилось
Статья про избранное, ушла в избранное. Как то так получается.
Рекурсия!
У меня тоже вываливается, правда в файле /usr/lib/python2.7/socket.py:

Посмотреть
File "/usr/lib/python2.7/httplib.py", line 1030, in getresponse
response.begin()
File "/usr/lib/python2.7/httplib.py", line 407, in begin
version, status, reason = self._read_status()
File "/usr/lib/python2.7/httplib.py", line 365, in _read_status
line = self.fp.readline()
File "/usr/lib/python2.7/socket.py", line 447, in readline
data = self._sock.recv(self._rbufsize)
socket.error: [Errno 104] Connection reset by peer
Fixed. Исключение теперь грубо подавляется. Перекачайте версию из репозитория.
ок, спс!
Теперь падает здесь:

Посмотреть
File "/home/username/Downloads/Pastafarianist-habrafav-a3eaa3feac82/images.py", line 56, in process_images
binary = download_data(src)
File "/home/username/Downloads/Pastafarianist-habrafav-a3eaa3feac82/common.py", line 31, in download_data
raise urllib2.URLError # this exception is handled in images.py
TypeError: __init__() takes exactly 2 arguments (1 given)

Да, вы правы. Fixed. Again.
Спс, сейчас попробую.
Теперь все работает, еще раз спасибо!
У меня в Ubuntu 12.10 пакет python-beautifulsoup4 называется python-bs4.
Я ставил через pip в вирт окружение, но вдруг кому-то понадобится.
Исправил баг с пробелами вокруг тегов. Перекачайте версию из репозитория.
Долго генерировалось из-за того, что часть изображений уже удалили.
Но все получилось. Огромное спасибо.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории