Как то вечером, ожидая загрузку любимых LOST и Breaking Bad, захотелось прогуляться по теплому вечернему Минску в сторону парка Горького. Но вот незадача, примерное время скачивания торрента прыгает то вверх, то вниз, объективный прогноз дождаться явно не получится.
Тут и пришла в голову, на мой взгляд, неплохая идея — почему бы не сделать уведомление о скачавшемся торренте по смске? Можно тогда вообще не заморачиваться томительным ожиданием и делать свои дела. :)
Вот что из этого получилось...
Так как я пользуюсь торрент-клиентом uTorrent, в моем распоряжении оказался Web API, через который можно получать информацию и управлять всеми параметрами клиента. Важно поставить галку Использовать Web-интерфейс и вторую галку для разрешения гостевого доступа.
Web API выдает все в формате json, так что проблем с разбором словаря практически не возникло. Меня интересовали торренты, которые, разумеется, еще не закачаны. Из всего, что передается — берем оставшееся время или процент выполнения (кому как нравится), проверяем его периодически, довольно просто:
Далее парсим, что выдает торрент:
Что в реальности выглядит как:
Ладно, список торрентов получили, надо теперь еще сделать отправку смски. Взял для этого готовую библиотеку AvisoSMS, к слову сказать, довольно просто ее оказалось прикрутить, не ожидал. Ссылка на DLL
Тестим на чем-нибудь легковесном…
Ура-ура.
Позже решил доработать программу, чтобы она могла прятаться в трей, иметь достойное GUI, работать на отслеживание не только одного торрента. Вывел в отдельный поток проверку. Правда не смог победить кракозябры кириллических названий загрузок. Видимо сказывается WebUI самого торрент-клиента.
Результируя: Удивила хитрая система маркеров для безопасности, но, надо сказать, по делу. Авторизация — стандартная… 401, так что проблем не возникло ни с API торрента, ни с смсками. Написано в CodeGear Rad Studio 2007. Интерфейс, конечно, не ахти, но для первого раза сойдет. Готов развивать программу совместно со всеми желающими, исходники и работающая версия ниже.
Исходники: Скачать с Яндекс.Диска
Работающая версия в XP/Vista/7: Скачать с Яндекс.Диска
P.S. Буду признателен за инвайт автору статьи и этой программы — Олегу Танасюку. Написана специально для хабра.
Тут и пришла в голову, на мой взгляд, неплохая идея — почему бы не сделать уведомление о скачавшемся торренте по смске? Можно тогда вообще не заморачиваться томительным ожиданием и делать свои дела. :)
Вот что из этого получилось...
Так как я пользуюсь торрент-клиентом uTorrent, в моем распоряжении оказался Web API, через который можно получать информацию и управлять всеми параметрами клиента. Важно поставить галку Использовать Web-интерфейс и вторую галку для разрешения гостевого доступа.
Web API выдает все в формате json, так что проблем с разбором словаря практически не возникло. Меня интересовали торренты, которые, разумеется, еще не закачаны. Из всего, что передается — берем оставшееся время или процент выполнения (кому как нравится), проверяем его периодически, довольно просто:
ss := TStringStream.Create('');
idhttp1.get('http://localhost:' + port +'/gui/token.html', ss);
token := ss.DataString;
token := copy(token, pos(';''>', token) + 3, length(token));
token := copy(token, 1, pos('<', token) - 1);
url := 'http://localhost:' + port + '/gui/?token=' + token +
'&list=1';
idhttp1.Get(url, ss);
* This source code was highlighted with Source Code Highlighter.
Далее парсим, что выдает торрент:
"torrents": [
[
ХЭШ (строка),
STATUS* (целое число),
ИМЯ (строка),
РАЗМЕР (целое число в байтах),
ПРОЦЕНТ ВЫПОЛНЕНИЯ (целое число на тысячу),
ЗАГРУЖЕНО (целое число в байтах),
РОЗДАНО (целое число в байтах),
...и так далее, смотрите лучше документацию, тут только кусочек.
Что в реальности выглядит как:
{"build":19648,"label": ['#$A']'#$A',"torrents": ['#$A#$A'["08FAC4E006CBEB094D637849EC89023778BE7B55",201,"Patch",19257463,0,0,0,0,0,0,-1,"",0,11,0,0,0,1,19257463]]'#$A',"torrentc": "1014060939"}'#$A
Ладно, список торрентов получили, надо теперь еще сделать отправку смски. Взял для этого готовую библиотеку AvisoSMS, к слову сказать, довольно просто ее оказалось прикрутить, не ожидал. Ссылка на DLL
login := Edit1.Text;
pass := Edit2.Text;
sAdress := Edit3.Text;
dAdress := Edit4.Text;
if (dAdress = '') then
dAdress := 'AvisoSMS';
SendMessage(Pchar(login), PChar(pass), PChar(dAdress), PChar(sAdress), PChar('Торрент ' + torName + ' закачан'));
* This source code was highlighted with Source Code Highlighter.
Тестим на чем-нибудь легковесном…
Ура-ура.
Позже решил доработать программу, чтобы она могла прятаться в трей, иметь достойное GUI, работать на отслеживание не только одного торрента. Вывел в отдельный поток проверку. Правда не смог победить кракозябры кириллических названий загрузок. Видимо сказывается WebUI самого торрент-клиента.
Результируя: Удивила хитрая система маркеров для безопасности, но, надо сказать, по делу. Авторизация — стандартная… 401, так что проблем не возникло ни с API торрента, ни с смсками. Написано в CodeGear Rad Studio 2007. Интерфейс, конечно, не ахти, но для первого раза сойдет. Готов развивать программу совместно со всеми желающими, исходники и работающая версия ниже.
Исходники: Скачать с Яндекс.Диска
Работающая версия в XP/Vista/7: Скачать с Яндекс.Диска
P.S. Буду признателен за инвайт автору статьи и этой программы — Олегу Танасюку. Написана специально для хабра.