вторник, 16 декабря 2008 г.

wget and sed всех победят!

Я вот не понимаю, зачем люди выкладывают книги в веб в html и при этом не дают возможности скачать архив? Что бы отнять у заинтересовавшегося пять минут времени? Захотел вот книжку скачать, Practical PostgreSQL, а архива нет, по крайней мере, не нашёл.

Ну да впрочем, искал я недолго:
wget -m -np http://www.commandprompt.com/ppbook/
Отлично, открываю - а там все ссылки абсолютные, типа /ppbook/p206. Нет думаю, нас так просто не возьмёшь:
sed -i -e "s/\/ppbook\///" *[[:digit:]]**
(такая маска нужна, что бы каталог images пропустить, а так там всё с цифрами)

Докачал css-файлы и изменил ссылки на них.

Кроме того, мне не понравились , что верхние части страниц занимает всякий мусор с http://www.commandprompt.com/, там ссылки на Home, About, поиск какой-то, короче, мне совершенно не нужные вещи. Решил победить:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:html="http://www.w3.org/1999/xhtml"
version="1.0">

<xsl:output method="html" public="-//W3C//DTD XHTML 1.0 Transitional//EN" system="DTD/xhtml1-transitional.dtd">

<xsl:template match="/">
<xsl:copy>
<xsl:copy-of select="@*">
<xsl:apply-templates select="*">
</xsl:copy>
</xsl:template>

<xsl:template match="div[@id='widetop']">
<xsl:template match="ul[@id='greymenu_wide']">

<xsl:template match="*|text()">
<xsl:copy>
<xsl:copy-of select="@*">
<xsl:apply-templates select="*|text()">
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Это xslt-преобразование копирует входящий html документ, вырезая из него блоки <div id="widetop"> и <ul id="greymenu_wide">
Плюс потребовался небольшой скрипт:
for path in $@
do
name=`echo $path | sed -e 's/ppbook\///'`
`xsltproc --html --novalid ppbook.xsl ppbook/$name > ppbook-copy/$name`
echo $name
done
Который был вызван следующим образом:
 ./ppbook.sh ppbook/*[[:digit:]]** 
И всё отлично работает. Но полчаса времени я потерял. Вот и спрашивается, зачем людям жизнь осложнять?

1 комментарий: