LINUX.ORG.RU
ФорумTalks

[быдлокод][лол] Качалка для баша на баше

 


0

0

Вчера по просьбе одного товарища написал жутковатый скриптик для скачивания произвольного диапазона страниц bash.org.ru в один файл формата fb2. Сейчас подумал, а вдруг здесь кому понадобится? (-:

Диапазон обязательно передаётся параметром в виде 1-100 (первая - последняя). Примерно все зааппрувленные цитаты можно скачать с параметром 1-492. Сохраняется в quotes.fb2 в каталоге запуска.

Замечания по качеству и функциональности не принимаются — написано just4fun, и лично мне не нужно =)

#!/bin/bash
#===============================================================================
#
#          FILE:  bor_get.sh
# 
#         USAGE:  bor_get.sh 
# 
#   DESCRIPTION:  Download bash.org.ru quotes to files
# 
#       OPTIONS:  range in form 100-200 where numbers are pages beginning from 1
#  REQUIREMENTS:  bash, wget, curl, 
#          BUGS:  none known
#         NOTES:  ---
#        AUTHOR: GotF
#       COMPANY: 
#       CREATED: 05/14/2010 10:18:59 PM YEKST
#      REVISION: test 
#===============================================================================


PAGE_BEGIN=$(echo ${1} | cut -d "-" -f1);
PAGE_END=$(echo ${1} | cut -d "-" -f2);
TMP_FILE="/tmp/bor.page";

echo -e "<?xml version=\"1.0\" encoding=\"windows-1251\"?>""\n"\
"<FictionBook xmlns=\"http://www.gribuser.ru/xml/fictionbook/2.0\" xmlns:l=\"http://www.w3.org/1999/xlink\">""\n"\
"<body>""\n" > quotes.fb2

for (( page = ${PAGE_BEGIN}; page <= ${PAGE_END}; page++ )); do
	curl -s http://bash.org.ru/index/${page} > ${TMP_FILE};
	grep -o "<span id=.*\">" ${TMP_FILE} | egrep -o "[0-9]{1,}" | sort -g | while read qnum; do
		qbody=$(grep -A6 "v$qnum" ${TMP_FILE} | grep "<div>" | sed -e 's/<div>//' -e 's/<\/div>//')
		echo -e "<title>$qnum</title>""\n"\
		"<p>${qbody}</p>""\n" >> quotes.fb2
	done
done
echo -e "</body>""\n"\
"</FictionBook>" >> quotes.fb2
sed -i -e 's/\t*//g' quotes.fb2;
sed -i -e 's/^\ *//g' -e 's/<br.*>/<\/p>\n<p>/g' quotes.fb2;
★★★★★

Последнее исправление: GotF (всего исправлений: 2)

Поддержу тебя. Да ты прав ты быдлокодер.

Жуткий код из которого непонятно что он делает. Особенно жутко смотрится смешивание в командах строк с символами «\».

Такое надо писать на PHP. Будет стабильней и красивей и надёжней.

К тому же баш код перемешанный с множеством мелких утилит работает медленно. Однажды пробовал делать подобный код и отказался в пользу PHP.

К тому же ты лицензию не указал.

gamecoder
()
Ответ на: комментарий от gamecoder

Да ты прав ты быдлокодер.

Я этим не зарабатываю, совесть не мучает =) Меня развлекает написание трудночитаемого кода, хотя для себя я пишу в более строгом стиле, и подробными комментариями.

К тому же ты лицензию не указал.

Для полутора строчек-то?

GotF ★★★★★
() автор топика
Ответ на: комментарий от gamecoder

>К тому же баш код перемешанный с множеством мелких утилит работает медленно
Именно. Срочно портировать на ассамблер!

dogbert ★★★★★
()
Ответ на: комментарий от dogbert

Так вот кто написал эпохальную программу на Perl!

Не, это для меня слишком круто. Но я учусь в свободное время, хотя до участия в конкурсах перловых однострочников мне как до Луны пешком.

GotF ★★★★★
() автор топика

Когдато писал скрипт на python для выдергивания произвольных цитат с баша. Когда-то хотел прикрутить к конькам, но не сложилось и стал жить без коньков).

Если кому-то надо:

http://webland.org.ua/shared/get_bash.tar.bz2

ZeMvlad
()
Ответ на: комментарий от GotF

Просто код не наглядный. Ощущение что свалено в кучу. А то что не наглядно, то скорее всего содержит ошибки которые трудно обнаружить и исправить. И модернизировать такой код труднее.

gamecoder
()
Ответ на: комментарий от bioreactor

а почему именно на баше?

Я его неплохо знаю, мне он нравится.

GotF ★★★★★
() автор топика
Ответ на: комментарий от gamecoder

Кто ж спорит? У меня там была ошибочка:

while read $qnum

пока я этот `$', по невнимательности воткнутый, нашёл, столько матов было... =) А модернизация не предусматривалась изначально, ибо на фиг мне это не надо.

И повторюсь — для своих нужд я не жалею строк и комментариев. Есть опыт разбора несложного (во время написания) скрипта, в котором не было ни единого комментария, и хватало «волшебства»... Это стало хорошим аргументом для использования комментариев в дальнейшем.

GotF ★★★★★
() автор топика
Ответ на: комментарий от jungleace

Вот бы для ЛОР портировать.

ЛОР ресурс динамичный, имеет ли смысл читать его оффлайн? Если напишу достаточно быстро курсовую, то могу попробовать наклепать такой же скрипт для ЛОРа, только задачу сформулируйте точнее, а именно — по какому критерию скачивать треды.

GotF ★★★★★
() автор топика
Ответ на: комментарий от GotF

> а именно — по какому критерию скачивать треды.

По тегам хотябы. Например чтоб скачивать все треды с тегом [вещества].

drull ★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.