LINUX.ORG.RU

uGet — теперь годен к применению

 , ,


4

2

На днях зарелизился uGet 1.10 stable. Оказалось, им уже можно нормально пользоваться. Пожалуй, теперь это наилучший из существующих GUI для aria2c. Поделюсь рецептом его приготовления и скриптом для автоматического выбора категорий в зависимости от типов файлов.

Что из нового меня обрадовало?

  • Доделали интеграцию с aria2c (закачка в несколько потоков, регулировка скорости и прочие вкусности aria2c теперь доступны).
  • Появилась опция --quiet для запуска закачек без вылезающего окна подтверждения.

Собственно, о приготовлении:

  • В настройках нужно указать _полный_ путь до aria2c (обычно /usr/bin/aria2c ).
  • Аргументы для запуска aria2c у меня такие:
    -x 5 -k 1M --enable-rpc=true --disable-ipv6=true --enable-dht=false --enable-dht6=false --rpc-user=USER --rpc-passwd=PASSWORD --enable-peer-exchange=false --follow-torrent=false --follow-metalink=false --user-agent='Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0'
    где x задаёт кол-во потоков, k — минимальный размер разбивки файла на части. Опцию --enable-rpc=true нужно обязательно указать, ибо uGet через RPC-сервер aria2c работает. Указываем логин и пароль в --rpc-user=USER --rpc-passwd=PASSWORD, при этом в настройках URI меняем дефолтный http://localhost:6800/rpc на http://USER:PASSWORD@localhost:6800/rpc. Рекомендую --follow-torrent=false, чтобы содержимое торрентов не качать. В остальном man aria2c.
  • В Firefox'овском FlashGot добавляем uGet или uGet-скрипт (см. ниже) с шаблоном командной строки
    [URL] --filename=[FNAME]
    , чтобы имена закачек нормально определялись.
  • На закуску ставим монохромные иконки.

О скрипте для автоматического выбора категорий в зависимости от типов файлов:

  • Создаём в uGet'е категории после «Home» именно в следующем порядке: Архивы, Документы, Видео, Музыка, Пакеты, Торренты; иначе в нижеприведённом скрипте придётся менять индексы для категорий (Home имеет индекс 0, Архивы = 1, Документы = 2, и т.д. по порядку). Указываем в настройках каждой категории каталог для закачек и прочее.
  • Код для рутрекера и порнолаба закомментирован. Для работы этого кода используется curl и локальный http-сервер. Если захочется иметь с этих трекеров торрент-файлы в uGet'е, то раскомментируйте код, не забыв сменить пути к cookies и для сервера. Скрипт для получения Firefox'овских cookies можно взять здесь.
  • Путь в скрипте для DIRDFILE меняем на свой, либо создаём такой же: mkdir -p $HOME/scripts/dfiles

uGet-скрипт:

#!/bin/bash
#uGet_category_selection  script by takiz aka dadd
URL="$1"

#Создаём временный файл с информацией о закачке
DIRDFILE="$HOME/scripts/dfiles/"
DFILE="$DIRDFILE/dfile1"
if ! [ -a "$DFILE" ]; then 
echo > $DFILE
fi
NUM=`ls -1 "$DIRDFILE" | tail -1 | egrep -o -e '[0-9]{1,20}'`; (( NUM++ ))
wget --spider "$URL" 2>&1 | tee > $DIRDFILE/dfile$NUM
OUTPUT="$DIRDFILE/dfile$NUM"

#Отсеиваем типы файлов
ARCHIVES=`egrep -e 'application\/(x.bzip2|x.gzip|x.tar|x.7z|rar|zip)' $OUTPUT`
DOCS=`egrep -e '(application|image|text)\/(pdf|msword|rtf|vnd.ms.excel|vnd.djvu|plain)' $OUTPUT`
MOVIES=`egrep -e 'video\/(x.flv|mp4|x.msvideo|x.ms.wmv|mpeg|x.matroska)' $OUTPUT`
MUSIC=`egrep -e 'audio\/(mpeg|flac)' $OUTPUT`
PACKAGES=`egrep -e 'application\/x.debian.package' $OUTPUT`
TORRENTS=`egrep -e 'application\/x.bittorrent' $OUTPUT`
OCTET=`egrep -e 'application\/octet.stream' $OUTPUT`

#Для rutracker и pornolab
#ID=`echo "$URL" | egrep -o -e '[0-9]{4,10}'`
#PORNOLAB=`echo "$URL" | egrep -o -e 'pornolab.net'`
#RUTRACKER=`echo "$URL" | egrep -o -e 'rutracker.org'`
#RUFILE="[rutracker.org].t$ID.torrent"
#POFILE="[pornolab.net].t$ID.torrent"
#RUREFERER="http://rutracker.org/forum/viewtopic.php?t=$ID"
#POREFERER="http://pornolab.net/forum/viewtopic.php?t=$ID"
#COOCKIE="$HOME/scripts/tmp/co.txt"
#AGENT="Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0"

#Раскладываем по категориям
if [ "$TORRENTS" ]; then
    uget-gtk $URL $2 --category-index=6
    rm -f $OUTPUT
#elif [ "$RUTRACKER" ]; then
#    curl --trace-ascii - -d "" --cookie "$COOCKIE" -c "$COOCKIE" -A "$AGENT" -o "/var/www/torrents/$RUFILE" -e "$RUREFERER" $URL;
#    uget-gtk "http://localhost/torrents/$RUFILE" --category-index=6; rm -f $OUTPUT; sleep 8;
#    rm -f "/var/www/torrents/$RUFILE"
#elif [ "$PORNOLAB" ]; then
#    curl --trace-ascii - -d "" --cookie "$COOCKIE" -c "$COOCKIE" -A "$AGENT" -o "/var/www/torrents/$POFILE" -e "$POREFERER" $URL;
#    uget-gtk "http://localhost/torrents/$POFILE" --category-index=6; rm -f $OUTPUT; sleep 8;
#    rm -f "/var/www/torrents/$POFILE"
elif [ "$ARCHIVES" ]; then
    uget-gtk $URL $2 --category-index=1
    rm -f $OUTPUT
elif [ "$DOCS" ]; then
    uget-gtk $URL $2 --category-index=2
    rm -f $OUTPUT
elif [ "$OCTET" ]; then
#Отсеиваем для octet
OCARCHIVES=`echo "$URL" | egrep -i -e '\.(bz2|gz|tgz|tar|rar|zip|7z)'`
OCDOCS=`echo "$URL" | egrep -i -e '\.(doc|rtf|xls|pdf|djvu|txt)'`
OCMOVIES=`echo "$URL" | egrep -i -e '\.(avi|flv|mp4|wmv|mpg|mpeg|mkv)'`
OCMUSIC=`echo "$URL" | egrep -i -e '\.(mp3|flac|ogg|ape|m4a)'`
OCPACKAGES=`echo "$URL" | egrep -i -e '\.deb'`
OCTORRENTS=`echo "$URL" | egrep -i -e '\.torrent'`
            if [ "$OCTORRENTS" ]; then
                  uget-gtk $URL $2 --category-index=6
                  rm -f $OUTPUT
            elif [ "$OCARCHIVES" ]; then
                  uget-gtk $URL $2 --category-index=1
                  rm -f $OUTPUT
            elif [ "$OCDOCS" ]; then
                  uget-gtk $URL $2 --category-index=2
                  rm -f $OUTPUT
            elif [ "$OCMOVIES" ]; then
                  uget-gtk $URL $2 --category-index=3
                  rm -f $OUTPUT
            elif [ "$OCMUSIC" ]; then
                  uget-gtk $URL $2 --category-index=4
                  rm -f $OUTPUT
            elif [ "$OCPACKAGES" ]; then
                  uget-gtk $URL $2 --category-index=5
                  rm -f $OUTPUT
            else
                  uget-gtk $URL $2 --category-index=0
                  rm -f $OUTPUT
            fi
elif [ "$PACKAGES" ]; then
        uget-gtk $URL $2 --category-index=5
        rm -f $OUTPUT
elif [ "$MOVIES" ]; then
        uget-gtk $URL $2 --category-index=3
        rm -f $OUTPUT
elif [ "$MUSIC" ]; then
        uget-gtk $URL $2 --category-index=4
        rm -f $OUTPUT
else
uget-gtk $URL $2 --category-index=0
rm -f $OUTPUT
fi

★★

Попробуйте вместо


ПЕРЕМЕННАЯ=`... | grep ...`
...
if [ «$ПЕРЕМЕННАЯ» ];


использовать
if ... | grep -q ...;


Не совсем понял, зачем нужна директория DFILES, для одновременной работы нескольких копий скрипта? Без временных файлов можно обойтись, если grep'ом отсеивать строку с Content-type, считывать в переменную и скармливать её потом grep'у.

Кроме того, странное использование tee:

... | tee > $DIRDFILE/dfile$NUM

Почему именно так?

AITap ★★★★★ ()
Ответ на: комментарий от AITap

Не совсем понял, зачем нужна директория DFILES, для одновременной работы нескольких копий скрипта? Без временных файлов можно обойтись, если grep'ом отсеивать строку с Content-type, считывать в переменную и скармливать её потом grep'у.

Так будет медленно работать. Лучше один раз вывод wget --spider поместить временный файл, чем каждый раз его запускать.

Почему именно так?

Потому что перед этим стоит 2>&1. А 2>&1| > — не годится.

dadd ★★ ()
Ответ на: комментарий от dadd

Так будет медленно работать. Лучше один раз вывод wget --spider поместить временный файл, чем каждый раз его запускать.

var=$(wget ... | grep ...)


Чем медленнее?

Почему именно так?

Потому что перед этим стоит 2>&1. А 2>&1| > — не годится.

Не понял.
Вам нужно перенаправить STDOUT + STDIN в файл? Это делается проще:

cmd >file 2>&1

AITap ★★★★★ ()
Ответ на: комментарий от AITap

Чем медленнее?

Видимо тем, что wget несколько раз запускается. Поначалу я именно так и сделал, но работало медленно.

Это делается проще: cmd >file 2>&1

Да, так тоже работает, но мне тогда сходу пришла мысль использовать

cmd 2>&1 | tee > file
Это не особо сложнее.

dadd ★★ ()
Ответ на: комментарий от dadd

Видимо тем, что wget несколько раз запускается. Поначалу я именно так и сделал, но работало медленно.

Нет, переменная один раз получает значение. Причина замедления должна быть где-то в другом месте.

cmd 2>&1 | tee > file
Это не особо сложнее.

Но на целый fork() больше. Так делать не стоит.

Ссылку на Advanced Bash Scripting Guide уже находили?

AITap ★★★★★ ()
Ответ на: комментарий от AITap

Нет, переменная один раз получает значение. Причина замедления должна быть где-то в другом месте.

Что ж, поищу причину. Если быстрее будет работать, то запощу сюда новый вариант скрипта. А пока этот довольно шустро у меня работает.

Ссылку на Advanced Bash Scripting Guide уже находили?

Почитаю.

dadd ★★ ()
Ответ на: комментарий от dadd

Новая версия скрипта, работающая без создания временных файлов:

#!/bin/bash
#uGet_category_selection  script by takiz aka dadd
URL="$1"
DINFO=$(wget --spider "$URL" 2>&1)

#Для rutracker и pornolab
#ID=`echo "$URL" | egrep -o -e '[0-9]{4,10}'`
#PORNOLAB=`echo "$URL" | egrep -o -e 'pornolab.net'`
#RUTRACKER=`echo "$URL" | egrep -o -e 'rutracker.org'`
#RUFILE="[rutracker.org].t$ID.torrent"
#POFILE="[pornolab.net].t$ID.torrent"
#RUREFERER="http://rutracker.org/forum/viewtopic.php?t=$ID"
#POREFERER="http://pornolab.net/forum/viewtopic.php?t=$ID"
#COOCKIE="$HOME/scripts/tmp/co.txt"
#AGENT="Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0"

#Раскладываем по категориям
if echo "$DINFO" | egrep -e 'application\/x.bittorrent'; then
    uget-gtk $URL $2 --category-index=6
#elif [ "$RUTRACKER" ]; then
#    curl --trace-ascii - -d "" --cookie "$COOCKIE" -c "$COOCKIE" -A "$AGENT" -o "/var/www/torrents/$RUFILE" -e "$RUREFERER" $URL;
#    uget-gtk "http://localhost/torrents/$RUFILE" --category-index=6; sleep 8;
#    rm -f "/var/www/torrents/$RUFILE"
#elif [ "$PORNOLAB" ]; then
#    curl --trace-ascii - -d "" --cookie "$COOCKIE" -c "$COOCKIE" -A "$AGENT" -o "/var/www/torrents/$POFILE" -e "$POREFERER" $URL;
#    uget-gtk "http://localhost/torrents/$POFILE" --category-index=6; sleep 8;
#    rm -f "/var/www/torrents/$POFILE"
elif echo "$DINFO" | egrep -e 'application\/(x.bzip2|x.gzip|x.tar|x.7z|rar|zip)'; then
    uget-gtk $URL $2 --category-index=1
elif echo "$DINFO" | egrep -e '(application|image|text)\/(pdf|msword|rtf|vnd.ms.excel|vnd.djvu|plain)'; then
    uget-gtk $URL $2 --category-index=2
elif echo "$DINFO" | egrep -e 'application\/octet.stream'; then
#Отсеиваем для octet
            if echo "$URL" | egrep -i -e '\.torrent'; then
                  uget-gtk $URL $2 --category-index=6
            elif echo "$URL" | egrep -i -e '\.(bz2|gz|tgz|tar|rar|zip|7z)'; then
                  uget-gtk $URL $2 --category-index=1
            elif echo "$URL" | egrep -i -e '\.(doc|rtf|xls|pdf|djvu|txt)'; then
                  uget-gtk $URL $2 --category-index=2
            elif echo "$URL" | egrep -i -e '\.(avi|flv|mp4|wmv|mpg|mpeg|mkv)'; then
                  uget-gtk $URL $2 --category-index=3
            elif echo "$URL" | egrep -i -e '\.(mp3|flac|ogg|ape|m4a)'; then
                  uget-gtk $URL $2 --category-index=4
            elif echo "$URL" | egrep -i -e '\.deb'; then
                  uget-gtk $URL $2 --category-index=5
            else
                  uget-gtk $URL $2 --category-index=0
            fi
elif echo "$DINFO" | egrep -e 'application\/x.debian.package'; then
        uget-gtk $URL $2 --category-index=5
elif echo "$DINFO" | egrep -e 'video\/(x.flv|mp4|x.msvideo|x.ms.wmv|mpeg|x.matroska)'; then
        uget-gtk $URL $2 --category-index=3
elif echo "$DINFO" | egrep -e 'audio\/(mpeg|flac)'; then
        uget-gtk $URL $2 --category-index=4
else
uget-gtk $URL $2 --category-index=0
fi

dadd ★★ ()

О! Спасибо. Пользовался им, когда он только 1.0 отрелизил, а потом забыл.

devl547 ★★★★★ ()
Ответ на: комментарий от dadd

echo "$DINFO" | egrep -e

Хотелость бы вставить и свои пять копеек, пардон. Вместо:

echo "$DINFO" | egrep -e ...
можно использовать:
grep -E ... <<< $DINFO # 'egrep' is deprecated.
А так да, зачёт. За скрипт спасибо.

anonymous ()

Что за дивные штуки такие, какая-то школоскриптота для масс-кача? Кому нах нужно?..

anonymous ()

Здравствуйте!

Сделал как вы написали, aria2 плагин установлен, добавил в настройки uGet->Edit->Settings->Plug-in->Argument: -x 5 -k 1M --enable-rpc=true -D --check-certificate=false Плагин aria2 само собой включил.

И все равно закачка идет в один поток. Еще вопрос, что за опция «Connection per server» где можно выставлять произвольное число, перевод-то понятен, «соединение с сервером», вот только это можно понять по-разному, например число попыток установить соединение или как количество запросов соединения к серверу для многопоточной закачки...

Вот скрин.

И еще, в строке закачки uGet будут ли отображаться части, на которые разбивается файл, как например в Download Master, или по-прежнему строка будет просто ползти слева направо? Если так, то тогда как понять, что многопоточная закачка работает?

CoolAller ()
Ответ на: комментарий от RedEyedMan4

Так есть же Kget.

Он kde'шный и тянет кучу kde библиотек и ненужных пакетов, нет смысла ставить все это великолепие ради простого менеджера закачек. И насколько я помню, раньше Kget был не многопоточный.

CoolAller ()
Ответ на: Так есть же Kget. от CoolAller

так axel многопоточный же по-умолчанию, uget в него не может?

science ★★☆ ()
Ответ на: комментарий от CoolAller

Еще вопрос, что за опция «Connection per server»

Это как раз регулирует кол-во потоков. Активно только при включенном aria2-плагине (поэтому опцию -x 5 теперь указывать не нужно).

И еще, в строке закачки uGet будут ли отображаться части, на которые разбивается файл, как например в Download Master, или по-прежнему строка будет просто ползти слева направо?

Прогресс загрузки для каждой части не показывается, только общий.

Если так, то тогда как понять, что многопоточная закачка работает?

Например, с помощью iptraf посмотреть.

dadd ★★ ()
Ответ на: комментарий от dadd

Например, с помощью iptraf посмотреть.

Спасибо за ответ и за разъяснение. Но вот бы еще знать как этой архаичной софтиной iptraf пользоваться. Там же явно приложения не указываются, которые траффик потребляют, там скопом выводится список всех соединений без указания на название приложений...

CoolAller ()
Ответ на: комментарий от dadd

В общем я так и не разобрался как добиться приемлемой информативности от iptraf, но то, что многопоточность действительно работает увидеть можно. Аргументы в настройки Aria2 добавлять действительно не обязательно, тоже подтверждаю.

Может кто-то посоветовать анализатор траффика с указанием названий приложений и демонов? Или iptraf тоже можно как-то заставить это выводить?

CoolAller ()
Ответ на: Например, с помощью iptraf посмотреть. от CoolAller

Re: Например, с помощью iptraf посмотреть.

Без названия можно обойтись, зная айпишник сервера, с которого идет загрузка.
А если нужно именно название, то:

sudo netstat -top | grep aria2c

dadd ★★ ()

если нужно именно название

Вы меня не совсем правильно поняли. Нужны именно названия программ ожидающих или осуществивших подключение и ведущих обмен трафиком с указанием адресов серверов. А указанной выше командой можно просмотреть обмен траффиком только если мы знаем программу, которая его осуществляет. А вот если мы допустим не знаем какая именно программа потребляет траффик. Я просто хотел спросить есть ли для этих целей, более продвинутая тулза по сравнению с iptraf, которая в режиме реального времени позволяет получать эти данные.

CoolAller ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.