[задачка-конкурс] маленький планировщие и скачиватель

Werdna

Где-то пол года назад я написал малюсенькую библиотечку, чтобы в щадящем режиме выкачивать интернеты с учётом robots.txt и более-менее не насилуя сайты в интернете. Мне показалось, что кому-то она может быть тоже интересна, так как она простая и удобная. Приветствуется дофичивание, поиск и исправление багов.
Библиотечка — обёртка над curl, работает в фиксированное число потоков, что очень важно — рабочий поток всегда не блокируется, при этом может "добрасывать" урлы на закачку.
Называется Мультчер, multi fetcher:
http://github.com//multcher
Вместе с библиотечкой идёт тестовая программа, которая по дефолтку выкачивает три страницы из интернетов. Если программе сказать в качестве параметра stdin, то она начинает случать stdin и выкачивать урлы, которые ей засылают.
Программа работает так:
1. Урл скачивается, если robots.txt разрешает это делать. Исключение (прибито гвоздями) — rutracker.org. В принципе, можно как-то системно сделать список доменов-исключений. :)
2. Если идёт цепочка редиректов, то выкачивается последний результат.
3. С одного домена сайты выкачиваются не чаще, чем раз в сколько-то секунд, чтобы не напрягать сайты. Планировщик пока простой, не учитывает, что 200 сайтов могут сидеть на одном виртуальном хостинге, но — как есть. Хотите — сделайте лучше. ;)
Есть баг. Предлагаю пытливым умам исправить его. Он простой, правится очень кратким диффом, но надо посидеть повтыкать. Баг следующий: если отправить всего один урл на выкачку, то программа выкачает только robots.txt с домена, но никак не сам урл. Т. е.
 echo "http://example.com/" | ./test_multcher stdin 

не работает как надо, хотя если урлов заправить больше, то всё ок. ;)
Предлагаю исправить. Приславшему дифф — небольшая премия в 0.1 биткойна. Или эквивалент на телефон рублями.
Кому поделка может пригодиться — используйте на здоровье.

asvsergey

Я правильно понял что ты смотришь robots.txt только для первого урла в цепочке редиректов?

Werdna

Выкачивается, понятно дело, один раз. Но в цепочке редиректов не проверяется вся цепочка, возможно это баг-фича.
Вообще, как правильнее, интересно? В рамках одного домена редиректы, по идее, лежат на совести ресурса. Только сейчас подумал, что можно же редиректы на другой домен вести, и если проверки не будет, то скачает страницу без разрешения.
Спасибо за багрепорт! :D

stm5872449

Я один не смог сбилдить? :(
 giz-ThinkCentre-M90p:~/multcher$ make
[ 66%] Built target multcher
Linking CXX executable test_multcher
/usr/bin/ld: cannot open output file test_multcher: Is a directory
collect2: error: ld returned 1 exit status
make[2]: *** [test_multcher] Error 1
make[1]: *** [CMakeFiles/test_multcher.dir/all] Error 2
make: *** [all] Error 2

okis

Собирай в другом каталоге

zya369

да та вообще печаль - сначала надо скачать, собрать и поставить какую-то coda (deb пакет которой просто так еще не собирается а потом (у меня, по-крайней мере) еще и CMakeLists поправить, т.к. либа от этой коды ставится в /usr/local/lib64 и надо сделать
-USE_PACKAGE (coda coda/coda.h)
+USE_PACKAGE (coda coda/coda.h /usr/local/lib64)

2 пианист, а в чем посыл сего мероприятия? если там все так легко - почему ты сам не поправишь? или пойнт - показать всем, что есть такая либа (+ либа бачана)?

Werdna

Да, я извиняюсь что библиотеку бачановских тулзов не сказал где брать. Мне она слишком привычна:
http://github.com/bachan/coda
Деб-пакет точно под Убунтой собирается любой. Для ЦентОС тоже есть rpm.
2 пианист, а в чем посыл сего мероприятия? если там все так легко - почему ты сам не поправишь? или пойнт - показать всем, что есть такая либа (+ либа бачана)?
Поделиться решил, не более. Можете покритиковать, тут вот уже замечание нашли крутое про редиректы, да. :)
Ну а баг я могу и сам исправить, но кто-то если вникнет в код, то посмотрит. Может кому интересна.
Вообще, я же почему писал? Потому что ничего вменяемого качать из интернетов нет. Ну вот так чтобы взял и качай. Курл позволяет качать, но ничего не умеет в сторону разрешений и планировщика. А кому качать много надо, те всегда изобретают что-то.
Суть вообще библиотеки Мультчера — попытаться сделать максимально простой, но в то же самое время удобный для кастомизации выкачиватель. Это версия 0.1, она сырая, и будет дорабатываться. Может кто захочет вложить свои силы и время. Вместе будет лучше получаться.
Ещё выложу, если кому интересно канонизатор урлов (да, это не простая штука, поверьте мне!) и html-парсер.

stm5872449

html-парсер
Для этого тоже ничего вменяемого нет что ли? :)

zya369

Деб-пакет точно под Убунтой собирается любой.
$ git clone http://github.com/bachan/coda
Cloning into 'coda'...
remote: Counting objects: 1138, done.
remote: Compressing objects: 100% (612/612 done.
remote: Total 1138 (delta 509 reused 1105 (delta 477)
Receiving objects: 100% (1138/1138 328.07 KiB | 186 KiB/s, done.
Resolving deltas: 100% (509/509 done.
$ cd coda/
$ dpkg-buildpackage
dpkg-buildpackage: source package libcoda-dev
dpkg-buildpackage: source version 0.1.6
dpkg-buildpackage: source changed by Sergey Bochenkov <yandex.ru>
dpkg-buildpackage: host architecture amd64
dpkg-source --before-build coda
fakeroot debian/rules clean
dh clean
make: dh: Command not found
make: *** [clean] Error 127
dpkg-buildpackage: error: fakeroot debian/rules clean gave error exit status 2

zya369

Суть вообще библиотеки Мультчера — попытаться сделать максимально простой, но в то же самое время удобный для кастомизации выкачиватель. Это версия 0.1, она сырая, и будет дорабатываться. Может кто захочет вложить свои силы и время. Вместе будет лучше получаться.
ну так бы и написал, что вот мол, присоединяйтесь кто хочет, а не конкурс/задачка
Курл позволяет качать, но ничего не умеет в сторону разрешений и планировщика. А кому качать много надо, те всегда изобретают что-то.

т.е. ты хочешь написать универсальный планировщик? вряд ли выйдет же - все равно будет заточено под тебя и твои задачи

Werdna

т.е. ты хочешь написать универсальный планировщик? вряд ли выйдет же - все равно будет заточено под тебя и твои задачи
Минималочка у всех одинаковая. Есть у тебя пачка из 100500 урлов, или поток в 5-6 в секунду. Задачу решает такая тулза — хорошо же.
Не нравится? Обосри тут, только конструктивно, напиши где что плохо.
Оставить комментарий
Имя или ник:
Комментарий: