INT 21h

Как быстренько состряпать автоматическую зеркалилку ПО

№ 8262 В разделе "Администрирование" от January 20th, 2017,

Понадобится python3, urllib3, bash, aria2c (потому, что может в несколько потоков качать) и curl.

Сначала нужно научиться получать список файлов для скачивания. Это не сложно. Я просто получил файл по урлу, выделил из него все ссылки и взял только те, что ссылаются в нужное место. Ничего сложного.

from html.parser import HTMLParser
import urllib3
links = []
http = urllib3.PoolManager()
pagedata = http.request('GET', 'http://dbeaver.jkiss.org/download/')

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag != 'a':
            return
        attr = dict(attrs)
        links.append(attr)

parser = MyHTMLParser()
parser.feed(str(pagedata.data))

for link in links:
    if ('href' in link):
        if ('/files/dbeaver-ce' in link['href']):
            print('http://dbeaver.jkiss.org'+link['href'])

Скрипт выведет список ссылок на файлы типа

# python3 mm_dbeaver.py 
http://dbeaver.jkiss.org/files/dbeaver-ce-latest-x86-setup.exe
...

Дальше еще проще! Пишем скрипт на bash, который получит страницу с ссылками и сравнит с тем, что было скачано ранее. Если появились изменения, то нужно удалить старые файлы (если требуется), получить список новых файлов и скачать их все. А в конце старый файл страницы заменяем новым.

#!/bin/bash

cd "$(dirname "$0")"

outdir="/mnt/office/distr/DBMS and Tools/DBEAVER"
touch page.last

curl -s http://dbeaver.jkiss.org/download/ > page.current

md5last=$(md5sum page.last|awk '{print $1}')
md5current=$(md5sum page.current|awk '{print $1}')

echo $md5last $md5current

if [ "$md5current" == "$md5last" ];
then
    echo "Equal"
else
    echo "Not equal. Update needed."
    echo "Cleaning $outdir/*"
    rm -rf "$outdir"
    for i in $(python3 ./mm_dbeaver.py) ; do
        aria2c -d "$outdir" "$i"
    done
    cp page.current page.last
fi

Собственно все. Кладете симлинк в /etc/cron.daily и забываете.

Нет комментариев »

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Комментарии

  • 21h: нене ) без меня )
  • Серегй: Не совсем грабить)) если грабить можно и без рации, есть...
  • 21h: магазин грабить собрались? ) не, тут я не помощник ;)
  • Серегй: А что бы мне поймать чужую волну, что мне для этого нужно...
  • 21h: слушать никто не запрещает. нет закона, который запрещает...
  • Серегй: Я хотел узнать могу ли я просто прийти с данной рацией baofeng...
  • 21h: У меня есть только эти 2. По другим ничего не знаю. В интернете...

© Vladimir Smagin, 2005-2017. Копирование материалов без разрешения запрещено.
Яндекс.Метрика