Web-gui для wget (light)

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

Смотрю фильм онлайн при помощи планшета, но появляются дела и надо бы его сохранить, чтоб досмотреть позже; На удаленный сервер надо скачать файл, и приходится запускать терминал каждый раз; Надо бы скачать образ свежего linuxmint, но на домашний NAS, а не ноутбук, работая за которым пришла эта идея; Во время серфинга часто возникает задача сохранить файл и расшарить его. Если вам стало интересно — добро пожаловать под кат: 2235614b6bc0428caaad1c5d8ad98064.png Системные требования Веб-интерфейс построен на Javascript + css3 с клиентской стороны, и php (выбран как наиболее популярный) с серверной. Для полноценной работы потребуется:*nix (по крайней мере писалось именно под эту платформу, для запуска под другой потребуются рабочие порты wget, ps и kill); php5.x (скорее всего работать будет и на php4.x, по к моменту публикации это протестировано не было); Браузер с поддержкой Javascript (и очень желательно — с поддержкой css3). Особенности и настройки серверной части Как уже было сказано выше — в роли серверной части выступает скрипт, написанный на php. Он выполняет следующие задачи: Получение информации о запущенных задачах; Отмена запущенных задач; Добавление новых задач; Возвращение результатов в JSON формате. Для своей работы ему требуются ps, wget и kill соответственно. Для получения значения состояния закачки (на сколько процентов завершена) используется следующий алгоритм: Задачи wget запускаются с флагами »--background» и »--progress=bar: force»; Вывод лога загрузки производится в файл, установленный в параметре »--output-file=FILE»; При запросе состояния задач с помощью «ps -ax» получаем путь к файлу, установленный в »--output-file=FILE»; Читаем крайнюю строку этого файла, получая регуляркой из него искомое значение. Неприятная особенность — лог файлы после завершения закачки автоматически не удаляются, и делать на данный момент это приходится ручками (добавив в 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 запросы. Разницы между ними нет.

Пример POST-запроса и Json ответа: Request:192.168.1.2/wget/rpc.php? action=add_task&url=http://mirror.yandex.ru/linuxmint/stable/17/linuxmint-17-cinnamon-dvd-64bit.isoAnswer:{    status:  1,     msg:  «Task added»,     id:  10910}Request:192.168.1.2/wget/rpc.php? action=get_listAnswer:{    status:  1,     msg:  «Active tasks list»,     tasks:  [        {            url:  «mirror.yandex.ru/linuxmint/stable/17/linuxmint-17-cinnamon-dvd-64bit.iso»,             progress:  95,             id:  10910        }    ]}

Вывод «ps -ax | grep wget» и «cat /tmp/wget{RND}.log.tmp»: data:~# ps -ax | grep wget10910 ?         S11378 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.isoResolving mirror.yandex.ru… 213.180.204.183,  2a02:6b8::183Connecting to mirror.yandex.ru|213.180.204.183|:80… connected.HTTP request sent,  awaiting response… 200 OKLength:  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 35sdata:~#Особенности и настройки клиентской части Не используются «новые html5 теги», но используются свойства css3 для оформления прогресc-бара загрузок и адаптива. Дизайн выполнен в минималистичном стиле без изображений (исключением является favicon). При отсутствии задач в центре страницы располагается поле для добавления адреса закачки, если задачи имеются — это поле смещается вверх страницы, и ниже располагаются задачи.Все запросы — асинхронные (без перезагрузки страницы). Дизайн страницы — адаптивный:

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

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

4624d0f9c3494fee9987e4ba757a423b.png Весь javascript код документа расположен в файле core.js. В верхней его части располагаются основные настройки:

«updateStatusInterval = 5×1000» — интервал обновления данных на открытой вкладке (будьте аккуратны с этим параметром на слабых серверах); «DebugMode = false» — режим отладки, выводится отладочная информация в console.log; «prc = 'rpc.php'» — путь до скрипта серверной части. Описывать функциональные моменты смысла особого не вижу, но скажу — функции разделены на логические группы, скрипт не минифицирован, комментарии имеют место быть.При нажатии на F5 происходит принудительное обновление задач, страница перезагружается только по нажатию на кнопку обновления в браузере.

Установка Скачать или склонировать крайнюю версию репозитория; Распаковать в директорию, доступную «извне»; Изменить путь «define ('download_path',  BASEPATH.'/downloads');» в «rpc.php»; Открыть в браузере, проверить работоспособность. В случае возникновения ошибок — задайте вопрос. История изменений По мере изменений буду обновлять этот пост0.0.3 — Релиз на гитхабе Чего стоит ждать: Добавление авторизации и доступа по ключу; Логирование; Автоматическая (или полуавтоматическая) очистка отработанных лог-файлов; Расширение для браузера; Детальные настройки для задач, такие как путь для загрузки и имя сохраняемого файла; Удаление не докачанных задач; … Лицензия MIT Copyright © 2014 Samoylov NikolayДанная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:

Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.

ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.

Ссылка на проект: https://github.com/tarampampam/wget-gui-light

© Habrahabr.ru