Как стать автором
Обновить

Обновление ДубльГИС консольными средствами Linux

Время на прочтение 3 мин
Количество просмотров 3.6K

Введение


image
Очень часто пользователи просят установить ДубльГИС (не сочтите за рекламу) справочник, особенно если пользователь ездит в командировки, общается с людьми из других городов.

И как у любого системного администратора у меня возникла идея автоматически и централизованно обновлять ДубльГИС для всех городов.

По ряду причин решено было сделать это средствами 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 за конструктивную критику.
Всех с новым годом!
Теги:
Хабы:
-2
Комментарии 10
Комментарии Комментарии 10

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн