PDA

Bekijk de volledige versie : Transmission RSS direct-download



andyqp
10-02-2008, 22:15
Хотел бы поделиться скриптом, который следит за новостями в direct-download RSS ленте трэккера и автоматически закачивает интересующие .torrent файлы в указанную папку для последующей обработки, например, transmission'ом.
Это мой ~первый shell-script, и пост этот с целю получить поучительные комментарии ;)
Идея такая: берем stdout от rsstail, пропускаем через grep'ы и закачиваем понравившиеся wget'ом.


Примечание: Из ленты, на которую подписан я, при параметрах "rsstail -N -l" в stdout для каждого torrenta выдаются 2 стоки:
<Torrent1 title>
<Torrent1 link>
<Torrent2 title>
<Torrent2 link>
...

Вызов:

rsstail -N -l -u http://tracker.dom/rssdl.php | /opt/etc/direct-downloader/direct-downloader.sh


#!/bin/sh
#
# direct-downloader.sh
#
Apply_Watchlist()
{
# line by line thru watchlist
watchlist_lengh=`wc -l "$watchlist" | cut -c1-8`
watchlist_length=`expr $watchlist_lengh + 0`
i=1
while [ "$i" -le "$watchlist_length" ]
do
matcher=`head -n $i "$watchlist" | tail -n -1`
cmd="echo \"${torrentName}\" | ${matcher}"
matched=`eval $cmd`
[ -n "$matched" ] && return
i=`expr $i + 1`
done
echo Not interested in $torrentName >> $logfile
torrentName=""
}

Exclude_Taken()
{
found=`grep "${torrentName}" $taken`
if [ -n "$found" ]; then
torrentName=""
fi
}


######
taken="/opt/etc/direct-downloader/taken"
watchlist="/opt/etc/direct-downloader/watchlist"
downloadTo="/tmp/harddisk/torrent/source/"
logfile="/opt/var/log/direct-downloader.log"

touch "$taken"
touch "$watchlist"
while read feedLine
do
feedLink=`echo "$feedLine" | grep "^http:"`
if [ -z "$feedLink" ]; then
torrentName="$feedLine"
Exclude_Taken
if [ -n "$torrentName" ]; then
Apply_Watchlist
fi
elif [ -n "$torrentName" ]; then
echo "Retrieving: ${torrentName}.torrent" >> $logfile
wget -b -O "${downloadTo}${torrentName}.torrent" "$feedLink" 2>&1 >> $logfile
echo $torrentName >> $taken
fi
done

watchlist:


grep "Prison\.Break\.S03" | grep -v "720p"
grep "Stargate\.Atlantis" | grep "HDTV" | grep -v "720p"

Andris

garm99
21-01-2009, 01:33
Помогите довести до ума следующую идею:

В FireFoxe через контекстное меню правой кнопки отправлять ссылки на закачку в "Белую коробку (БК)"
причем "БК" установлена дома, а ссылки отправляются с компа на работе, дома и.т.д вобщем отовсюду.
Частично эту идею реализовать удалось, но опыта пока маловато поэтому прошу совета гуру как эту реализацию можно улушить.

Сообственно что уже получилось:

1. Регистриуемся на www.laterloop.com (http://www.laterloop.com) (сервис по хранению ссылок)
1.1. В разделе "Settings" ставим галку напротив "Publish my Links at"
1.2. Копирум куда нибудь ссылку "public RSS feed" (пригодится в дальнейшем)
1.3. В разделе "Tools" устанавливаем расширение для FireFox
1.4. Пробуем сохранять ссылки - убеждаемся что сервис работает, и ссылки на RSS появляются

2. Устанвливаем на "БК" из репозитария rsstail
2.1 запускаем
rsstail -i 5 -u http://www.laterloop.com/links/НАШ ЛОГИН/rss
2.2. Из FireFox отправляем ссылки на LaterLoop и убеждаемся что они появляюся на консоле "БК"
3. берем в качестве основы скрипт (http://wl500g.info/showthread.php?p=82412&highlight=rsstail#post82412) написанный andyqp (http://wl500g.info/member.php?u=14843)
3.1. модифицируем его немного:

#!/bin/sh
#
# direct-downloader.sh
#

Exclude_Taken()
{
found=`grep "${torrentName}" $taken`
if [ -n "$found" ]; then
torrentName=""
fi
}

######
taken="/opt/etc/laterloop/taken"
watchlist="/opt/etc/laterloop/watchlist"
downloadTo="/opt/share/down/"
logfile="/opt/etc/laterloop/log.log"

touch "$taken"
touch "$watchlist"

while read feedLine
do
feedLink=`echo "$feedLine" | egrep "^http:|^ftp:"`
echo "$feedLink"
if [ -z "$feedLink" ]; then
torrentName="$feedLine"
Exclude_Taken
elif [ -n "$torrentName" ]; then
echo "Retrieving: ${torrentName}" >> $logfile
wget -b -c -P "$downloadTo" "$feedLink" 2>&1 >> $logfile
echo $torrentName >> $taken
fi
done

3.2. чтобы конструкция egrep "^http:|^ftp:"` работала дополнительно устанавливаем busybox 1.10.3-1 (хотя видимо это можно реализовать и по другому , подскажите как )

3.3. запускаем rsstail со скриптом


rsstail -N -l -i 5 -u http://www.laterloop.com/links/НАШ ЛОГИН/rss/ | /opt/etc/laterloop/direct-downloader.sh

4. Отправляем ссылки с FireFox на LaterLoop
5. Наблюдаем как они скачиваются на нашу "БК"

garm99
22-01-2009, 09:34
1. Устанавливаем rsstail на роутер
2. Регистрируемся на сервисе http://www.laterloop.com/
3. В разделе Settings этого сервиса отмечаем галкой пункт Publish my Links at
4. Запоминаем ссылку на ваш Public RSS feed
5. Устанавливаем плагин для FireFox в разделе Tools этого сервиса.
6. Дальше модифицируем скрипт описанный andyqp (http://wl500g.info/showthread.php?p=82412&highlight=rsstail#post82412) под свои задачи

дополнение

для скачивания с Rapidshare нужно добавить еще и это дополнение
и скрипт к нему

Greasemonkey (https://addons.mozilla.org/ru/firefox/addon/748)
Rapidshare Bundle (http://userscripts.org/scripts/show/5907)

кроме того нужно положить в папку со скриптом для rsstail
файл cookies.txt содержащую плюшку с того компа откуда будет оправлена ссылка и соответсвенно добавить в скрипт параметр для wget
--load-cookies=cookies.txt

sonic
22-01-2009, 11:28
1. Устанавливаем rsstail на роутер
2. Регистрируемся на сервисе http://www.laterloop.com/
3. В разделе Settings этого сервиса отмечаем галкой пункт Publish my Links at
4. Запоминаем ссылку на ваш Public RSS feed
5. Устанавливаем плагин для FireFox в разделе Tools этого сервиса.
6. Дальше модифицируем скрипт описанный andyqp (http://wl500g.info/showthread.php?p=82412&highlight=rsstail#post82412) под свои задачи
Будет работатьтолько для прямых ссылок. (вряд возьмет ссылку на торрент, если он в закрытом паролем форуме)
Дополнение
Если нужно передать ссылку на файл
после установки расширения жмем правую кнопку мыши над ссылкой
и выбираем пункт в подменю
"Save for linked page"

garm99
22-01-2009, 13:07
какие плюсы:

1. роутер стоит дома, а FireFox использую на работе, у друзей и.т.д где угодно. ссылку отправил - пришел домой - все уже скачалось. Возможно отправка и с мобильных устройств наверное.
2. ссылку отправляю по правой кнопке - прямо из контекстного меню браузера.
3. безопасность - роутер сам скачивает ссылки из инета - дополнительные веб морды качалок в инет открывать не нужно.

timoh
31-03-2009, 10:36
Здравствуйте.
есть вот такой интересный скрипт на habrahabr (http://habrahabr.ru/blogs/i_am_clever/47263/) который в заданный промежуток времени скачивает .torrent файлы из rss и кладет их определенную папку, из которой rtorrent их и подхватывает.
я, к сожалению, слабо в этом шарю и прошу помощи :)
при его запуске вываливается вот такая картина:

PHP Warning: simplexml_load_string(): Entity: line 1: parser error : Unsupported encoding windows-1251 in /opt/etc/torrents/torrents.php on line 43
PHP Warning: simplexml_load_string(): <?xml version="1.0" encoding="windows-1251" ?> in /opt/etc/torrents/torrents.php on line 43
PHP Warning: simplexml_load_string(): ^ in /opt/etc/torrents/torrents.php on line 43
PHP Notice: Trying to get property of non-object in /opt/etc/torrents/torrents.php on line 45
PHP Notice: Trying to get property of non-object in /opt/etc/torrents/torrents.php on line 45
PHP Warning: Invalid argument supplied for foreach() in /opt/etc/torrents/torrents.php online 45

гуглится на переустановки всяких libiconv. что смог поделал, но так и не нашел решения :(

Novik
31-03-2009, 10:54
Некорректно оно написано. Там много чудесного - автор пользует mb_convert_encoding, не проверив - а есть ли вообще такая функция (например, на роутере по умолчанию данный пакет не ставится, доставлять надо). Потом, если фид в cp1251, он рекодирует его содержимое в utf-8. Не заботясь об изменении соотв. поля encoding в заголовке фида. Выбросьте бяку, не будет оно нормально работать без основательного приложения напильника.

Cd_spb
31-03-2009, 12:13
Я себе такое сваял на коленке, под LostFilm. Могу выложить, если кому интересно. Но писалось под конкретную задачу, так что мозги все равно придется прикладовать.