]> gitweb.pimeys.fr Git - scripts-20-100.git/blob - t411_torrents.py
[update_myscripts] bde-fallback plus clair que bde2
[scripts-20-100.git] / t411_torrents.py
1 #!/usr/bin/env python
2 # -*- encoding: utf-8 -*-
3
4 """ Pour récupérer tous les .torrents déjà téléchargés sur t411.me """
5
6 import requests
7 import getpass
8 import re
9
10 DEBUG = True
11
12 #: URL principale de t411
13 main_url = "https://www.t411.me/"
14 #: Page de login
15 login_url = main_url + u"users/login/"
16 #: Page de profil utilisateur
17 profile_url = main_url + u"users/profile/"
18 #: Page d'historique
19 history_url = main_url + u"users/history/"
20 #: Page de download de .torrent
21 torrent_url = main_url + u"torrents/download/?id=%(torrentid)s"
22
23 #: Regex pour trouver l'id du torrent
24 torrentid_pattern = ur'<a href="/torrents/download/\?id=(\d+)"'
25 torrentid_regex = re.compile(torrentid_pattern)
26
27 #: Dossier où enregistrer les .torrent
28 torrent_folder = u"/home/vincent/Vidéos/torrents/"
29
30 def do_connect(login, password):
31 """Se logue et renvoie les cookies."""
32 response = requests.post(login_url, data={"login": login, "password": password})
33 return response.cookies
34
35 def connect():
36 """Demande login/password à l'utilisateur et se connecte."""
37 login = raw_input("login: ")
38 password = getpass.getpass()
39 return do_connect(login, password)
40
41 def generator_torrent_links(cookies, urlpattern):
42 """Ouvre successivement les pages d'url ``urlpattern % n`
43 jusqu'à ce qu'il n'y ait plus de torrents. Ça donne un generator."""
44 n = 0
45 while True:
46 url = urlpattern % n
47 if DEBUG:
48 print url
49 response = requests.get(url, cookies=cookies)
50 torrent_links = re.findall('href="(//www.t411.me/torrents/.*?)"', response.content)
51 torrent_links = ["https:" + i for i in torrent_links]
52 if len(torrent_links) == 0:
53 raise StopIteration
54 yield torrent_links
55 n += 1
56
57 def crawl_history(cookies):
58 """Récupère la liste des liens vers les torrents dans l'historique."""
59 urlpattern = history_url
60 urlpattern += "?page=%s"
61 liste = sum(generator_torrent_links(cookies, urlpattern), [])
62 return liste
63
64 def get_torrentid(url, cookies):
65 """Récupère l'id du torrent à partir de l'``url`` de sa page."""
66 response = requests.get(url, cookies=cookies)
67 ids = torrentid_regex.findall(response.content)
68 if DEBUG:
69 print url
70 #print ids
71 return ids[0]
72
73 def get_torrentids(cookies, torrentlinks):
74 """Récupère les ids de tous les torrents de l'historique."""
75 return [get_torrentid(url, cookies) for url in torrentlinks]
76
77 def get_torrent(cookies, id):
78 """Récupère le .torrent n°``id``."""
79 url = torrent_url % {"torrentid" : id}
80 if DEBUG:
81 print url
82 response = requests.get(url, cookies=cookies)
83 raw_torrent_file = response.content
84 return raw_torrent_file
85
86 def save_torrent_file(filename, raw):
87 """Sauvegarde un fichier torrent."""
88 with open(torrent_folder + filename, "w") as f:
89 f.write(raw)
90
91 def do_all():
92 """Fait tout."""
93 cookies = connect()
94 linkslist = crawl_history(cookies)
95 idslist = get_torrentids(cookies, linkslist)
96 for id in idslist:
97 raw = get_torrent(cookies, id)
98 save_torrent_file(id + ".torrent", raw)
99 print "Torrents downloaded in %s" % torrent_folder
100
101 if __name__ == "__main__":
102 do_all()