alxrt 23.03.2011 10:38

СкриптыПолучение торрентов с rutracker.org

Еще один скриптик для получения данных.
На данный момент реализовано только получение torrent-файлов по идентификатору топика, но в планах есть и получение описания, и выполнение запросов на поиск с сортировкой и выборкой данных.

UPD: Поправил пару косяков, связанных с разными доменными именами у разных трекеров.


  1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/bin/bash

# Gettorrent Script by alxrt

# Синтаксис:
# ./gettorrent TOPIC_ID <-h HOST> <-u USERNAME> <-p PASSWORD> <-o filepath>
# TOPIC_ID: Идентификатор топика, к которому относится торент.
# -h HOST: Хост трекера. Обычно rutracker.org или pornolab.net ;-)
# -u USERNAME: Имя пользователя
# -p PASSWORD: Пароль пользователя
# -o filepath: Имя сохраняемого файла

# Настройки

TR_HOST="rutracker.org"
TR_USER=""
TR_PASSWORD=""

SC_COOKIE="/tmp/gt-$TR_HOST-$TR_USER.ck"
SC_UA="Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.2.15) Gecko/20110303 Ubuntu/10.10 (maverick) Firefox/3.6.15"
SC_FILEPATH=""
#SC_PROXY="" # hostname:port
#SC_PROXY_AUTH="" #user:password

if < -n "$SC_PROXY" >; then
curl_proxy="-x $SC_PROXY -U $SC_PROXY_AUTH"
echo $curl_proxy
fi

#Functions

die() {
echo "Синтаксис:"
echo "./gettorrent TOPIC_ID <-h HOST> <-u USERNAME> <-p PASSWORD> <-o filepath>"
echo "TOPIC_ID: Идентификатор топика, к которому относится торент."
echo "-h HOST: Хост трекера. Обычно rutracker.org или pornolab.net ;-)"
echo "-u USERNAME: Имя пользователя"
echo "-p PASSWORD: Пароль пользователя"
echo "-o filepath: Имя сохраняемого файла"
exit
}

waitf() {
PERIOD="1."`head -n 1 /dev/urandom |md5sum |cut -d " " -f1|sed -e "s/<a-za-z>.//g"`
sleep 0.$period
}

check_auth() {
echo "Cheking auth"
if < -w $SC_COOKIE >; then
result=`curl --trace-ascii - -b $SC_COOKIE $curl_proxy -c $SC_COOKIE -A "$SC_UA" "http://$TR_HOST/forum/index.php"|egrep -o 'action=".*login\.php"'|egrep -o "<a-za-z0-9>*login\.php"`
if < -z "$result" >; then
if < -z `echo $result|grep "http:"` >; then
autpath="http://$TR_HOST/forum/$result"
else
autpath="$result"
fi
return `true`
else return `false`; fi
else
result=`curl --trace-ascii - -c $SC_COOKIE $curl_proxy -A "$SC_UA" "http://$TR_HOST/forum/index.php"|egrep -o 'action=".*login\.php"'|egrep -o "</a-za-z0-9><a-za-z0-9>*login\.php"`
if < -z `echo $result|grep "http:"` >; then
autpath="http://$TR_HOST/forum/$result"
else
autpath="$result"
fi
echo $result
return `false`
fi


}

make_auth(){
echo "Makin auth"
if < -w $SC_COOKIE >; then
cookie_data=`cat $SC_COOKIE`
curl --trace-ascii - -b $SC_COOKIE $curl_proxy -c $SC_COOKIE -A "$SC_UA" -d "login_username=$TR_USER" -d "login_password=$TR_PASSWORD" --data-binary "login=%C2%F5%EE%E4" "$autpath">/dev/null
else
curl --trace-ascii - -c $SC_COOKIE $curl_proxy -A "$SC_UA" -d "login_username=$TR_USER" -d "login_password=$TR_PASSWORD" --data-binary "login=%C2%F5%EE%E4" "$autpath">/dev/null
fi
}

parse_topic(){
echo "Parsing topic"
result=`curl --trace-ascii - -b $SC_COOKIE $curl_proxy -c $SC_COOKIE -A "$SC_UA" "http://$TR_HOST/forum/viewtopic.php?t=$SC_TOPICID"|egrep -o "</a-za-z0-9><a-za-z0-9>*dl\.php"|head -n1`
if < -z `echo $result|grep "http:"` >; then
dlpath="http://$TR_HOST/forum/$result"'?t='"$SC_TOPICID"
else
dlpath="$result"'?t='"$SC_TOPICID"
fi
echo $dlpath
}

get_torrent(){
echo "Getting torrent"
if < -z "$SC_FILEPATH" >; then
curl --trace-ascii - -d "" $curl_proxy -b $SC_COOKIE -c $SC_COOKIE -A "$SC_UA" -o "<$TR_HOST>.t$SC_TOPICID.torrent" -e "http://$TR_HOST/forum/viewtopic.php?t=$SC_TOPICID" "$dlpath"
else
curl --trace-ascii - -d "" $curl_proxy -b $SC_COOKIE -c $SC_COOKIE -A "$SC_UA" -o $SC_FILEPATH -e "http://$TR_HOST/forum/viewtopic.php?t=$SC_TOPICID" "$dlpath"
fi
}

check_arg() {
if < -z `echo $1|egrep '^-'` >; then
return `true`;
else
return `false`;
fi
}

# Body of script
tst=`printf $1|egrep '^<0-9>+$'`
if < -z $tst >; then
die
else
SC_TOPICID=$1
fi

while shift; do
case $1 in
"-h")
shift&&check;_arg&&TR;_HOST="$1"||die
;;
"-u")
shift&&check;_arg&&TR;_USER=$1||die
;;
"-p")
shift&&check;_arg&&TR;_PASSWORD=$1||die
;;
"-o")
shift&&check;_arg&&SC;_FILEPATH=$1||die
;;
esac
done

SC_COOKIE="/tmp/gt-$TR_HOST-$TR_USER.ck"


if check_auth; then
waitf
parse_topic
waitf
get_torrent
else
waitf
make_auth
waitf
parse_topic
waitf
get_torrent
fi
</a-za-z0-9></a-za-z>



P.S. Ожидаю пожеланий и комментариев.


Тэги: bash download rutracker
+ 7 -
Похожие Поделиться

knyazeff 23.03.2011 10:44 #
Напишите пожалуйста как вы используете этот скрипт на практике?
uscr 23.03.2011 10:53 #
Да. Мне тоже интересно. Я не понимаю практической пользы.
maksimilian 23.03.2011 16:25 #
можно в крон добавить его скажем чтоб раз в неделю проверять раздачу любимого сериала, тема которого на форуме всегда с тем же id (раздачи с добавлением новых серий), либо чем то парсить рсс рутрекера получая id нужных тем и передавая их в скрипт
inst 23.03.2011 20:57 #
Я для этого использую специализированные ресурсы :)
alxrt 23.03.2011 10:55 #
Вначале его необходимо настроить, заполнив имя пользователя и пароль от трекера:

TR_USER="username"
TR_PASSWORD="password"

Кроме того, если Вы несчастный пользователь прокси сервера, то еще надо будет заполнить SC_PROXY и SC_PROXY_AUTH в формате "host:port" и "proxyuser:proxypassword" соответственно.

Использовать следующим образом:

./gettorrent 2827227


Вообще, если накосячить с параметрами будет выведен список всех доступных параметров.
alxrt 23.03.2011 10:58 #
А, сорри, не совсем правильно понял вопрос.
Этот скрипт я планирую использовать как часть системы автоматической закачки торрентов (в совокупности с поиском можно будет не парясь получать новинки кино прямо в расшаренную папку).
maksimilian 23.03.2011 11:14 #
а не смотрели в сторону http://flexget.com/ ? может у вас получится научить его качать торренты с рутрекера
alxrt 23.03.2011 16:13 #
К сожалению, я совершенно не знаю питон, и, при этом, пока нет времени на его изучение. :-(
uscr 23.03.2011 16:18 #
нет времени

Если есть опыт программирования даже на паскале, то нужен один час.
Я серьёзно.
maksimilian 23.03.2011 16:23 #
там наверное не нужно знание питона, может хватит cookies от рутрекера + (URL Rewrite) плагина
x0x01 24.03.2011 11:09 #
А предложите способ, как отследить изменение torrent файла (например torrent перезалит с добавлением новой серии в раздачу) на том-же rutracker? Скачивать повторно и чекать хеши не предлагать ;) По результату сделаю mini_flexget для rutracker на Python
maksimilian 24.03.2011 12:01 #
curl http://rutracker.org/forum/viewtopic.php?t=ID | grep Зарегистрирован < | ну тут дальше какую нибудь проверку со старой датой регистрации торрента и если дата новая то перекачивать, хотелось бы всеже плагином для flexget это получить, зачем еще один велосипед когда старый отлично работает
x0x01 24.03.2011 12:49 #
Отличный вариант, спасибо. За выходные разберусь с плагинами flexget, сам использую его для "вменяемых" новы и лоста. Сейчас поставил задачу из списка url обходить рутрекер и чекать на предмет обновления, качать обновленные.
maksimilian 24.03.2011 13:01 #
кстати многое что есть на rutracker.org так же есть на rutor.org, а там собственно есть вменяемая rss без авторизации, может эта информация вам сэкономит время и нервы
cocucka 24.03.2011 15:48 #
Чекать content-length торрент файла.
Daria 28.03.2011 01:08 #
месье знает толк в извращениях, чего только стоит 45ая строчка!
alxrt 28.03.2011 09:37 #
Это еще фигня! Вот когда я выложу скрипт выкачки чанов (имиджборд), тогда будет разврат.
А если говорить про 45 строку - Да, тогда я только начинал писать на баше и не знал про $random
sokrat 22.11.2012 22:47 #
Выложить отлаженный для дебиан, ибо не могу отладить ошибки