Введение

Очень часто пользователи просят установить ДубльГИС (не сочтите за рекламу) справочник, особенно если пользователь ездит в командировки, общается с людьми из других городов.
И как у любого системного администратора у меня возникла идея автоматически и централизованно обновлять ДубльГИС для всех городов.
По ряду причин решено было сделать это средствами Linux.
Одной из причин являлось отсутствия решения для централизованного обновления под данную операционную систему.
Еще одной — отсутствие файла на сайте со всеми базами и оболочкой в одном архиве для пользователей Linux.
В данной статье я расскажу как можно обновить ДубльГИС для всех городов, консольными средствами Linux.
Что понадобится?
- Linux сервер (у меня работает под Fedora 15)
- wget
- sed,grep
- unzip
- Ваш любимый текстовый редактор
Пишем скрипт
Вот какой скрипт получился у меня.
Качаем Web страницу со ссылками на города.
wget --no-proxy --html-extension -P/root/2gis 'http://www.2gis.ru/how-get/linux/'
Выдираем из всех html файлов, что скачались, все строки со ссылками, сортируем, удаляем дубликаты и записываем их во временный файл index.tmp.
cat /root/2gis/*.html | grep http:\/\/ |sort |uniq >/root/2gis/index.tmp
Удаляем web-страницу — она больше не нужна.
rm -f /root/2gis/*.html
Этой жуткой командой мы обработали Index.tmp на предмет вытаскивания всех ссылок со строкой how-get и сразу закачали web-страницы по этим ссылкам.
cat /root/2gis/index.tmp | grep -o [\'\"\ ]*http:\/\/[^\"\'\ \>]*[\'\"\ \>] | sed s/[\"\'\ \>]//g | grep how-get | xargs wget --no-proxy -r -p -np -l1 -P/root/2gis --tries=10 --html-extension --no-directories --span-hosts --dot-style=mega
Удалили index.tmp — только мешается.
rm -f /root/2gis/index.tmp
Склеили все файлы с расширением html в один index2.tmp.
cat /root/2gis/*.html >/root/2gis/index2.tmp
Удаляем скаченные Web-страницы.
rm -f /root/2gis/*.html
Теперь самое интересное — нужно выдернуть ссылки на обновления и скачать файлы по ним.
Обрабатываем index2.tmp на предмет ссылок со строкой "/last/linux/", сортируем, удаляем дубликаты и сразу качаем в папку 2gis.arch только новые файлы
cat /root/2gis/index2.tmp | grep -o [\'\"\ ]*http:\/\/[^\"\'\ \>]*[\'\"\ \>] | sed s/[\"\'\ \>]//g | grep "/last/linux/" | sort | uniq | xargs wget --no-proxy -nc -P/root/2gis.arch --tries=3 --html-extension --no-directories --span-hosts --dot-style=mega
Удаляем все временные файлы.
rm -fr /root/2gis/index*
Распаковываем из папки с архивами все zip файлы в нашу целевую папку /root/2gis/
unzip -o /root/2gis.arch/\*.zip -d /root/2gis/
Удаляем архивы старше 20 дней, чтобы не было дубликатов
find /root/2gis.arch/ -name * -mtime +20 |xargs rm -fr
Теперь в папке /root/2gis лежит распакованный ДубльГИС для всех городов, а в папке /root/2gis.arch архивы для пользователей Linux, скачанные с сайта.
Ставим скрипт на выполнение по cron'у.
Я поставил на каждый день, скрипт не скачает лишних файлов.
Заключение
Структура сайта ДубльГИС постоянно меняется, не исключено, что скрипт может не скачать обновления. Рекомендую периодически это контроллировать.
UPDATED 31.12.2011
Отредактировал скрипт. Убрал все лишнее.
Новый вариант.
wget -O - 'http://www.2gis.ru/how-get/linux/' 2>/dev/null | sed "s/^.*\(http:\/\/[^\"\'\ ]*\/how-get\/linux\/\).*$/\1/g" |\
grep "how-get\/linux"|sort|uniq|xargs wget -p -O - 2>/dev/null |sed "s/^.*\(http:\/\/[^\"\'\ ]*\/last\/linux\/\).*$/\1/g"|grep "last\/linux"| sort|uniq|\
xargs wget -N -P/root/2gis.arch
unzip -o /root/2gis.arch/\*.zip -d /root/2gis/
PS Спасибо kriomant за конструктивную критику.
Всех с новым годом!