Уведомления

Группа в Telegram: @pythonsu

#1 Июль 2, 2011 00:41:15

tibs
От:
Зарегистрирован: 2011-06-30
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Скачка торрент-файлов с трекера при помощи python

В питоне не силен. Помогите, пожалуйста.
Нужно скачать торрент-файлы с трекера. Ссылки на них вытягиваются регуляркой из сохраненных страничек. Логин и пароль под звездами правильные ввожу.
Вот мой код:

#-*- coding: cp1251 -*-
import os,cookielib,urllib2,urllib,re,sys

directory = 'c:/kilotorrent/list'
data2={'login_username':'***','login_password':'***','login':'Вход'}
LoginUrl=r'http://login.rutracker.org/forum/login.php'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
enc_data2=urllib.urlencode(data2)
opener.open(LoginUrl,enc_data2)

files = os.listdir(directory)

for FileName in files:
r=str(open(directory+'/%s'%(FileName),'rb').read())
re1='dl\.php\?t=(\d*)'
m=re.findall(re1,r,16)
for i in m:
tor=opener.open("http://dl.rutracker.org/forum/dl.php?t=%s"%i).read()
open('torrent/%s.torrent'%i,'wb+').write(tor)
print u"Торрент успешно сохранен"
В итоге получаю :
<center><br /><br />Скачивание возможно только со страниц трекера.<br /><br />Попробуйте <a href="http://rutracker.org/forum/viewtopic.php?t=3630065">перейти на страницу с раздачей</a> и кликнуть на ссылку для скачивания торрент-файла.</center>

С странички http://rutracker.org/forum/tracker.php качает торренты без проблем, без дополнительного перехода в тему.

Вот еще заголовки, когда качаю с странички торрент-файл вручную.
POST /forum/dl.php?t=3636051

http://dl.rutracker.org/forum/dl.php?t=3636051

POST /forum/dl.php?t=3636051 HTTP/1.1
Host: dl.rutracker.org
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.18) Gecko/20110614 Firefox/3.6.18 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://rutracker.org/forum/viewtopic.php?t=3636051
Cookie: bb_t=a%3A4%3A%7Bi%3A3228112%3Bi%3A1288262044%3Bi%3A3219939%3Bi%3A1288159172%3Bi%3A3163291%3Bi%3A1289227832%3Bi%3A3636051%3Bi%3A1309516972%3B%7D; bb_data=1-9972480-bfFCKnjiRthGmvGmzAM0-2994217755-1309555918-1309555918-2116105708-1; bb_dl=3636051
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 01 Jul 2011 21:32:07 GMT
Content-Type: application/x-bittorrent; name="[rutracker.org].t3636051.torrent"
Transfer-Encoding: chunked
Connection: keep-alive
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Fri, 01 Jul 2011 21:32:07 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: bb_dl=deleted; expires=Thu, 01-Jul-2010 21:32:06 GMT; path=/forum/; domain=.rutracker.org
Content-Disposition: attachment; filename="[rutracker.org].t3636051.torrent"
----------------------------------------------------------



Офлайн

#2 Июль 2, 2011 11:24:59

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Скачка торрент-файлов с трекера при помощи python

У меня вот это работает:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vim: sw=4 ts=4 expandtab ai

import os
import sys
import urllib
import urllib2
import cookielib

def main(args):
login, password, topic_id, outf = args

# prepare opener with cookie handling
cookies = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))
data = urllib.urlencode({'login_username': login,
'login_password': password,
'login': ''})

# login
opener.open('http://login.rutracker.org/forum/login.php', data)

# open torrent url
torrent_url = 'http://dl.rutracker.org/forum/dl.php?t=%s' % topic_id
handle = opener.open(torrent_url, data)

# write it to output file
out = open(outf, 'wb')
out.write(handle.read())
out.close()

return 0

if __name__ == "__main__":
if len(sys.argv) != 5:
print "Usage: %s <login> <password> <topic id> <output file>" % \
os.path.basename(sys.argv[0])
sys.exit(1)
sys.exit(main(sys.argv[1:]))
Думаю дальше разберетесь сами. Если нет - задавайте вопросы.



Офлайн

#3 Июль 2, 2011 12:36:26

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Скачка торрент-файлов с трекера при помощи python

Вообще по-хорошему неплохо было бы просто читать уже скачаные торренты с помощью какого-нибудь libtorrent и апдейтить их. Если torrent клиент не поймет и не начнет скачивать обновленный торрент, то нужно ему об этом сказать. В моем случае это можно сделать через python-transmissionrpc. Нужно будет попробовать.
А вообще спасибо за идею. Надоело уже вручную их обновлять.



Офлайн

#4 Июль 14, 2011 22:34:19

tibs
От:
Зарегистрирован: 2011-06-30
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Скачка торрент-файлов с трекера при помощи python

Спасибо большое, ваш код работает.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version