Зеркалируем lib.ru (скрипт)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
Bolverk
Бывший модератор
Сообщения: 1571
ОС: Cygwin

Зеркалируем lib.ru

Сообщение Bolverk »

Мой скрипт, который я использовал для зеркалирования lib.ru. В связи с
последними событиями эта тема привлекла особый интерес. Кроме стандартных
утилит используется wget. Пишу наиболее существенную часть, кроме этого можно
навесить всего, что придумаете. Также можно добавить всякие опции wget.

Код: Выделить всё

REJECTFILES=*Piece*,What-s-new,Mirrors,*_Contents,.dir_StripDir.html,GuestBook*,Go?*

REJECTTXT=*.txt,*.jpg,*.gif,*.tex,*.c

REJECTFOLDERS=forum,HITPARAD,RUSS_DETEKTIW,\
POEZIQ,INPROZ,DETEKTIWY,KSP,ALPINISM,PARACHUTE,EMIGRATION,CINEMA,SONGS,SU,PXESY,
NEWPROZA,TALES,PRIKL,PRAWO,\
CULTURE,FILOSOF,URIKOVA,RELIGION,DIALEKTIKA,ASTROLOGY,POLITOLOG,PSIHO,NLP,DPEOPL
E,ECONOMY,KIDS,MAN,CYRILLIC,SCHOOL,\
TECHBOOKS,SENDMAIL,CISCO,SOFTWARE,PC,DESIGN,COMPULIB,AWARDS,GAMES,TXT,ETIKETKI,A
CKNOWLEDGEMENT,DOWNLOAD,HARRYFAN,\
COPYRIGHT,INDEXLESS,KARTINKI,TURIZM,SKI

OPTIONS="-r -l 0 -X $REJECTFOLDERS http://lib.ru/"

# First pass. Update indices
wget -N -R $REJECTFILES,$REJECTTXT $OPTIONS

# Second pass. New txt
wget -nc -R $REJECTFILES $OPTIONS

В принципе, Вам самим придется решать, что Вы НЕ хотите загружать. Такой подход
вызван тем, что некоторые (наиболее известные и популярные!) авторы вынесены в
корневой каталог, поэтому загрузка по выбору только некоторых каталогов (типа
RUFANT, INOFANT, например) приведет к пропуску таких каталогов.
Файлы в кодировке windows-cp1251.
Многие файлы доступны как в виде цельного текста, так и по частям. "Куски"
запрещены маской *Piece*. Некоторые ненужные типы файлов также запрещены.
Да, возможно будет иметь смысл зеркалировать не lib.ru, а какое-то из зеркал.
В планах создание более продвинутой версии, которая будет получать и сохранять
файлы в компрессированном виде.
Спасибо сказали:

Аватара пользователя
Bolverk
Бывший модератор
Сообщения: 1571
ОС: Cygwin

Re: Зеркалируем lib.ru

Сообщение Bolverk »

В процессе написания версии с компрессией. Похоже lib.ru все-таки банит слишком назойливых зеркалировальщиков, так что в опции надо добавить что-то типа -w 10 --random-wait. Удобная все-таки вещь adsl, переподнял соединение - и у тебя уже другой IP :D
Спасибо сказали:

Аватара пользователя
Bolverk
Бывший модератор
Сообщения: 1571
ОС: Cygwin

Re: Зеркалируем lib.ru

Сообщение Bolverk »

Это очень странно, но lib.ru перестал отдавать файлы в компрессированном виде
(зеркала тоже). Поэтому вот текущая рабочая версия скрипта, которая, увы,
получает текстовые файлы без компрессии.
Рекомендация к использованию: если у вас доступно зеркало lib.ru хотя бы 2-3х
летней давности, обязательно используйте его в качестве основы для обновления.
Суммарный объем lib.ru сейчас приближается к 5 гигам, в зависимости от того,
какие ветки вы будете зеркалировать, объем будет варьироваться.
Скрипт работает долго, особенно на стадии обновления индексов. Это связано с
тем, что lib.ru не любит слишком частых соединений с одного адреса, а для
проверки обновления каждого файла нужно послать отдельный запрос. На второй
стадии только несуществующие файлы запрашиваются, так что здесь процесс идет
быстрее.
Вчера я обновил зеркало несколькомесячной давности, суммарный трафик составил
порядка 150 мегов.

Код: Выделить всё

#!/bin/bash

# This variables should be adjusted according to your system and preferences

# Path where mirror will be stored
MIRRORDIR=/var/share/pub/books/libru/

# Folders which should be rejected from mirroring
REJECTFOLDERS=forum,HITPARAD,RUSS_DETEKTIW,\
POEZIQ,INPROZ,DETEKTIWY,KSP,ALPINISM,PARACHUTE,EMIGRATION,CINEMA,SONGS,SU,PXESY,
NEWPROZA,TALES,PRIKL,PRAWO,\
CULTURE,FILOSOF,URIKOVA,RELIGION,DIALEKTIKA,ASTROLOGY,POLITOLOG,PSIHO,NLP,DPEOPL
E,ECONOMY,KIDS,MAN,CYRILLIC,SCHOOL,\
TECHBOOKS,SENDMAIL,CISCO,SOFTWARE,PC,DESIGN,COMPULIB,AWARDS,GAMES,TXT,ETIKETKI,A
CKNOWLEDGEMENT,DOWNLOAD,HARRYFAN,\
COPYRIGHT,INDEXLESS,KARTINKI,TURIZM,SKI,POEEAST,koi,win,lat

# Define LOGFILE if you want a log file
TIMESTAMP=`date +"%F-%H-%M"`
LOGFILE=~/tmp/libru/libru-$TIMESTAMP.log

# Amount of output
# DEBUG="yes"

# This variables hardly should be changed

# These files are totally rejected
REJECTFILES=*Piece*,What-s-new,Mirrors,*_Contents,.dir_StripDir.html,GuestBook*,Go?*

# These files are not checked for update
REJECTTXT=*.txt,*.jpg,*.gif,*.tex,*.c,*.htm

WGETOPTIONS="-r -l 0 -w 10 --random-wait -X $REJECTFOLDERS -P $MIRRORDIR http://lib.ru/ "
[ "$LOGFILE" ] && WGETOPTIONS="-a $LOGFILE $WGETOPTIONS"
[ "$DEBUG" ] && WGETOPTIONS=" -S $WGETOPTIONS"

# First pass. Update indices
wget -N  -R $REJECTFILES,$REJECTTXT $WGETOPTIONS

# Second pass. New files
wget -nc -R $REJECTFILES $WGETOPTIONS

# Compress non-empty txt files and leave "stamp"
for FILE in `find $MIRRORDIR/lib.ru/ -iname \*.txt \! -empty`; do gzip -9 $FILE; touch $FILE; done

Да, вот еще. На всякий случай в MIRRORDIR лучше иметь каталоги lib.ru и
www.lib.ru, один из которых является симлинком на другой.
Спасибо сказали:

Аватара пользователя
Bolverk
Бывший модератор
Сообщения: 1571
ОС: Cygwin

Re: Зеркалируем lib.ru

Сообщение Bolverk »

Мдя, rtfm, однако...
http://lib.ru/DOWNLOAD/
КАК ЗАБРАТЬ КАТАЛОГ ЦЕЛИКОМ
Настойчивому посетителю, добравшемуся до этого места сообщу небольшой секрет.
Если в моей библиотеке руками приписать к имени каталога "/TarGzip.tgz" то
получите ВЕСЬ каталог в кодировке WIN, в формате TAR + GZIP
...

Полный архив библиотеки:
ftp://lib.ru/pub/moshkow/.library/liXXXXXXXX.cpz
И еженедельные апдейты: apXXXXXXXX.cpz
(cpz = cpio.gz)
Попробую написать скрипт для еженедельного обновления через эти апдейты.
Спасибо сказали: