- PVSM.RU - https://www.pvsm.ru -
Ранее здесь находилось описание возможных ситуаций, когда данное решение могло бы вам понадобиться, но давайте его опустим. Возможность удобного создания удаленных закачек, которые выполняются привычным wget-ом (можно спокойно увидеть их список при помощи ps), с отображением прогресса — идея не новая. И даже есть некоторые [1] решения [2], но не актуальные, так как более 5 лет никем не поддерживаются.
Для торрентов всё просто и тривиально — ставим Transmission или любой аналогичный клиент с веб-мордой. Но для ссылок на простые файлы/страницы нужно что то своё. Вот короткий список задач, которые меня подтолкнули к написанию оного:
Если вам стало интересно — добро пожаловать под кат:

Веб-интерфейс построен на Javascript + css3 с клиентской стороны, и php (выбран как наиболее популярный) с серверной. Для полноценной работы потребуется:
Как уже было сказано выше — в роли серверной части выступает скрипт, написанный на php. Он выполняет следующие задачи:
Для своей работы ему требуются ps, wget и kill соответственно. Для получения значения состояния закачки (на сколько процентов завершена) используется следующий алгоритм:
Неприятная особенность — лог файлы после завершения закачки автоматически не удаляются, и делать на данный момент это приходится ручками (добавив в crontab что то похожее на "rm -f /tmp/wget*.log.tmp").
Данную возможность можно отключить (не будут создаваться лог-файлы, но и не будет информации о прогрессе), закомментировав строку "define('tmp_path', '/tmp');";
Путь до директории, в которую будет происходить сохранение всех загружаемых файлов устанавливается в строке "define('download_path', BASEPATH.'/downloads');".
Доступно удобное указание путей до ps, wget и kill. Для этого достаточно убрать комментарий вначале строки и указать свой путь, например: "define('wget', '/usr/bin/wget');".
Возможна установка ограничения на скорость закачки из секции настроек. За это отвечает строка "define('wget_download_limit', '1024');". Если оставить её закомментированной — никакого ограничения не будет.
Для определения в списке задачи запущенной через GUI от любой другой используется определенный флаг, уникальный для GUI. Он установлен в строке "define('wget_secret_flag', '--max-redirect=4321');" и его менять без необходимости не надо. Кстати, если хотите чтоб другие ваши задачи, запущенные из терминала отображались в веб-интерыейсе — достаточно как раз этот параметр к ним и добавить. Но не забывайте, что есть ещё и некоторые другие параметры, не менее обязательные (в зависимости от настроек).
Постарался написать с максимально экономичным отношением к ресурсам и минимальной зависимостью от системы, но большим опытом в php не обладаю, поэтому — буду признателен рекомендациям по оптимизации.
Скрипт отвечает как на POST, так и GET запросы. Разницы между ними нет.
Request:
192.168.1.2/wget/rpc.php?action=add_task&url=http://mirror.yandex.ru/linuxmint/stable/17/linuxmint-17-cinnamon-dvd-64bit.iso
Answer:
{
status: 1,
msg: "Task added",
id: 10910
}
Request:
192.168.1.2/wget/rpc.php?action=get_list
Answer:
{
status: 1,
msg: "Active tasks list",
tasks: [
{
url: "mirror.yandex.ru/linuxmint/stable/17/linuxmint-17-cinnamon-dvd-64bit.iso" [4],
progress: 95,
id: 10910
}
]
}
data:~# ps -ax | grep wget
10910 ? S<s 0:34 wget --progress=bar:force --background --tries=0 --no-cache --user-agent=Mozilla/5.0 (X11; Linux amd64; rv:21.0) Gecko/20100101 Firefox/21.0 --directory-prefix=/DataVolume/shares/Public/Downloads/ --limit-rate=2048k --output-file=/tmp/wget9720.log.tmp --max-redirect=4321 http://mirror.yandex.ru/linuxmint/stable/17/linuxmint-17-cinnamon-dvd-64bit.iso
11378 pts/0 S+ 0:00 grep wget
data:~# cat /tmp/wget9720.log.tmp
--2014-08-24 12:32:04-- http://mirror.yandex.ru/linuxmint/stable/17/linuxmint-17-cinnamon-dvd-64bit.iso
Resolving mirror.yandex.ru... 213.180.204.183, 2a02:6b8::183
Connecting to mirror.yandex.ru|213.180.204.183|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1286799360 (1.2G) [application/octet-stream]
Saving to: `/DataVolume/shares/Public/Downloads/linuxmint-17-cinnamon-dvd-64bit.iso`
95% [==================================> ] 1,225,527,078 1.37M/s eta 35s
data:~#
Не используются «новые html5 теги», но используются свойства css3 для оформления прогресc-бара загрузок и адаптива. Дизайн выполнен в минималистичном стиле без изображений (исключением является favicon). При отсутствии задач в центре страницы располагается поле для добавления адреса закачки, если задачи имеются — это поле смещается вверх страницы, и ниже располагаются задачи.
Все запросы — асинхронные (без перезагрузки страницы). Дизайн страницы — адаптивный:

Изменение состояния отображается также в заголовке вкладки (окна):

В нижней части страницы располагается javascript-закладка («Download this»), переместив которую в панель закладок браузера можно одним кликом добавлять новые задачи (при клике будет добавлена активная вкладка; если открыта вкладка с видеофайлом и будет нажата эта «закладка» на панели закладок — будет добавлена задача на скачивание этого видеофайла):

Весь javascript код документа расположен в файле core.js. В верхней его части располагаются основные настройки:
Описывать функциональные моменты смысла особого не вижу, но скажу — функции разделены на логические группы, скрипт не минифицирован, комментарии имеют место быть.
При нажатии на F5 происходит принудительное обновление задач, страница перезагружается только по нажатию на кнопку обновления в браузере.
По мере изменений буду обновлять этот пост
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
Ссылка на проект: https://github.com/tarampampam/wget-gui-light [6]
Автор: cmepthuk
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/gui-2/68183
Ссылки в тексте:
[1] некоторые: http://exir.ru/wget4web/screen.htm
[2] решения: http://sourceforge.net/projects/download-webgui/files/?source=navbar
[3] ,: http://blog.kplus.pro/
[4] mirror.yandex.ru/linuxmint/stable/17/linuxmint-17-cinnamon-dvd-64bit.iso": http://mirror.yandex.ru/linuxmint/stable/17/linuxmint-17-cinnamon-dvd-64bit.iso"
[5] задайте вопрос: https://github.com/tarampampam/wget-gui-light/issues/new
[6] https://github.com/tarampampam/wget-gui-light: https://github.com/tarampampam/wget-gui-light
[7] Источник: http://habrahabr.ru/post/234353/
Нажмите здесь для печати.