Коллеги, хочу обратить ваше внимание на проект pyLoad, который может быть заинтересует пользователей Download Engine или ADOS в качестве альтернативы. В русскоязычной ветке форума pyLoad вовсе не упоминается, однако в дойч-ветке обсуждение растянулось на 18 страниц. Основные преимущества этого менеджера закачек:
- низкое потребление ресурсов. Субъективно несколько тяжелее DE, но куда легче ADOS'а. При скачивании на скорости 20МБит/c загрузка CPU ~50%. В режиме ожидания загрузка CPU ~1,5%
- поддерживает крупнейшие файлохостинги, причём умеет распознавать капчи и подставлять премиум логины при необходимости,
- сам обновляет себя и свои плагины (automagically ;-) и достаточно динамично развивается,
- не нуждается в установке отдельного web-сервера, хотя спокойно интегрируется с имеющимися,
- имеет русифицированный WEB-интерфейс, перевод на русский язык осуществляли VicSer и я, если найдёте какие-то ляпы перевода - скажите.
- полностью написан на питоне, если приглядеться, прогресс-бары на скриншоте ползут в реальном времени
1. Установка:
Пакет доступен в репозитории Entware. Установите его:
2. Конфигурирование:Code:$ opkg install pyload
Будут заданы ряд вопросов по желаемой конфигурации. Все ответы очевидны, но если вконец запутаетесь, в приложении смотрите пример. В дальнейшем любые параметры конфигурации можно будет менять в web-интерфейсе.Code:$ /opt/bin/python /opt/share/python/pyload/pyLoadCore.py --configdir=/opt/etc/pyload
Для того, чтобы pyLoad стартовал сам при перезагрузки роутера необходимо создать скрипт /opt/etc/init.d/S80pyLoad следующего содержания:
и сделать этот скрипт исполняемым:Code:#!/bin/sh PATH=/opt/usr/sbin:/opt/sbin:/opt/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin start() { echo "starting pyLoad" /opt/bin/python /opt/share/python/pyload/pyLoadCore.py --configdir=/opt/etc/pyload --daemon } stop() { echo "stopping pyLoad" /opt/bin/python /opt/share/python/pyload/pyLoadCore.py --configdir=/opt/etc/pyload --quit } status() { echo "pyLoad PID is..." /opt/bin/python /opt/share/python/pyload/pyLoadCore.py --configdir=/opt/etc/pyload --status } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 5 start ;; status) status ;; *) echo "Usage: $0 (start|stop|restart|status)" exit 1 ;; esac exit 0
3. Использование: наберите в браузере 192.168.1.1:8000, где 192.168.1.1 - ip-адрес роутера.Code:$ chmod +x /opt/etc/init.d/S80pyLoad
Last edited by ryzhov_al; 30-03-2012 at 21:15. Reason: Пакет добавлен в новый репозиторий
а про порт то никто и не вспомнилCode:iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
качалка хорошая, взял на вооружение
WNR3500L + 1.9.2.7-rtn
Не помогло. Впрочем, хотелось бы перенести веб-интерфейс на существующий веб-сервер.
VicSer, вижу твою активность по локализации интерфейса pyLoad. Здорово.
1. WL500gp v1 (1.9.2.7-10) -> RT-N16 (1.9.2.7-rtn-r3849) -> RT-AC66U (3.0.0.4.374.4422)
2. RT-N16 (1.9.2.7-rtn-r3893) -> RT-AC66U (3.0.0.4.374.979) -> RT-AC68U (3.0.0.4.374.4422) + WD TV Live Hub/Gen3
3. RT-N15U (1.9.2.7-rtn-r3926) + RT-N12C1 (7.1.1.1.32)
Будем надеятся, что со временем ZyXEL все выложит. Пока нужного на ftp://opensource.zyxel.com/ нет. Есть для других роутеров на Ralink RT305x. Для NBG-417N и NBG4115. Старший кинетик, который на руках, это скорее NBG4215.
Локализация интерфейса закончена. При желании прошу пробежаться по переводу воизбежании появления явных ляпов перед коммитом в дистрибутив.
Ну так, а когда russian webgui появится, а то сейчас на каком-то понятно, но явно не родном, наверное англицком
И еще, есть де нить описалово как плагины (hosters) делать?
Решил попробовать поставить pyLoad на другое устройство WD My Book World II похожее системой на wl500w и так же пакеты Optware устанавливаются в папку /opt . Установка командой "ipkg install файл" не получилась... Распаковал вручную, там оказалось, что установка скачивает необходимые файлы с сайта http://get.pyload.org/get/src/ в папку /opt/share - в общем сделал все так же. Запустил /opt/etc/init.d/S90pyload start - запустилось.
Набираю python /opt/share/pyload/pyLoadCore.py -s
Ответ:До этого не удалось установить tesseract-ocr , в этом дело?python: can't load library 'libpython2.5.so.1.0'
как понял, пока никак. выйдет с новым билдом.
Вот накидал плаг для Letitbit(без преум-аккаунта!)
Сохранить как Letitbit.py
Кинуть в /opt/share/pyload/module/plugins/hoster
Рестартануть pyLoad:
Сам плаг:Code:$ /opt/etc/init.d/S90pyload stop $ /opt/etc/init.d/S90pyload start
PHP Code:
# -*- coding: utf-8 -*-
import re
from module.utils import parseFileSize
from module.plugins.Hoster import Hoster
class Letitbit (Hoster):
__name__ = "Letitbit"
__type__ = "hoster"
__pattern__ = r"http://letitbit.net/*"
__version__ = "0.1"
__description__ = """LetItbit.Net Download Hoster"""
__author_name__ = ("voidshah")
__author_mail__ = ("none")
def setup(self):
self.resumeDownload = True
self.html = None
self.wantReconnect = False
self.multiDL = False
def process(self, pyfile):
self.html = self.load(pyfile.url, cookies=True)
self.log.info(pyfile.url)
if "File Not Found" in self.html:
self.offline()
pyfile.name = re.search('<form method=\"post\"\s+action=\"/download.php\?uid=.+?&name=(.+?)&page',self.html).group(1)
self.log.info(pyfile.name)
url1 = re.search('<form id=\"ifree_form\"\s+action=\"(.+?)\"\s+method=\"post\">',self.html).group(1)
url1 = 'http://letitbit.net'+url1
ouid5 = re.search('<input type=\"hidden\" name=\"uid5\" value=\"(.+?)\" />',self.html).group(1)
ouid = re.search('<input type=\"hidden\" name=\"uid\" value=\"(.+?)\" />',self.html).group(1)
oname = re.search('<input type=\"hidden\" name=\"name\" value=\"(.+?)\" />',self.html).group(1)
opin = re.search('<input type=\"hidden\" name=\"pin\" value=\"(.+?)\" />',self.html).group(1)
orealuid = re.search('<input type=\"hidden\" name=\"realuid\" value=\"(.+?)\" />',self.html).group(1)
orealname = re.search('<input type=\"hidden\" name=\"realname\" value=\"(.+?)\" />',self.html).group(1)
ohost = re.search('<input type=\"hidden\" name=\"host\" value=\"(.+?)\" />',self.html).group(1)
ossserver = re.search('<input type=\"hidden\" name=\"ssserver\" value=\"(.+?)\" />',self.html).group(1)
osssize = re.search('<input type=\"hidden\" name=\"sssize\" value=\"(.+?)\" />',self.html).group(1)
odir = re.search('<input type=\"hidden\" name=\"dir\" value=\"(.+?)\" />',self.html).group(1)
ooptiondir = re.search('<input type=\"hidden\" name=\"optiondir\" value=\"(.+?)\" />',self.html).group(1)
olsarrserverra = re.search('<input type=\"hidden\" name=\"lsarrserverra\" value=\"(.+?)\" />',self.html).group(1)
omd5crypt = re.search('<input type=\"hidden\" name=\"md5crypt\" value=\"(.+?)\" />',self.html).group(1)
orealuid_free = re.search('<input type=\"hidden\" name=\"realuid_free\" value=\"(.+?)\" />',self.html).group(1)
osubmit_way_selection2 = re.search('<input style=\"width:100%; text-align:center\" value=\"(.+?)\" title=\".+?\" type=\"submit\" name=\"submit_way_selection2\" />',self.html).group(1)
pyfile.size = parseFileSize(osssize)
self.html = None
postv={"uid5" : ouid5, "uid" : ouid, "name" : oname, "pin" : opin,
"realuid" : orealuid, "realname" : orealname, "host" : ohost,
"ssserver" : ossserver, "sssize" : osssize, "dir" : odir,
"optiondir" : ooptiondir, "lsarrserverra" : olsarrserverra,
"md5crypt" : omd5crypt, "realuid_free" : orealuid_free,
"submit_way_selection2": osubmit_way_selection2}
self.html = self.load(url1, post=postv , cookies=True)#utf8=True
url2 = re.search(r'<form action="(.+?)" method="post".+?">',self.html).group(1)
ouid = re.search('<input type=\"hidden\" name=\"uid\" value=\"(.+?)\" />',self.html).group(1)
opin = re.search('<input type=\"hidden\" name=\"pin\" value=\"(.+?)\" />',self.html).group(1)
omd5crypt = re.search('<input type=\"hidden\" name=\"md5crypt\" value=\"(.+?)\" />',self.html).group(1)
self.html = self.load(url2,post={"pin" : opin, "md5crypt" : omd5crypt,"uid" : ouid}, cookies=True)
needwait =re.search(r'<div id="stopwatch" class="label">',self.html)
if needwait:
wt = re.search(r'<br/><span id="seconds" style="font-size:18px">(.+?)</span> seconds', self.html).group(1)
self.log.info("wait="+wt)
wait_time = int(wt)+2
self.setWait(wait_time)
self.wait()
url3 = re.search(r'http://(.+?)/.+?',url2).group(1)
ajax = re.search(r'http://.+?/(.*)',url2).group(1)
url3 = "http://"+url3+"/ajax/"+ajax
self.html = self.load(url3, post={"":""}, ref=True, cookies=True)
link = self.html
self.log.info("link="+link)
self.download(link)
#